diff options
Diffstat (limited to '')
331 files changed, 155426 insertions, 0 deletions
diff --git a/2023.md b/2023.md new file mode 100644 index 00000000..1d5b5373 --- /dev/null +++ b/2023.md @@ -0,0 +1,56 @@ +[[!meta copyright="Copyright © 2021, 2022 Amin Bandali; 2023 Sacha Chua"]] +[[!sidebar content=""]] + +<p class="center">EmacsConf 2023 | Online Conference<br /> +<b>December 2 and 3, 2023 (Sat-Sun)</b></p> + +<p class="center">[[!img /i/emacsconf-logo1-256.png +alt="EmacsConf logo"]]</p> + +<p class="center"><strong>[[2023 Report|report]]</strong> | <strong>[[Talks|talks]]</strong> | [[Volunteer]] | [[Prepare]] | [[Planning]] | [[Guidelines for Conduct|conduct]] | [[Contact information|contact]]</p> + +<p class="center">EmacsConf is the conference about the joy of +<a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> and +Emacs Lisp. Check out the [[conference report!|report]]</p> + +All the pre-recorded videos and live BBB recordings are now available at +<https://emacsconf.org/2023/talks>. We'll be working on extracting more information +over the next few weeks. If you'd +like updates, please sign up for +[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +or check this page in a while. + + [[**Volunteer**|volunteer]], get involved, and help spread the word! + +We held EmacsConf 2023 as an **online conference** again this year. +We remain fully committed to freedom, and we will continue using our +infrastructure and streaming setup consisting entirely of [free +software][freesw], much like previous EmacsConf conferences. + +There was also a satellite event in +[Lucerne, Switzerland](https://200ok.ch/posts/2023-11-01_announcing_emacsconf__swiss_satellite.html). +Let us know if you want to organize one next year! + +For general EmacsConf discussions, join the +[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +mailing list. For discussions related to organizing EmacsConf, join +the +[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org) +mailing list. You can email us publicly at +<mailto:emacsconf-org@gnu.org> or privately at +<mailto:emacsconf-org-private@gnu.org>. + +Come hang out with us in the `#emacsconf` channel on `irc.libera.chat` +([Libera.Chat][libera] IRC network). You can join the chat using +[your favourite IRC client][libera-emacsconf], or by visiting +[chat.emacsconf.org][chat] in your web browser. + +[freesw]: https://www.gnu.org/philosophy/free-sw.html +[libera]: https://libera.chat +[libera-emacsconf]: ircs://irc.libera.chat:6697/emacsconf +[chat]: https://chat.emacsconf.org + +Archived pages: +* [[Call for Participation|cfp]] +* [[Ideas]] +* [[Submit]] diff --git a/2023/bbb-for-speakers.md b/2023/bbb-for-speakers.md new file mode 100644 index 00000000..2f77c24f --- /dev/null +++ b/2023/bbb-for-speakers.md @@ -0,0 +1,127 @@ +[[!meta title="BigBlueButton tips for speakers"]] +[[!meta copyright="Copyright © 2023 Sacha Chua"]] + +# BigBlueButton tips for speakers + +We'll be using BigBlueButton for EmacsConf 2023 live presentations and +web conference Q&A sessions. It should act mostly like other web +conferencing systems people have used before, but just in case, it's a +good idea to test it with your setup before the conference begins. + +We've set up one room for each speaker or group of speakers. We'll +e-mail you with your personal URL, and you can also find it +[backstage](https://media.emacsconf.org/2023/backstage) as the "Open +backstage BigBlueButton" link for your talk. Before the conference, we'll set it so +that anyone can start a meeting and all users are moderators. That +way, when you connect to the meeting room to test your setup, you'll +be able to share your screen and/or your webcam. + +## Audio + +- When you connect to the meeting, it will say "How would you like to + join the audio?" After you choose "Microphone", it will display + "Connecting to echo test..." and then "This is a private echo test. + Speak a few words. Did you hear audio?" When you talk, you should + hear your words echoed back to you after a short delay. If you + don't, please try different audio settings, check your web browser's + audio permissions, or try a different web browser. + - [How to manage your camera and microphone permissions with Mozilla Firefox](https://support.mozilla.org/en-US/kb/how-manage-your-camera-and-microphone-permissions) + - [How to manage your camera and microphone permissions with Google Chrome](https://support.google.com/chrome/answer/2693767?hl=en&co=GENIE.Platform%3DDesktop) + + You can repeat the echo test by leaving and rejoining the audio + using the telephone handset icon at the bottom. + +- Using headphones or earphones can help reduce noise and avoid audio + feedback loops. If you happen to have an external microphone, using + it may also help reduce noise. + +- You will start off muted. You can unmute yourself by using the + microphone icon near the bottom. Then you can doublecheck your audio + by seeing if your name shows up with a microphone icon near the top + when you're speaking, or by joining from another device. + +- If you plan to share sounds from your computer (not just your + microphone), please test if this works and if the audio can be heard + via the web conference. It should be echoed back to you during the + echo test. If it isn't echoed back to you, + +- BigBlueButton sometimes makes interesting choices about audio + levels. If you can familiarize yourself with the microphone volume + control setting for your system, that will make it easier to adjust + audio during the conference. + +## Sharing + +- You can share your screen using the monitor icon on the bottom + toolbar. (This might not be available on phones.) Sharing a single + window might be better than sharing the whole screen, because then + you'll be able to easily resize the window in order to improve + readability. + +- Sharing screens can be a little tricky with multi-monitor setups. If + you use more than one monitor, please check if sharing works the way + you expect it to. If it doesn't, you may need to consider using one + monitor during your Q&A session. + +- Uploading a presentation (PDF or other document types) doesn't work + on our instance, so if you would like to share something, you will + need to share your screen. + +## What to expect during the conference + +I'll change the room settings on Dec 1 so that anyone can start the +web conference but people won't be moderators when they join. Please +check your setup before then. + +You can check in during the conference by introducing yourself in the +[#emacsconf-org channel](https://chat.emacsconf.org/?join=emacsconf-org) +with something like "Hi, this is *name* checking in". Please check in +ideally 30 minutes or more before your live talk or Q&A session so +that we don't start panicking. The check-in volunteer will join you in +your BigBlueButton room, make you a moderator, and go through the +pre-flight checklist with you. + +Here is the checklist we'll do: + +- Can you speak and be heard? Is there echo? +- Can you hear the check-in volunteer? +- Can you share your screen? Will the screen be readable at 1280x720? +- If you plan to show your keystrokes, is that display visible? +- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? +- Can you view the Etherpad where we'll collect questions? (The Etherpad link is in the backstage area under your talk.) Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or do you want a volunteer to read questions to you? +- If you plan to play sounds during your Q&A session, are they audible? + +After the check-in volunteer gets you settled in, you can keep the +browser tab open with the BigBlueButton room, stretch, get a glass of +water, etc. A few minutes before your Q&A session starts, we'll pop +back in to give you a heads-up. We'll remind you to close any other +tab where you might be watching EmacsConf so that you don't end up +hearing yourself with a delay (that can be quite confusing), and we'll +start the recording. We'll start the recording when the host and +streamer join you. + +You can answer whatever questions you like in whatever order you like. +We would greatly appreciate it if you read the question out loud first +before you answer it. That makes it much easier to capture the notes +and to add an index so that people can jump to specific questions. + +When you and the host are comfortable with how things are going, we +can open it up for people to join you so they can chat with you +directly. You can stay in the web conference room and chat with them +for as long as you like. When you're ready to wrap up, you can click +on the three-dot menu in the top right and choose **End meeting**. + +If you accidentally share something or say something that you want to +be removed from the recording (it happens!), type something into the +text chat like "oops!" with possibly some details of what you'd like +us to do. We can get the timestamp from that and look into editing the +recording. + +## After the conference + +We'll download the recordings, process them, copy questions and +answers to the wiki page, and see if we can add a chapter index so +people can jump to specific parts of the discussion. We'll keep you up +to date as things move through the process. + +Thank you so much for being part of EmacsConf! 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. diff --git a/2023/cfp.md b/2023/cfp.md new file mode 100644 index 00000000..c2c1eac2 --- /dev/null +++ b/2023/cfp.md @@ -0,0 +1,103 @@ +[[!meta title="Call for Participation"]] +[[!meta copyright="Copyright © 2020 Amin Bandali, Sacha Chua, +David Bremner<br /> +Copyright © 2021 Amin Bandali, Sacha Chua, Leo Vivier, +Sebastian Crane<br /> +Copyright © 2022 Amin Bandali<br /> +Copyright © 2023 Sacha Chua"]] +<!-- cfp.md is exported from cfp.org, please modify that instead. --> + +# Call for participation + +What have you found exciting about [Emacs](https://www.gnu.org/software/emacs/) lately? Have you figured out +a good workflow? Used Emacs for something interesting? Come share +what you've been learning at EmacsConf 2023 and meet other enthusiasts +along the way! All backgrounds and all levels of experience are +welcome. Emacs isn't just a text editor, it's a way of life! + +Not sure what to talk about? We've shared a few [ideas](https://emacsconf.org/2023/ideas/) to help you get +started. + +[EmacsConf 2023](https://emacsconf.org/2023/) will be a virtual conference on **December 2 and 3, 2023 +(Sat-Sun, 9AM-5PM UTC-5 / 2PM-10PM UTC)**. If you'd like to present at +the conference, please **[submit your proposal](https://emacsconf.org/2023/cfp/)** by **September 15, 2023 +(Friday)**. You can also take a look at [the talks so far](https://emacsconf.org/2023/talks) to see how +your talk can add to other ideas! + +# Talk formats + +Ideally, talks will be prerecorded so that you can script and edit +them as tightly as you want, and so that they can be captioned for +accessibility. Here are the talk options: + +- **5-10 minute lightning talk:** just the essentials! If you can + squeeze your prerecorded talk into 5-10 minutes by focusing on the + essentials (not by talking super quickly!), we might be able to + repeat it during the conference in order to fill gaps. +- **20-minute talk:** short enough to keep people's attention, long + enough to get into some details. + +There will be time for questions and answers after your talk, so you +don't need to include that in your talk timing. Just like in EmacsConf +2022, you can answer questions via a live BigBlueButton web +conference, IRC ([Internet Relay Chat](https://chat.emacsconf.org)), the Etherpad (a web-based +collaborative document), the wiki, or e-mail (your choice). The stream +will move on to the next talk at the scheduled time, but interested +people can keep hanging out with you for a longer conversation. + +If you are not available during the conference itself but you have +a neat idea that you'd like to share, please propose it anyway! +You can always handle questions after the conference, and we might +even be able to coordinate with other Emacs meetups for events in +other timezones. + +We may have time for a few longer sessions. If you'd like to be +considered for a longer time slot, please include an outline for the +extra time in addition to your 20-minute proposal. Other session +formats such as tutorials, workshops, and hangouts are welcome as +well. + +# Submitting your proposal + +[Send us your idea](https://emacsconf.org/2023/submit/) as soon as you can, so that you can have more time +to work on your talk. (Proposal deadline: September 15, 2023) This +year, we'd like to experiment with accepting proposals throughout the +CFP process. If there are similar proposals, we'll work with people +so that the talks can cover different facets. + +If you need help, you can e-mail us publicly at [emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org) +or privately at [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org). You can also come and +say hi to us on our IRC channel `#emacsconf` on `irc.libera.chat` +using [your favourite IRC client](ircs://irc.libera.chat:6697/emacsconf), or by visiting [chat.emacsconf.org](https://chat.emacsconf.org) in +your web browser. + +# Know someone who might have something to share? + +All kinds of people use Emacs for all kinds of things. We'd love it +if EmacsConf 2023 could highlight interesting perspectives and reflect +the diversity of our community. If you know someone who might have a +good idea for a talk, please reach out to them and encourage them to +submit a proposal. Many people (especially from underrepresented +groups such as women, people of colour, non-developers, etc.) might +not consider themselves proficient enough to share their thoughts. +If you let them know that you value their knowledge and experiences, +and maybe even suggest something that you think others would like to +hear about, they may realize that they do have something worth sharing +and that we would love to hear from them. + +# Want to volunteer? + +If you would like to help with the conference (planning the sessions, +reviewing proposals, helping with infrastructure, making sessions more +accessible, editing video transcripts, etc.), see our [volunteer](https://emacsconf.org/2023/volunteer/) page. +Volunteers get early access to talks and learn lots of things along +the way. We'd really appreciate your help in making EmacsConf 2023 +the best one so far! + +# Commitment to freedom + +We remain fully committed to freedom. You'll be able to participate +in EmacsConf using [free/libre software](https://www.gnu.org/philosophy/free-sw.html), and we use free/libre software +to organize and run the conference. You can find some notes about our +setup and process at <https://emacsconf.org/infra/>. + diff --git a/2023/cfp.org b/2023/cfp.org new file mode 100644 index 00000000..30467c49 --- /dev/null +++ b/2023/cfp.org @@ -0,0 +1,181 @@ +# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]] +# [[elisp:(org-ascii-export-as-ascii nil nil nil t)][Export this file to ASCII]] + +#+title: EmacsConf 2023 +#+subtitle: Online Conference +#+date: December 2 and 3, 2023 +#+options: author:nil toc:nil + +#+begin_export md +[[!meta title="Call for Participation"]] +[[!meta copyright="Copyright © 2020 Amin Bandali, Sacha Chua, +David Bremner<br /> +Copyright © 2021 Amin Bandali, Sacha Chua, Leo Vivier, +Sebastian Crane<br /> +Copyright © 2022 Amin Bandali<br /> +Copyright © 2023 Sacha Chua"]] +<!-- cfp.md is exported from cfp.org, please modify that instead. --> +#+end_export + +* COMMENT How to export this file :noexport: + +As of the time of writing this document (Org mode version 9.3.7), the +Org links library (=ol.el=) does not yet recognize =ircs= link types, +and will throw an error if you try to export a file containing them, +such as this file. + +To work around that, you can use something along the lines of the +Emacs Lisp code below, by either adding it to your init file, or by +putting the point in the code block and hitting =C-c C-v e= (that is, +hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to +evaluate the code, working around the issue only for the current +session. + +#+begin_src emacs-lisp :results silent +(org-link-set-parameters + "ircs" + :export + (lambda (link description format) + "Export an ircs link. +See `org-link-parameters' for details about LINK, DESCRIPTION and +FORMAT." + (let ((desc (or description link))) + (pcase format + (`html (format "<a href=\"ircs:%s\">%s</a>" link desc)) + (`md (format "[%s](ircs:%s)" desc link)) + (_ nil))))) +#+end_src + +Other CFPs we can borrow ideas from: + +- https://debconf23.debconf.org/cfp/ - includes early submission timeline +- https://fosdem.org/2023/news/2022-11-13-call-for-presentations/ - mentions upload date, license +- https://www.fsf.org/blogs/community/libreplanet-2023-will-be-held-march-18-19-cfs-extended-to-november-23 +- https://www.reddit.com/r/scala/comments/103v6e5/scalar_2023_cfp_is_still_open/ - very short + +* Call for participation +:PROPERTIES: +:CUSTOM_ID: cfp +:END: + +What have you found exciting about [[https://www.gnu.org/software/emacs/][Emacs]] lately? Have you figured out +a good workflow? Used Emacs for something interesting? Come share +what you've been learning at EmacsConf 2023 and meet other enthusiasts +along the way! All backgrounds and all levels of experience are +welcome. Emacs isn't just a text editor, it's a way of life! + +Not sure what to talk about? We've shared a few [[https://emacsconf.org/2023/ideas/][ideas]] to help you get +started. + +[[https://emacsconf.org/2023/][EmacsConf 2023]] will be a virtual conference on *December 2 and 3, 2023 +(Sat-Sun, 9AM-5PM UTC-5 / 2PM-10PM UTC)*. If you'd like to present at +the conference, please *[[https://emacsconf.org/2023/cfp/][submit your proposal]]* by *September 15, 2023 +(Friday)*. You can also take a look at [[https://emacsconf.org/2023/talks][the talks so far]] to see how +your talk can add to other ideas! + +* Talk formats +:PROPERTIES: +:CUSTOM_ID: formats +:END: + +Ideally, talks will be prerecorded so that you can script and edit +them as tightly as you want, and so that they can be captioned for +accessibility. Here are the talk options: + +- *5-10 minute lightning talk:* just the essentials! If you can + squeeze your prerecorded talk into 5-10 minutes by focusing on the + essentials (not by talking super quickly!), we might be able to + repeat it during the conference in order to fill gaps. +- *20-minute talk:* short enough to keep people's attention, long + enough to get into some details. + +There will be time for questions and answers after your talk, so you +don't need to include that in your talk timing. Just like in EmacsConf +2022, you can answer questions via a live BigBlueButton web +conference, IRC ([[https://chat.emacsconf.org][Internet Relay Chat]]), the Etherpad (a web-based +collaborative document), the wiki, or e-mail (your choice). The stream +will move on to the next talk at the scheduled time, but interested +people can keep hanging out with you for a longer conversation. + +If you are not available during the conference itself but you have +a neat idea that you'd like to share, please propose it anyway! +You can always handle questions after the conference, and we might +even be able to coordinate with other Emacs meetups for events in +other timezones. + +We may have time for a few longer sessions. If you'd like to be +considered for a longer time slot, please include an outline for the +extra time in addition to your 20-minute proposal. Other session +formats such as tutorials, workshops, and hangouts are welcome as +well. + +* Submitting your proposal +:PROPERTIES: +:CUSTOM_ID: submitting +:END: + +[[https://emacsconf.org/2023/submit/][Send us your idea]] as soon as you can, so that you can have more time +to work on your talk. (Proposal deadline: September 15, 2023) This +year, we'd like to experiment with accepting proposals throughout the +CFP process. If there are similar proposals, we'll work with people +so that the talks can cover different facets. + +If you need help, you can e-mail us publicly at [[mailto:emacsconf-org@gnu.org][emacsconf-org@gnu.org]] +or privately at [[mailto:emacsconf-org-private@gnu.org][emacsconf-org-private@gnu.org]]. You can also come and +say hi to us on our IRC channel =#emacsconf= on =irc.libera.chat= +using [[ircs://irc.libera.chat:6697/emacsconf][your favourite IRC client]], or by visiting [[https://chat.emacsconf.org][chat.emacsconf.org]] in +your web browser. + +* Know someone who might have something to share? +:PROPERTIES: +:CUSTOM_ID: sharing +:END: + +All kinds of people use Emacs for all kinds of things. We'd love it +if EmacsConf 2023 could highlight interesting perspectives and reflect +the diversity of our community. If you know someone who might have a +good idea for a talk, please reach out to them and encourage them to +submit a proposal. Many people (especially from underrepresented +groups such as women, people of colour, non-developers, etc.) might +not consider themselves proficient enough to share their thoughts. +If you let them know that you value their knowledge and experiences, +and maybe even suggest something that you think others would like to +hear about, they may realize that they do have something worth sharing +and that we would love to hear from them. + +* Want to volunteer? +:PROPERTIES: +:CUSTOM_ID: volunteer +:END: + +If you would like to help with the conference (planning the sessions, +reviewing proposals, helping with infrastructure, making sessions more +accessible, editing video transcripts, etc.), see our [[https://emacsconf.org/2023/volunteer/][volunteer]] page. +Volunteers get early access to talks and learn lots of things along +the way. We'd really appreciate your help in making EmacsConf 2023 +the best one so far! + +* Commitment to freedom + +We remain fully committed to freedom. You'll be able to participate +in EmacsConf using [[https://www.gnu.org/philosophy/free-sw.html][free/libre software]], and we use free/libre software +to organize and run the conference. You can find some notes about our +setup and process at https://emacsconf.org/infra/. + +* COMMENT Copyright & License + +Copyright (c) 2020 Amin Bandali, Sacha Chua, David Bremner +Copyright (c) 2021 Amin Bandali, Sacha Chua, Leo Vivier, +Sebastian Crane +Copyright (c) 2022 Amin Bandali +Copyright (c) 2023 Sacha Chua + +The EmacsConf 2023 Call for Participation is part of the EmacsConf +wiki, and is dual-licensed under the terms of the Creative Commons +Attribution-ShareAlike 4.0 International Public License; and the GNU +General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later +version. + +A copy of these two licenses is available on the EmacsConf wiki, in +the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files. diff --git a/2023/draft-schedule.md b/2023/draft-schedule.md new file mode 100644 index 00000000..e7cb9977 --- /dev/null +++ b/2023/draft-schedule.md @@ -0,0 +1,60 @@ +[[!sidebar content=""]] + +This is a *DRAFT* schedule. +Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-02"></a> +# Saturday Dec 2, 2023 +[[!inline pages="internal(2023/schedule-2023-12-02)" raw="yes"]] + +<div class="schedule" data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T22:30:00+0000" data-tracks="General,Development"> +[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-02T14:00:00+0000""" endutc="""2023-12-02T14:10:00+0000""" start="""9:00""" end="""9:10""" title="""Saturday opening remarks""" url="""/2023/talks/sat-open""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-open""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""none""" startutc="""2023-12-02T14:10:00+0000""" endutc="""2023-12-02T14:20:00+0000""" start="""9:10""" end="""9:20""" title="""An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp""" url="""/2023/talks/adventure""" speakers="""Chung-hong Chan""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""adventure""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/uni/room/">BBB</a>""" startutc="""2023-12-02T14:30:00+0000""" endutc="""2023-12-02T14:50:00+0000""" start="""9:30""" end="""9:50""" title="""Authoring and presenting university courses with Emacs and a full libre software stack""" url="""/2023/talks/uni""" speakers="""James Howell""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""uni""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a>""" startutc="""2023-12-02T15:00:00+0000""" endutc="""2023-12-02T15:10:00+0000""" start="""10:00""" end="""10:10""" title="""MatplotLLM, iterative natural language data visualization in org-babel""" url="""/2023/talks/matplotllm""" speakers="""Abhinav Tushar""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""matplotllm""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/teaching/room/">BBB</a>""" startutc="""2023-12-02T15:05:00+0000""" endutc="""2023-12-02T15:25:00+0000""" start="""10:05""" end="""10:25""" title="""Teaching computer and data science with literate programming tools""" url="""/2023/talks/teaching""" speakers="""Marcus Birkenkrahe""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""teaching""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/voice/room/">BBB</a>""" startutc="""2023-12-02T15:20:00+0000""" endutc="""2023-12-02T15:40:00+0000""" start="""10:20""" end="""10:40""" title="""Improving access to AI-assisted literate programming with voice control""" url="""/2023/talks/voice""" speakers="""Blaine Mooers""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""voice""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/table/room/">BBB</a>""" startutc="""2023-12-02T15:40:00+0000""" endutc="""2023-12-02T15:50:00+0000""" start="""10:40""" end="""10:50""" title="""Who needs Excel? Managing your students qualifications with org-table""" url="""/2023/talks/table""" speakers="""Daniel Molina""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""table""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/llm/room/">BBB</a>""" startutc="""2023-12-02T15:55:00+0000""" endutc="""2023-12-02T16:15:00+0000""" start="""10:55""" end="""11:15""" title="""LLM clients in Emacs, functionality and standardization""" url="""/2023/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""llm""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/taming/room/">BBB</a>""" startutc="""2023-12-02T16:05:00+0000""" endutc="""2023-12-02T16:15:00+0000""" start="""11:05""" end="""11:15""" title="""Taming things with Org Mode""" url="""/2023/talks/taming""" speakers="""Gergely Nagy (algernon)""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""taming""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/one/room/">BBB</a>""" startutc="""2023-12-02T16:30:00+0000""" endutc="""2023-12-02T16:50:00+0000""" start="""11:30""" end="""11:50""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/writing/room/">BBB</a>""" startutc="""2023-12-02T18:00:00+0000""" endutc="""2023-12-02T18:10:00+0000""" start="""1:00""" end="""1:10""" title="""Emacs turbo-charges my writing""" url="""/2023/talks/writing""" speakers="""Jeremy Friesen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""writing""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/overlay/room/">BBB</a>""" startutc="""2023-12-02T18:00:00+0000""" endutc="""2023-12-02T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""Improving compiler diagnostics with Overlays""" url="""/2023/talks/overlay""" speakers="""Jeff Trull""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""overlay""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/nabokov/room/">BBB</a>""" startutc="""2023-12-02T18:25:00+0000""" endutc="""2023-12-02T18:35:00+0000""" start="""1:25""" end="""1:35""" title="""Why Nabokov would use Org-Mode if he were writing today""" url="""/2023/talks/nabokov""" speakers="""Edmund Jorgensen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""nabokov""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/eval/room/">BBB</a>""" startutc="""2023-12-02T18:35:00+0000""" endutc="""2023-12-02T18:45:00+0000""" start="""1:35""" end="""1:45""" title="""Editor Integrated REPL Driven Development for all languages""" url="""/2023/talks/eval""" speakers="""Musa Al-hassy""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""eval""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2023-12-02T18:50:00+0000""" endutc="""2023-12-02T19:10:00+0000""" start="""1:50""" end="""2:10""" title="""Collaborative data processing and documenting using org-babel""" url="""/2023/talks/collab""" speakers="""Jonathan Hartman, Lukas C. Bossert""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""collab""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: edrx</a>""" startutc="""2023-12-02T19:00:00+0000""" endutc="""2023-12-02T19:40:00+0000""" start="""2:00""" end="""2:40""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/solo/room/">BBB</a>""" startutc="""2023-12-02T19:20:00+0000""" endutc="""2023-12-02T19:40:00+0000""" start="""2:20""" end="""2:40""" title="""How I play TTRPGs in Emacs""" url="""/2023/talks/solo""" speakers="""Howard Abrams""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""solo""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/emacsconf/room/">BBB</a>""" startutc="""2023-12-02T19:50:00+0000""" endutc="""2023-12-02T20:10:00+0000""" start="""2:50""" end="""3:10""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: lispmacs</a>""" startutc="""2023-12-02T19:55:00+0000""" endutc="""2023-12-02T20:15:00+0000""" start="""2:55""" end="""3:15""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a>""" startutc="""2023-12-02T20:25:00+0000""" endutc="""2023-12-02T20:35:00+0000""" start="""3:25""" end="""3:35""" title="""(Un)entangling projects and repos""" url="""/2023/talks/unentangling""" speakers="""Alexey Bochkarev""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""unentangling""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/devel/room/">BBB</a>""" startutc="""2023-12-02T20:45:00+0000""" endutc="""2023-12-02T20:55:00+0000""" start="""3:45""" end="""3:55""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/core/room/">BBB</a>""" startutc="""2023-12-02T21:05:00+0000""" endutc="""2023-12-02T21:45:00+0000""" start="""4:05""" end="""4:45""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-02T22:00:00+0000""" endutc="""2023-12-02T22:10:00+0000""" start="""5:00""" end="""5:10""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note=""""""]]</div> + +Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-03"></a> +# Sunday Dec 3, 2023 +[[!inline pages="internal(2023/schedule-2023-12-03)" raw="yes"]] + +<div class="schedule" data-start="2023-12-03T14:00:00+0000" data-end="2023-12-03T22:30:00+0000" data-tracks="General,Development"> +[[!template id=sched time="""5""" q-and-a="""""" startutc="""2023-12-03T14:00:00+0000""" endutc="""2023-12-03T14:05:00+0000""" start="""9:00""" end="""9:05""" title="""Sunday opening remarks""" url="""/2023/talks/sun-open""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-open""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/hyperamp/room/">BBB</a>""" startutc="""2023-12-03T14:05:00+0000""" endutc="""2023-12-03T14:25:00+0000""" start="""9:05""" end="""9:25""" title="""Top 10 ways Hyperbole amps up Emacs""" url="""/2023/talks/hyperamp""" speakers="""Robert Weiner""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hyperamp""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf</a>""" startutc="""2023-12-03T14:40:00+0000""" endutc="""2023-12-03T15:00:00+0000""" start="""9:40""" end="""10:00""" title="""Using Koutline for stream of thought journaling""" url="""/2023/talks/koutline""" speakers="""Matthew Jorgensen (PlasmaStrike)""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""koutline""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/scheme/room/">BBB</a>""" startutc="""2023-12-03T15:00:00+0000""" endutc="""2023-12-03T15:20:00+0000""" start="""10:00""" end="""10:20""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/parallel/room/">BBB</a>""" startutc="""2023-12-03T15:10:00+0000""" endutc="""2023-12-03T15:20:00+0000""" start="""10:10""" end="""10:20""" title="""Parallel Text Replacement: Does P = NP?""" url="""/2023/talks/parallel""" speakers="""Lovro, Valentino Picotti""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""parallel""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/eat/room/">BBB</a>""" startutc="""2023-12-03T15:35:00+0000""" endutc="""2023-12-03T15:45:00+0000""" start="""10:35""" end="""10:45""" title="""Eat and Eat powered Eshell, fast featureful terminal inside Emacs""" url="""/2023/talks/eat""" speakers="""Akib Azmain Turja""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""eat""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/test/room/">BBB</a>""" startutc="""2023-12-03T15:35:00+0000""" endutc="""2023-12-03T15:55:00+0000""" start="""10:35""" end="""10:55""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/poltys/room/">BBB</a>""" startutc="""2023-12-03T16:00:00+0000""" endutc="""2023-12-03T16:20:00+0000""" start="""11:00""" end="""11:20""" title="""The browser in a buffer""" url="""/2023/talks/poltys""" speakers="""Michael Bauer""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""poltys""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/world/room/">BBB</a>""" startutc="""2023-12-03T16:10:00+0000""" endutc="""2023-12-03T16:30:00+0000""" start="""11:10""" end="""11:30""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf">#emacsconf, speaker nick: wasamasa</a>""" startutc="""2023-12-03T16:35:00+0000""" endutc="""2023-12-03T16:55:00+0000""" start="""11:35""" end="""11:55""" title="""Speedcubing in Emacs""" url="""/2023/talks/cubing""" speakers="""Vasilij "wasamasa" Schneidermann""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""cubing""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/flat/room/">BBB</a>""" startutc="""2023-12-03T16:45:00+0000""" endutc="""2023-12-03T16:55:00+0000""" start="""11:45""" end="""11:55""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/emms/room/">BBB</a>""" startutc="""2023-12-03T18:00:00+0000""" endutc="""2023-12-03T18:40:00+0000""" start="""1:00""" end="""1:40""" title="""Emacs MultiMedia System (EMMS)""" url="""/2023/talks/emms""" speakers="""Yoni Rabkin""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""emms""" note="""captioned"""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/gc/room/">BBB</a>""" startutc="""2023-12-03T18:00:00+0000""" endutc="""2023-12-03T18:20:00+0000""" start="""1:00""" end="""1:20""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/hyperdrive/room/">BBB</a>""" startutc="""2023-12-03T18:35:00+0000""" endutc="""2023-12-03T19:15:00+0000""" start="""1:35""" end="""2:15""" title="""hyperdrive.el: Peer-to-peer filesystem in Emacs""" url="""/2023/talks/hyperdrive""" speakers="""Joseph Turner""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""hyperdrive""" note=""""""]] +[[!template id=sched time="""30""" q-and-a="""none""" startutc="""2023-12-03T18:55:00+0000""" endutc="""2023-12-03T19:25:00+0000""" start="""1:55""" end="""2:25""" title="""Programming at 200 wpm""" url="""/2023/talks/steno""" speakers="""Daniel Alejandro Tapia""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""steno""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/lspocaml/room/">BBB</a>""" startutc="""2023-12-03T19:30:00+0000""" endutc="""2023-12-03T19:40:00+0000""" start="""2:30""" end="""2:40""" title="""Writing a language server in OCaml for Emacs, fun, and profit""" url="""/2023/talks/lspocaml""" speakers="""Austin Theriault""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""lspocaml""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/mentor/room/">BBB</a>""" startutc="""2023-12-03T19:35:00+0000""" endutc="""2023-12-03T19:45:00+0000""" start="""2:35""" end="""2:45""" title="""Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)""" url="""/2023/talks/mentor""" speakers="""Jeremy Friesen""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""mentor""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/windows/room/">BBB</a>""" startutc="""2023-12-03T19:55:00+0000""" endutc="""2023-12-03T20:35:00+0000""" start="""2:55""" end="""3:35""" title="""Windows into Freedom""" url="""/2023/talks/windows""" speakers="""Corwin Brust""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""windows""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""<a href="https://emacsconf.org/current/hn/room/">BBB</a>""" startutc="""2023-12-03T20:00:00+0000""" endutc="""2023-12-03T20:10:00+0000""" start="""3:00""" end="""3:10""" title="""The many ways to browse Hacker News from Emacs""" url="""/2023/talks/hn""" speakers="""Mickael Kerjean""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hn""" note=""""""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://emacsconf.org/current/web/room/">BBB</a>""" startutc="""2023-12-03T20:25:00+0000""" endutc="""2023-12-03T21:05:00+0000""" start="""3:25""" end="""4:05""" title="""Emacs saves the Web""" url="""/2023/talks/web""" speakers="""Yuchen Pei""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""web""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""none""" startutc="""2023-12-03T20:50:00+0000""" endutc="""2023-12-03T21:10:00+0000""" start="""3:50""" end="""4:10""" title="""The Emacsen family, the design of an Emacs and the importance of Lisp""" url="""/2023/talks/emacsen""" speakers="""Fermin""" track="""Development""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsen""" note=""""""]] +[[!template id=sched time="""20""" q-and-a="""<a href="https://emacsconf.org/current/sharing/room/">BBB</a>""" startutc="""2023-12-03T21:20:00+0000""" endutc="""2023-12-03T21:40:00+0000""" start="""4:20""" end="""4:40""" title="""Sharing Emacs is Caring Emacs: Emacs education and why I embraced video""" url="""/2023/talks/sharing""" speakers="""Jacob Boxerman""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sharing""" note=""""""]] +[[!template id=sched time="""10""" q-and-a="""""" startutc="""2023-12-03T21:55:00+0000""" endutc="""2023-12-03T22:05:00+0000""" start="""4:55""" end="""5:05""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" track="""General""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note=""""""]]</div>
\ No newline at end of file diff --git a/2023/ideas.md b/2023/ideas.md new file mode 100644 index 00000000..1d43e7ef --- /dev/null +++ b/2023/ideas.md @@ -0,0 +1,31 @@ +[[!meta title="Ideas"]] +[[!meta copyright="Copyright © 2020, 2021, 2022 Amin Bandali; 2023 Sacha Chua"]] + +This is a place to collect ideas for talks and other sessions for +EmacsConf 2023. :-) + +## Ideas + +- **User stories:** Why and how did you get into Emacs? What was helpful? What was challenging? How did you get deeper into it? + - These types of talks help people connect with other people and see different user journeys. +- **Workflows:** How do you use different packages together? What kind of + glue makes things easier for you? Videos demonstrating workflows are + helpful because it's sometimes hard to read source code or package + documentation and imagine how things work. +- **Emacs configuration techniques, Emacs Lisp** +- **Coding:** Lots of people use Emacs to work with code. Do you have a good setup? Please share! +- **Academia:** Students, teachers, and researchers use Emacs too. +- **Other kinds of work** +- **Personal information management, personal finance, productivity** +- **Personal life, unexpected uses of Emacs** +- **Fun, games, multimedia** +- **Cool ideas from other editors and tools** + +You can also check out past EmacsConf programs to see what kinds of things people have shared before: + +- [[2022|/2022/talks]] +- [[2021|/2021/schedule]] +- [[2020|/2020/schedule]] +- [[2019|/2019/schedule]] +- [[2015|/2015/schedule]] +- [[2013|/2013/#program]] diff --git a/2023/info/adventure-after.md b/2023/info/adventure-after.md new file mode 100644 index 00000000..4a5d4f30 --- /dev/null +++ b/2023/info/adventure-after.md @@ -0,0 +1,129 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="adventure-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]] + +[[!template text="""Hi, I'm going to give you a little demo""" start="00:00:00.000" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""of a project that I'm working on""" start="00:00:04.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""which is called the `orgdungeon`.""" start="00:00:06.440" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""As you can see here, they are just a bunch of Org files""" start="00:00:09.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and also an Emacs Lisp file.""" start="00:00:16.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""What I found is that if you have these Org files""" start="00:00:20.560" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then you have an Emacs Lisp file as a source""" start="00:00:26.800" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""to control how to progress from one file to another,""" start="00:00:30.920" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""it will give you a game-like experience.""" start="00:00:36.880" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""It's like the old game Myst.""" start="00:00:40.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""It was developed with the technology""" start="00:00:43.480" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""HyperCard for the Macintosh.""" start="00:00:46.120" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Basically, it uses a similar technology,""" start="00:00:48.760" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""so a similar interface to the developer""" start="00:00:53.200" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""who was using that technology to develop the game.""" start="00:00:57.560" video="mainVideo-adventure" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]] + +[[!template text="""Concretely, I'm going to give you""" start="00:01:01.200" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""a demo of how the game looks like.""" start="00:01:03.800" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""So, this is a very vanilla Emacs setup.""" start="00:01:08.880" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then I open up the first Org file.""" start="00:01:14.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""The Org file is just a bunch of text,""" start="00:01:18.640" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""but it tells you a story.""" start="00:01:22.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""So you wake up somewhere,""" start="00:01:25.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then there is a dog-like robot called Emi around you.""" start="00:01:27.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""And then it tells you what you should do.""" start="00:01:32.600" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Following the instructions...""" start="00:01:37.760" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""For example, here it tells you""" start="00:01:40.800" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""down there is one thing called "code block,"""" start="00:01:42.720" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then you can evaluate it by pressing `C-c C-c`.""" start="00:01:46.240" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then we can just go there""" start="00:01:51.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then just evaluate the code block.""" start="00:01:53.640" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""So technically it just runs the Emacs Lisp file,""" start="00:01:55.240" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""because you can see here, if you load Emacs Lisp...""" start="00:02:00.240" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""It just evaluates that Emacs Lisp file.""" start="00:02:05.000" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""I can just say `C-c C-c`.""" start="00:02:07.160" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then for this one, I just say yes,""" start="00:02:09.800" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then it will jump to another file.""" start="00:02:12.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""But in the game, I call it the plane.""" start="00:02:16.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""So it jumps to another plane.""" start="00:02:18.760" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Yeah, so...""" start="00:02:21.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""In the other one, it's just saying that""" start="00:02:24.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""there is a function called `emi-escape-10`.""" start="00:02:26.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Assuming that you don't have any experience""" start="00:02:29.880" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""how to use Emacs,""" start="00:02:33.480" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""so you have no idea how to do that,""" start="00:02:34.760" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""but down there, it's saying that""" start="00:02:38.760" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""there is a key combination called `C-h f`,""" start="00:02:41.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and it will bring up the help system.""" start="00:02:44.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then you can read the help file of `emi-escape-10`.""" start="00:02:48.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""So you can just do that. For example, `C-h f`""" start="00:02:52.560" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then `describe-function` `emi-escape-10` here.""" start="00:02:55.740" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""It will show you the help file.""" start="00:03:03.000" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then it's just saying that you can press `M-x`,""" start="00:03:06.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and Meta usually mapped to Alt,""" start="00:03:10.920" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then yeah.""" start="00:03:13.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then you can just close this help file using `C-x 1`.""" start="00:03:15.080" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""I'm just going to do that. And then yeah...""" start="00:03:18.720" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""I'm just try that. `M-x` and then `emi-escape-10`.""" start="00:03:21.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""All right.""" start="00:03:31.480" video="mainVideo-adventure" id="subtitle"]] + +[[!template new="1" text="""emi-escape-12""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]] + +[[!template text="""So I will jump to another file.""" start="00:03:33.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Or in the game, you jump to another plane.""" start="00:03:36.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""And now you know that""" start="00:03:39.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""there is a function called `emi-escape-12`.""" start="00:03:40.339" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""And yeah, you can just do that `emi`,""" start="00:03:44.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""because you learned it previously, right.""" start="00:03:47.639" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""`emi-escape-12`.""" start="00:03:50.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""But this time, it asks you for a password,""" start="00:03:52.080" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""which you probably don't know, right?""" start="00:03:55.120" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""If you just type in anything,""" start="00:03:57.800" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""it will just say incorrect password.""" start="00:03:59.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""But yeah, it's part of the learning experience""" start="00:04:02.720" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""because previously you learned""" start="00:04:06.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""that you should use the help file,""" start="00:04:07.280" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""help system to read the help file of a function,""" start="00:04:10.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""so you can just use the help file""" start="00:04:16.200" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""to look for the help of `emi-escape-12`.""" start="00:04:18.320" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Then, yeah, the help file will say that""" start="00:04:25.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""you should enter a password,""" start="00:04:29.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and the password is `emi`.""" start="00:04:31.240" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Right. So you can just do that.""" start="00:04:34.160" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Write `emi-escape-12`,""" start="00:04:36.440" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then now you know the password is `emi`. Right.""" start="00:04:42.240" video="mainVideo-adventure" id="subtitle"]] + +[[!template new="1" text="""The rest of the game""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]] + +[[!template text="""So you can progress along these different files,""" start="00:04:47.040" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and then if you...""" start="00:04:51.840" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Okay, it's like a game,""" start="00:04:53.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""but at the same time, it also teaches you""" start="00:04:54.640" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""something about how Emacs works.""" start="00:04:57.280" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""For example, like the previous one,""" start="00:05:01.680" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""you know how to use the help file, for example,""" start="00:05:04.600" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""but in the later part, you will learn how to""" start="00:05:07.280" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""evaluate some Emacs Lisp code""" start="00:05:11.520" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and also how to write some Emacs Lisp code""" start="00:05:14.280" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""as well, and then you will learn""" start="00:05:17.160" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""the difference between interactive commands""" start="00:05:19.560" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""and also just ordinary functions, for example.""" start="00:05:23.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Now, I just created a few Org files,""" start="00:05:27.240" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""but I'm actively adding more Org files""" start="00:05:31.400" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""so that we can have a complete kind of""" start="00:05:36.440" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""educational experience.""" start="00:05:39.600" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""If you want to follow along [with] this project,""" start="00:05:42.560" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""you can just go to my Github repository.""" start="00:05:45.640" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""I hope you enjoyed this little demo.""" start="00:05:51.360" video="mainVideo-adventure" id="subtitle"]] +[[!template text="""Thank you.""" start="00:05:56.540" video="mainVideo-adventure" id="subtitle"]] + + + +Captioner: sachac + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20adventure%3A%20An%20Org-Mode%20based%20text%20adventure%20game%20for%20learning%20the%20basics%20of%20Emacs%2C%20inside%20Emacs%2C%20written%20in%20Emacs%20Lisp) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/adventure-before.md b/2023/info/adventure-before.md new file mode 100644 index 00000000..c774f5ff --- /dev/null +++ b/2023/info/adventure-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 6-min talk; Q&A: Etherpad +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="adventure-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/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" default />"""<track kind="chapters" label="Chapters" src="/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" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="adventure-mainVideo" data=""" +00:00.000 Introduction +01:01.200 Demo +03:33.360 emi-escape-12 +04:47.040 The rest of the game + +"""]]<div></div>Duration: 05:58 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/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">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/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">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/2oqbPJB8Wm3QSo4HCKAyVn">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/adventure-nav.md b/2023/info/adventure-nav.md new file mode 100644 index 00000000..95382fff --- /dev/null +++ b/2023/info/adventure-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Next by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/collab-after.md b/2023/info/collab-after.md new file mode 100644 index 00000000..de166231 --- /dev/null +++ b/2023/info/collab-after.md @@ -0,0 +1,423 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="collab-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""[Lukas]: Welcome to our presentation,""" start="00:00:00.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Collaborative Data Processing""" start="00:00:01.875" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and Documenting using org-babel.""" start="00:00:03.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""My name is Lukas Bossert, and I'm""" start="00:00:06.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""from the RWTH Aachen University""" start="00:00:07.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""in the city of Aachen, Germany.""" start="00:00:09.741" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: And my name is Jonathan Hartmann.""" start="00:00:12.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm also from the IT Center here at RWTH Aachen.""" start="00:00:14.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Great.""" start="00:00:18.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And we will show you today how you""" start="00:00:19.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""can use Org Mode for data processing.""" start="00:00:21.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So you see a little workflow what we are going to do.""" start="00:00:25.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""First, we will give you a slight introduction to Org Mode.""" start="00:00:28.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Then we will dive into the part of data preparing.""" start="00:00:31.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""First, you're going to query the data using the language SPARQL.""" start="00:00:34.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Then we're going to clean it using a different language.""" start="00:00:38.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And in the main part of our presentation,""" start="00:00:41.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we're going to do the data processing, first aggregating""" start="00:00:44.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""using Python, later on counting items using Org,""" start="00:00:48.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and even visualizing it using R. At the end,""" start="00:00:52.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we're going to show you how to preserve""" start="00:00:56.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""the data and the document and its documentation,""" start="00:00:58.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""first doing in plain exporting, then adding some metadata,""" start="00:01:01.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and showing you two different ways, first a manual export,""" start="00:01:06.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and also then a batch-processed export.""" start="00:01:09.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""All right.""" start="00:01:13.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let's dive in to that.""" start="00:01:14.240" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Org Mode""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""Jonathan, can you give us an introduction about Org Mode?""" start="00:01:16.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Of course.""" start="00:01:19.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So in case anyone isn't familiar with it,""" start="00:01:20.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Org Mode, in the words of Carsten Dominik,""" start="00:01:23.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is back to the future for plain text.""" start="00:01:25.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is just a module available for Emacs,""" start="00:01:28.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""plain-text base.""" start="00:01:31.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's been around since 2003, which""" start="00:01:32.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""makes it about 20 years old.""" start="00:01:34.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And it's extensible and fully customizable.""" start="00:01:36.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And especially, it's very convenient, very good""" start="00:01:40.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""for scientific text production and organization.""" start="00:01:44.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So for example, you can do project management, agenda,""" start="00:01:46.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""diary, journaling, personal knowledge management,""" start="00:01:49.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""presentation.""" start="00:01:52.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Even this is written in Org Mode.""" start="00:01:53.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's an Org Mode presentation.""" start="00:01:55.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can do single source publishing,""" start="00:01:57.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which we will do later on, and also""" start="00:01:59.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""literate programming, which is the core of our talk.""" start="00:02:01.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""OK.""" start="00:02:06.480" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: So let me stop this presentation here.""" start="00:02:07.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So what you see here is the plain text underneath it.""" start="00:02:10.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is Org Mode.""" start="00:02:14.720" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Working together""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""And Jonathan, since we kind of already""" start="00:02:18.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""did the introduction together, should we""" start="00:02:21.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""also do the working part together?""" start="00:02:26.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Of course.""" start="00:02:28.761" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So you see on the screen there on the right,""" start="00:02:29.701" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that's my screen in Emacs.""" start="00:02:33.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And Lukas, why don't you host a session using CRDT,""" start="00:02:35.061" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and I'll connect to your buffer.""" start="00:02:39.521" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: OK. Great.""" start="00:02:41.201" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I do that.""" start="00:02:42.561" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So what I do, I'm using Doom Emacs.""" start="00:02:43.281" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And I can use the `SPC` and then the `l`""" start="00:02:46.181" video="mainVideo-collab" id="subtitle"]] +[[!template text="""for the live share/collab part.""" start="00:02:49.308" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I can use the `s` for share current buffer.""" start="00:02:52.141" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So when I do this, I'm getting asked for some settings.""" start="00:02:58.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm going with the default settings here.""" start="00:03:01.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So default port, no password, and my display name.""" start="00:03:04.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And now Emacs is connecting.""" start="00:03:08.341" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And once it's connected, which just takes a couple of seconds,""" start="00:03:11.941" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I can get the URL.""" start="00:03:15.180" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm going back to this menu and using `y`""" start="00:03:17.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""for copying the URL of the current session.""" start="00:03:21.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And this is the URL I'm going to send over to you, Jonathan,""" start="00:03:24.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""to pick that up.""" start="00:03:27.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Right.""" start="00:03:29.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""OK.""" start="00:03:29.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And now on my screen, I'm going to do a `SPC l c` for connect.""" start="00:03:30.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And I'm going to paste the URL""" start="00:03:37.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that Lukas just sent me in here.""" start="00:03:38.741" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Default port, no password.""" start="00:03:40.980" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And we're connecting now.""" start="00:03:43.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this takes a second just to get us synced up.""" start="00:03:45.700" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we can work on the same document at the same time.""" start="00:03:51.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We can follow each other's cursors around.""" start="00:03:54.161" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We can have multiple buffers open and work on them""" start="00:03:56.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""at the same time.""" start="00:03:58.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And so here you see that we are both in the same document.""" start="00:04:01.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can see my cursor popping around.""" start="00:04:04.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And you can see we're both editing the same item.""" start="00:04:09.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Great.""" start="00:04:13.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: So we also see who else is currently in our buffer""" start="00:04:14.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""with the user overview.""" start="00:04:18.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So let me just delete that window.""" start="00:04:20.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And that's going to work in our main one.""" start="00:04:23.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we said first part is about data retrieval.""" start="00:04:26.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we should give it a headline.""" start="00:04:29.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We said prepare stage.""" start="00:04:37.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So what are we going to do first, Jonathan?""" start="00:04:39.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: So what we're going to do,""" start="00:04:42.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""what this whole document is based upon,""" start="00:04:43.941" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is we're going to pull data from Wikidata using a SPARQL query.""" start="00:04:45.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""The data we're going to pull is related to the NFDIs,""" start="00:04:50.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which here in Germany is the National Forschungsdaten""" start="00:04:53.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Infrastructure, which is a sort of collection of universities""" start="00:04:55.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that work together on various research projects.""" start="00:05:00.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And this is emblematic of the kind of data""" start="00:05:03.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we would be interested in working with here.""" start="00:05:05.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm going to paste a--forgive the pre-written code--""" start="00:05:09.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm going to paste some text in here.""" start="00:05:13.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: And while you are talking, I just""" start="00:05:20.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""keep on documenting what we do""" start="00:05:21.408" video="mainVideo-collab" id="subtitle"]] +[[!template text="""so we can split the work.""" start="00:05:23.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: In here, after a minor technical upset,""" start="00:05:27.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is the raw dataset cell.""" start="00:05:29.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And it's going to use SPARQL,""" start="00:05:32.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is how we have the syntax highlighting""" start="00:05:34.741" video="mainVideo-collab" id="subtitle"]] +[[!template text="""in our code here.""" start="00:05:37.175" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's going to go to the URL endpoint""" start="00:05:37.941" video="mainVideo-collab" id="subtitle"]] +[[!template text="""query.wikidata.org/sparql ,""" start="00:05:40.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and it's going to return the data as a text CSV,""" start="00:05:43.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and it's going to cache that data""" start="00:05:46.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""so that we don't constantly hammer the API every time""" start="00:05:49.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we run this notebook.""" start="00:05:51.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm going to run that there.""" start="00:05:54.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can see down at the bottom of my screen,""" start="00:05:57.361" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we're contacting the host query.wikidata.org .""" start="00:05:58.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: And there's the result.""" start="00:06:05.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Yeah, except I think that for our purposes here,""" start="00:06:07.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we're just going to limit this to 50 results.""" start="00:06:11.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Oh, yeah.""" start="00:06:15.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Just so it's a little easier for us to manage.""" start="00:06:16.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm going to run that again.""" start="00:06:18.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""There we go.""" start="00:06:20.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""That looks a little better.""" start="00:06:21.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: I think that's fine.""" start="00:06:22.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""50 items is fine.""" start="00:06:23.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So what do we see here, Jonathan?""" start="00:06:25.360" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Data cleaning""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""[Jonathan]: Right.""" start="00:06:27.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So the first thing we see when we look at this""" start="00:06:28.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is a couple of Q codes at the top,""" start="00:06:31.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which are an artifact of Wikidata.""" start="00:06:33.308" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So these are pages which don't have""" start="00:06:36.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""the label for whichever institution they happen to be.""" start="00:06:39.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""For our purposes here, we're just going to exclude them.""" start="00:06:42.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We could just go on Wikidata and edit them ourselves.""" start="00:06:45.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But for now, it's a little more interesting""" start="00:06:48.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""if we go and remove them.""" start="00:06:50.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm going to create a new cell.""" start="00:06:52.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Lukas, if you don't mind starting one for data cleaning.""" start="00:06:55.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Oh, yeah.""" start="00:06:58.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Good point.""" start="00:06:58.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Yeah, data cleaning.""" start="00:06:59.480" video="mainVideo-collab" id="subtitle"]] +[[!template text="""OK.""" start="00:07:02.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""How do you want to do that, Jonathan?""" start="00:07:03.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: I'm going to use a shell command.""" start="00:07:05.500" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So let's see.""" start="00:07:09.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""There we go.""" start="00:07:11.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And so you can see, here is another cell,""" start="00:07:13.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that the cell is now using a shell,""" start="00:07:15.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and that we have this thing `:var input=raw-dataset`,""" start="00:07:20.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is the name of the cell above""" start="00:07:23.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""where we got our data from Wikidata.""" start="00:07:25.841" video="mainVideo-collab" id="subtitle"]] +[[!template text="""This is going to run just a simple shell command.""" start="00:07:28.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's going to take the input and then run `sed` on it""" start="00:07:31.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and exclude any records which have a Q""" start="00:07:33.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""followed by one or more digits afterwards.""" start="00:07:37.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""That should remove those from our data set.""" start="00:07:41.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm going to run that.""" start="00:07:44.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""That seems to have done the trick.""" start="00:07:48.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Great, yeah.""" start="00:07:51.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""That's really good.""" start="00:07:51.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We got rid of all the Q items.""" start="00:07:52.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Very good.""" start="00:07:55.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we just have two-column table: institutions""" start="00:07:55.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and consortia.""" start="00:07:59.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Very nice.""" start="00:08:02.760" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Processing""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""So let's come to our main part, doing some processing.""" start="00:08:04.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let me give you a headline here, process the data.""" start="00:08:08.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""What do you want to do first?""" start="00:08:13.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: This is not a very complicated data set,""" start="00:08:15.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""but let's just do some simple counts first.""" start="00:08:17.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm going to start with Python,""" start="00:08:19.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and we're just going to do some aggregation with Python.""" start="00:08:22.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Again, I've got some pre-written code here.""" start="00:08:25.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can see that we've started a cell using Python.""" start="00:08:30.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""The variable `clean_df` now is equal to `clean-dataset`.""" start="00:08:35.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we're going to take that data""" start="00:08:37.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we retrieved from the SPARQL query,""" start="00:08:39.708" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we're going to run it through the cleaning cell,""" start="00:08:41.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and then we're going to import it into this cell.""" start="00:08:42.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""This is just going to do some simple Python aggregation.""" start="00:08:45.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We're going to import `pandas`,""" start="00:08:47.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is the Python data science library,""" start="00:08:49.008" video="mainVideo-collab" id="subtitle"]] +[[!template text="""create a data frame out of our input,""" start="00:08:51.308" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and then aggregate it, grouping on `wLabel`,""" start="00:08:54.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and getting a count from that and returning it.""" start="00:08:57.480" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So if we execute that cell...""" start="00:08:59.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Nice, we get institutions and a count.""" start="00:09:05.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But what about not ordering it by the alphabet,""" start="00:09:08.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""but more like ordering by counts?""" start="00:09:14.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Sure.""" start="00:09:17.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So let's do this... `sort_values()`, I think, as the Python.""" start="00:09:18.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""How does that look?""" start="00:09:22.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Better, but I would like to""" start="00:09:24.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""have the highest number first""" start="00:09:27.641" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and then ascending.""" start="00:09:29.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Well, not ascending, descending.""" start="00:09:32.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Right, so we can do `ascending=False`.""" start="00:09:34.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: This is perfect, I'd say.""" start="00:09:39.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Great.""" start="00:09:42.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Very good.""" start="00:09:43.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""OK, that's nice.""" start="00:09:44.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We get a good overview here.""" start="00:09:46.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But can we also do something else,""" start="00:09:48.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""like counting how many institutions are""" start="00:09:50.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""involved in one consortium?""" start="00:09:56.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And also using this later on in the text?""" start="00:09:57.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Sure, so I'm going to put a new...""" start="00:10:00.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""If you give me another heading down here""" start="00:10:00.881" video="mainVideo-collab" id="subtitle"]] +[[!template text="""for institutions per consortium...""" start="00:10:05.041" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And here we're going to use awk code just to spice things up""" start="00:10:12.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and add yet another language in here.""" start="00:10:16.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So you can see this is awk.""" start="00:10:18.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We're using standard in instead of defining a variable.""" start="00:10:22.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But the really interesting thing about this cell""" start="00:10:26.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is that we have this `:var consortium="NFDI4Memory"`.""" start="00:10:28.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And what this code is doing is""" start="00:10:33.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""it's counting any time it sees""" start="00:10:35.641" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that particular consortium name""" start="00:10:38.041" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and keeping track of that.""" start="00:10:40.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So if we execute this,""" start="00:10:41.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Lukas, why don't you execute this one?""" start="00:10:43.908" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: OK, I'm going to enter it.""" start="00:10:45.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And I get a result, NFDI4Memory,""" start="00:10:49.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""because this is our default value for this variable.""" start="00:10:52.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And we get the count.""" start="00:10:58.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So it's five institutions are involved""" start="00:10:59.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""in the NFDI4memory consortium.""" start="00:11:01.641" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Great, but the very nice thing, what I think,""" start="00:11:04.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is here that we can use this code snippet within our text.""" start="00:11:07.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So, blended in seamlessly.""" start="00:11:12.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let me give you an example.""" start="00:11:14.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm writing out the text.""" start="00:11:16.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Now we know how many institutions are in...""" start="00:11:18.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Give me an example.""" start="00:11:27.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I would like to know how many institutions are""" start="00:11:29.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""involved in NFDI4Objects, which is a consortium.""" start="00:11:31.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm writing `call_` and using""" start="00:11:35.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""the name of this snippet here, of this cell,""" start="00:11:39.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is `inst-count(`,""" start="00:11:42.608" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and writing my value, `NFDI4Objects`.""" start="00:11:46.608" video="mainVideo-collab" id="subtitle"]] +[[!template text="""As soon as I evaluate this using `C-c C-c`,""" start="00:11:51.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I get the result back here.""" start="00:11:58.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I can do this even for more.""" start="00:12:00.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Or in writing, `call_inst-count`, go with `NFDI4Earth`,""" start="00:12:05.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is another consortium.""" start="00:12:14.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""`C-c C-c`, it's three institutions.""" start="00:12:16.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""This can be used throughout your text,""" start="00:12:20.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and as soon as the data set changes from in the beginning,""" start="00:12:23.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""maybe different results requiring Wikidata,""" start="00:12:26.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""this also will be updated once it's exported.""" start="00:12:30.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Very nice, Jonathan.""" start="00:12:35.080" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Visualization""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""But I think we did a lot of analysis""" start="00:12:36.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""on text and counting things.""" start="00:12:38.975" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Can we also do something more visual?""" start="00:12:41.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Show me something.""" start="00:12:43.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Sure.""" start="00:12:45.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So what we can do with this, because we just""" start="00:12:45.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""have two columns here that are sort of related,""" start="00:12:48.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we can build a little network plot out of it.""" start="00:12:51.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So let's make a network visualization.""" start="00:12:53.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We're going to use the `igraph` library from R""" start="00:12:57.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and just plot the edges that we see here.""" start="00:12:59.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""There we go.""" start="00:13:02.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""There's my little heading and space.""" start="00:13:04.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Here is our code.""" start="00:13:11.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Again, just to be fancy and keep using""" start="00:13:13.480" video="mainVideo-collab" id="subtitle"]] +[[!template text="""different languages in here, we set a variable called""" start="00:13:16.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""`NFDI_edges` equal to `clean-dataset`.""" start="00:13:19.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this, again, is sort of cascading""" start="00:13:21.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""through the original data""" start="00:13:23.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we pulled from the Wikidata endpoint,""" start="00:13:25.741" video="mainVideo-collab" id="subtitle"]] +[[!template text="""cleaning that data, and now it's being inserted""" start="00:13:28.808" video="mainVideo-collab" id="subtitle"]] +[[!template text="""into this cell as well.""" start="00:13:30.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But you see the difference here.""" start="00:13:32.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Instead of exporting a table, what we're saying""" start="00:13:34.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is that there will be a graphics file,""" start="00:13:36.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and it will be called network-plot.png.""" start="00:13:39.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""All right.""" start="00:13:44.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And so Lukas, why don't you execute this one?""" start="00:13:45.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: There you go.""" start="00:13:47.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I can click `C-c C-c`""" start="00:13:48.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and I get a nice plot of the network below our cell.""" start="00:13:52.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is very nice indeed.""" start="00:13:59.160" video="mainVideo-collab" id="subtitle"]] + +[[!template new="1" text="""Preserve""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]] + +[[!template text="""So I think it's about time to wrap it up and to export""" start="00:14:01.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and to preserve the data and the documentation""" start="00:14:05.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we have in our very last step, calling preserve.""" start="00:14:07.960" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I would like to do it in two steps.""" start="00:14:13.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""First, maybe manually exporting it,""" start="00:14:16.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""but then also doing it in a batch process.""" start="00:14:18.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Giving you some insights how to do that manual export.""" start="00:14:22.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""For example, you can do a LaTeX export.""" start="00:14:27.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let me write down the key combination to do that here.""" start="00:14:30.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So you press `SPC m e l o`.""" start="00:14:34.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let me show you how this is done.""" start="00:14:44.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm pressing `SPC`.""" start="00:14:49.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm pressing `m`, which is my local leader.""" start="00:14:51.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I'm pressing `e`, which is now the `org-export-dispatch`.""" start="00:14:55.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And now I have different options I can choose from.""" start="00:15:01.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I want to do a LaTeX export because I want to get in PDF.""" start="00:15:03.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm pressing `l`.""" start="00:15:07.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Now I've got different options available.""" start="00:15:08.675" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So I'm pressing `o` for a PDF file and open that.""" start="00:15:11.480" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Let's see now the code.""" start="00:15:17.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Now this is exporting document.""" start="00:15:21.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And what we have here is PDF,""" start="00:15:25.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which contains our workflow in the beginning,""" start="00:15:29.675" video="mainVideo-collab" id="subtitle"]] +[[!template text="""our bullet points we have here,""" start="00:15:31.975" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and also the code snippet""" start="00:15:35.708" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we use for querying the data.""" start="00:15:37.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And we have the result below that.""" start="00:15:41.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is our table with all the data sets.""" start="00:15:43.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But as you can see, this is running out of the page.""" start="00:15:47.000" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is not very nice using the default settings.""" start="00:15:51.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""But everything is in this PDF.""" start="00:15:55.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""I guess we can now show you a way""" start="00:16:00.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""how to improve this result.""" start="00:16:02.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Right.""" start="00:16:06.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we have, of course, a version of this""" start="00:16:07.040" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we prepared ahead of time,""" start="00:16:09.400" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which is more or less identical to the one we just made,""" start="00:16:10.775" video="mainVideo-collab" id="subtitle"]] +[[!template text="""but it has a little more text, a little more explanation,""" start="00:16:14.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""a little more documentation along with the code.""" start="00:16:17.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can see we have some metadata up at the top,""" start="00:16:20.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""the title, the authors, a bibliography,""" start="00:16:23.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and most importantly, the `custom-export.setup` file,""" start="00:16:26.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which lists specifically the sort of LaTeX commands""" start="00:16:31.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we're using and the HTML styles that we're going to use.""" start="00:16:36.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And then down at the bottom of this file,""" start="00:16:43.600" video="mainVideo-collab" id="subtitle"]] +[[!template text="""we have our automatic batch process.""" start="00:16:45.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Here is one more language we're including in here.""" start="00:16:49.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is Lisp.""" start="00:16:51.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And you can see here we are exporting to HTML, ASCII,""" start="00:16:53.440" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and PDF.""" start="00:16:57.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""The nice thing about this is that this is a document.""" start="00:16:58.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's a sort of document that we have a couple of""" start="00:17:01.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""that we can have running automatically and building.""" start="00:17:03.308" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It will export a HTML, an ASCII file, and a PDF file""" start="00:17:08.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""every time it's run based off of""" start="00:17:12.920" video="mainVideo-collab" id="subtitle"]] +[[!template text="""the most recent data available on Wikidata.""" start="00:17:14.675" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So it's self-documenting.""" start="00:17:17.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We have, of course, our data retrieval steps,""" start="00:17:19.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""our data cleaning steps, our data preparation steps,""" start="00:17:22.441" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and our preservation steps all listed at the same time.""" start="00:17:25.160" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And then you can see over on the right,""" start="00:17:28.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""there's an example of the HTML file that we get out of this.""" start="00:17:30.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We also get a very nicely formatted PDF file,""" start="00:17:34.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""which doesn't have that little issue""" start="00:17:37.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""with the overflow of the table.""" start="00:17:39.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's very nicely put together.""" start="00:17:41.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And we even have an ASCII file.""" start="00:17:43.560" video="mainVideo-collab" id="subtitle"]] +[[!template text="""And I should also point out very quickly,""" start="00:17:46.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""while you have this one up, Lukas, after the awk code,""" start="00:17:47.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""you can see the text for the number of consortia,""" start="00:17:51.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""or the number of institutions per consortia""" start="00:17:56.080" video="mainVideo-collab" id="subtitle"]] +[[!template text="""is actually printed inline.""" start="00:17:57.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: Yeah, you're very right.""" start="00:18:00.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So this is what we had as code,""" start="00:18:01.800" video="mainVideo-collab" id="subtitle"]] +[[!template text="""and now this is nicely integrated into our text.""" start="00:18:06.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So we got the consortium and number of institutions.""" start="00:18:10.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""You can't tell a difference between code and text.""" start="00:18:15.280" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: And those are automatically updated.""" start="00:18:19.200" video="mainVideo-collab" id="subtitle"]] +[[!template text="""So if another institution joins NFDI4Earth,""" start="00:18:20.720" video="mainVideo-collab" id="subtitle"]] +[[!template text="""then the next time this runs, we update the text right here.""" start="00:18:23.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It's nothing we have to worry about.""" start="00:18:26.320" video="mainVideo-collab" id="subtitle"]] +[[!template text="""We just pull it directly out of Wikidata.""" start="00:18:28.520" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Lukas]: And for the sake of completeness,""" start="00:18:31.840" video="mainVideo-collab" id="subtitle"]] +[[!template text="""this is the ASCII file.""" start="00:18:34.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""That's in the export format.""" start="00:18:37.880" video="mainVideo-collab" id="subtitle"]] +[[!template text="""It contains also everything, code and data.""" start="00:18:42.760" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Yeah, so this is what we wanted to show you,""" start="00:18:48.360" video="mainVideo-collab" id="subtitle"]] +[[!template text="""how to do some data processing,""" start="00:18:53.240" video="mainVideo-collab" id="subtitle"]] +[[!template text="""some collaborative work,""" start="00:18:56.640" video="mainVideo-collab" id="subtitle"]] +[[!template text="""documenting using org-babel.""" start="00:18:58.680" video="mainVideo-collab" id="subtitle"]] +[[!template text="""Thanks for listening.""" start="00:19:01.120" video="mainVideo-collab" id="subtitle"]] +[[!template text="""[Jonathan]: Thank you all, have a good day.""" start="00:19:05.720" video="mainVideo-collab" id="subtitle"]] + + + +Captioner: amine + +Questions or comments? Please e-mail [hartman@itc.rwth-aachen.de, bossert@itc.rwth-aachen.de](mailto:hartman@itc.rwth-aachen.de, bossert@itc.rwth-aachen.de?subject=Comment%20for%20EmacsConf%202023%20collab%3A%20Collaborative%20data%20processing%20and%20documenting%20using%20org-babel) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/collab-before.md b/2023/info/collab-before.md new file mode 100644 index 00000000..22e68600 --- /dev/null +++ b/2023/info/collab-before.md @@ -0,0 +1,21 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="collab-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="collab-mainVideo" data=""" +00:00.000 Introduction +01:16.080 Org Mode +02:18.960 Working together +06:27.840 Data cleaning +08:04.040 Processing +12:36.040 Visualization +14:01.760 Preserve + +"""]]<div></div>Duration: 19:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li><li><a href="https://toobnix.org/w/7AAwoawr5MXNSrqiHJQoak">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/collab-nav.md b/2023/info/collab-nav.md new file mode 100644 index 00000000..55c61f3f --- /dev/null +++ b/2023/info/collab-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a> +Next by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/core-after.md b/2023/info/core-after.md new file mode 100644 index 00000000..13fa508a --- /dev/null +++ b/2023/info/core-after.md @@ -0,0 +1,1565 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="core-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""All right. Hi again, everyone.""" start="00:00:02.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's been a while. Well,""" start="00:00:03.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""actually, it's been like 2 minutes tops.""" start="00:00:04.839" video="mainVideo-core" id="subtitle"]] +[[!template text="""We were just with John Wheatley,""" start="00:00:07.819" video="mainVideo-core" id="subtitle"]] +[[!template text="""and now we are with Stefan Krangas.""" start="00:00:09.099" video="mainVideo-core" id="subtitle"]] +[[!template text="""Hi. Hi. So as we said before,""" start="00:00:11.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Stefan is co-maintainer now of Is it the""" start="00:00:16.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""entire Emacs project? How do you describe""" start="00:00:20.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""this? Yeah, co-maintainer of GNU Emacs.""" start="00:00:22.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right, perfect. So you know what?""" start="00:00:27.439" video="mainVideo-core" id="subtitle"]] +[[!template text="""Because I'm sure everyone is dying to hear""" start="00:00:29.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""everything you've got to say in your""" start="00:00:32.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""presentation I'm just going to shut up now""" start="00:00:33.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""and leave the floor to you.""" start="00:00:36.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Do you need to share your screen or anything?""" start="00:00:37.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""No. Okay great well I'll just cut my webcam""" start="00:00:40.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""off I'll still be in the background so do not""" start="00:00:45.239" video="mainVideo-core" id="subtitle"]] +[[!template text="""hesitate if you've got any problem I'm still""" start="00:00:47.059" video="mainVideo-core" id="subtitle"]] +[[!template text="""around And I'll see you just beacon whenever""" start="00:00:48.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""you're done. And I'll show up with the""" start="00:00:52.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""questions. All right? Thank you,""" start="00:00:53.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""Leo. And thank you, everyone,""" start="00:00:56.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""for being here. I'm Stefan Kangas.""" start="00:00:58.739" video="mainVideo-core" id="subtitle"]] +[[!template text="""So as Leo explained, I am recently appointed""" start="00:01:02.739" video="mainVideo-core" id="subtitle"]] +[[!template text="""as a co-maintainer of GNU Emacs,""" start="00:01:06.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""which a role that I'm fulfilling currently""" start="00:01:10.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""with Eli Sretsky, who's been co-maintainer""" start="00:01:13.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""for quite some time. So I got the question to""" start="00:01:18.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""be a co-maintainer from Richard in August""" start="00:01:23.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""this year. And of course,""" start="00:01:26.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""when you get a question like that,""" start="00:01:29.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""I couldn't not say yes.""" start="00:01:31.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""So here we are. I can't tell you how excited""" start="00:01:34.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""I am to have this opportunity to address the""" start="00:01:39.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""community in this way.""" start="00:01:45.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm really humbled, of course,""" start="00:01:47.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""to be part of it, and to be able to serve the""" start="00:01:50.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""community in this capacity.""" start="00:01:55.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I've used Emacs, I think many of you might""" start="00:02:00.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""also have used Emacs for quite some time,""" start="00:02:04.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""but I'm going on 2 decades as an Emacs user.""" start="00:02:06.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""My involvement in Emacs Lisp development is,""" start="00:02:11.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, almost as long,""" start="00:02:14.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""but my core development goes back only 4,""" start="00:02:16.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""5 years. I have to also thank the EmacsConf""" start="00:02:19.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""organizers who are doing,""" start="00:02:27.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, a tremendous job and have done a""" start="00:02:29.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""tremendous job over the years in really""" start="00:02:31.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""building and strengthening what I think is""" start="00:02:34.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""this fantastic community of users and""" start="00:02:38.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""developers and people interested in Emacs.""" start="00:02:42.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""I actually had the chance to meet up with Eli""" start="00:02:46.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sretzky, as well as another Emacs hacker,""" start="00:02:50.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""Andrea Corallo, when I was at the GNU""" start="00:02:53.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""project's 40 years celebration,""" start="00:02:57.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""40 years since the GNU project was announced.""" start="00:03:00.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it was very inspiring in general to meet""" start="00:03:05.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""people. And I think EmacsConf should also,""" start="00:03:09.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, serve to inspire and sort of help""" start="00:03:12.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""bring something to the type of work that many""" start="00:03:19.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""of us are doing to improve Emacs,""" start="00:03:22.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""whether it's in package development or in""" start="00:03:24.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""core, to bring out the new and exciting ideas""" start="00:03:26.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""and get people enthusiastic about Emacs,""" start="00:03:29.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""about hacking on Emacs.""" start="00:03:34.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""This is my little attempt to contribute with""" start="00:03:38.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's say 2 things. I will first try to""" start="00:03:45.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""present how we do Emacs core development and""" start="00:03:49.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""why we've done some of the choices that we""" start="00:03:54.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""have, because We have seen at times that""" start="00:03:58.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps people aren't always clear on this or""" start="00:04:02.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""that aspect. So maybe this will be""" start="00:04:06.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""enlightening. I will also try to present some""" start="00:04:08.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""kind of vision for what Emacs could be with""" start="00:04:12.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""your help. Emacs is already very good,""" start="00:04:18.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""as we all know, but we could be even better.""" start="00:04:21.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's the reality of any type of software""" start="00:04:27.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""development. So the overall idea of this talk""" start="00:04:30.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""is to tell you, if you're an Emacs list""" start="00:04:35.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""package developer today,""" start="00:04:38.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""why you should become an Emacs core""" start="00:04:40.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""developer, and the sort of steps that you""" start="00:04:44.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""might want to take to do that,""" start="00:04:47.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""or how you can help Emacs core development.""" start="00:04:49.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Even if you're just a user and you found a""" start="00:04:52.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""bug, report it. Perhaps you have a feature""" start="00:04:54.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""request that you'd like to discuss.""" start="00:04:57.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think we need more interaction in general""" start="00:04:58.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""between Emacs core developers,""" start="00:05:02.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""typically on emacsdevil.gnu.org,""" start="00:05:05.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""the mailing list that we use to coordinate""" start="00:05:08.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""our development efforts,""" start="00:05:12.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""between Emacs devil package developers and""" start="00:05:15.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""users, Because there is so much great stuff""" start="00:05:19.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""really going on in the community.""" start="00:05:22.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I think sometimes the step to core""" start="00:05:25.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""development seems big and perhaps even a""" start="00:05:28.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit scary. So I'm hoping to be able to""" start="00:05:32.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""help bridge that gap, even if just a little""" start="00:05:35.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""bit. We need more people contributing to""" start="00:05:38.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs itself. And also a small disclaimer""" start="00:05:43.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""here, in this talk I will only be able to""" start="00:05:46.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""speak for myself, not for GNU or the Emacs""" start="00:05:49.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""project, even if it's like a little bit more""" start="00:05:53.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""official, but I will also try to give the""" start="00:05:56.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""view of the project where it makes sense to""" start="00:05:58.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""do so. Keep in mind, I'm only 1 of the""" start="00:06:01.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""maintainers, the co-maintainer together with""" start="00:06:04.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""Eli, and I can't just make decisions""" start="00:06:06.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""arbitrarily. In a sense,""" start="00:06:09.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm as a co-maintainer and trusted as a""" start="00:06:11.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""steward and trusted by,""" start="00:06:14.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""of course, the GNU project,""" start="00:06:15.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""but also by the community That we really""" start="00:06:16.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""can't just take decisions,""" start="00:06:22.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, arbitrarily. Even if it sometimes""" start="00:06:24.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps may seem so, or it may feel that way,""" start="00:06:27.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""we really have to realize that we can't just""" start="00:06:31.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""push too much of just a personal agenda to""" start="00:06:35.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""the extent that it doesn't line up with what""" start="00:06:39.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""is best for eMacs going forward,""" start="00:06:41.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""and the more overall picture of that.""" start="00:06:47.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""So there are limitations that come with the""" start="00:06:50.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""job, if you like. So 1 question I often,""" start="00:06:52.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""I actually got this week when I started a new""" start="00:07:00.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""assignment at work, and I got the question""" start="00:07:02.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""when I said I'm involved in Emacs""" start="00:07:06.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""development. And then someone asked,""" start="00:07:08.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""oh, is Emacs still developed?""" start="00:07:10.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""Isn't it done almost? And I answered to that,""" start="00:07:12.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""yes, we are still around.""" start="00:07:16.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""We're going on 40 years now as a software""" start="00:07:17.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""project. Not many projects actually can claim""" start="00:07:21.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""that type of longevity.""" start="00:07:26.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""But Emacs is among those few that can.""" start="00:07:29.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""And of course, we have had some very exciting""" start="00:07:33.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""developments in recent versions.""" start="00:07:36.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think John just gave you an update on that.""" start="00:07:38.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""But we had just some highlights out of many""" start="00:07:41.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""highlights that you could give,""" start="00:07:46.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""really, we got the TreeSetter support in""" start="00:07:48.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs 29 that we now need to sort of extend""" start="00:07:50.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""and develop. We have merged EGLOT,""" start="00:07:54.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""so we have LSP support out of the box,""" start="00:07:56.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think is a huge improvement.""" start="00:07:59.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Native compilation, of course,""" start="00:08:01.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""a big feature. I mean,""" start="00:08:02.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""that was Andrea's job,""" start="00:08:06.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""really, for performance.""" start="00:08:08.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it turns out that in many types of""" start="00:08:11.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""workloads and the types of stuff that people""" start="00:08:14.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""are doing, it often matters.""" start="00:08:15.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""And we're hoping to make that the default,""" start="00:08:18.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps already in Emacs 30.""" start="00:08:21.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""So there are things that are happening that""" start="00:08:24.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""fundamentally make Emacs better at a very""" start="00:08:26.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""core level. So, of course,""" start="00:08:32.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""why wouldn't you want to be involved in such""" start="00:08:37.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""an exciting and, I think,""" start="00:08:41.679" video="mainVideo-core" id="subtitle"]] +[[!template text="""dynamic project? How is Emacs developed?""" start="00:08:43.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Well, this is, I think,""" start="00:08:51.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps to some people,""" start="00:08:53.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""a little bit more of a threshold,""" start="00:08:54.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you like, because I think all of us know""" start="00:08:56.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""really that there is exciting and cool stuff""" start="00:08:59.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""that is going on in Emacs and has been going""" start="00:09:02.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""on over the last couple of years and we'll""" start="00:09:06.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""see even more of that,""" start="00:09:08.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, going forward.""" start="00:09:10.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""1 thing is that communication still takes""" start="00:09:12.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""place over a mailing list in 2023.""" start="00:09:16.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we have emacsdevil at gnu.org,""" start="00:09:21.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""and that's where we develop Emacs.""" start="00:09:24.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""We use, we send patches back and forth,""" start="00:09:26.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""we comment on patches.""" start="00:09:30.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""And actually this workflow is very good,""" start="00:09:32.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you're used to it. Because guess what?""" start="00:09:36.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""As Emacs users, we like doing everything we""" start="00:09:39.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""can in Emacs, especially the core tasks that""" start="00:09:42.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""we're doing, such as developing Emacs itself.""" start="00:09:45.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""Of course, you want to do that fully within""" start="00:09:50.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs. So we hack Emacs Lisp in Emacs,""" start="00:09:52.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""we hack C in Emacs, we respond to emails also""" start="00:09:55.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""from Emacs, respond to bug reports,""" start="00:10:00.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""manage bug reports. We do all that stuff""" start="00:10:02.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""very, very smoothly. And it doesn't really""" start="00:10:05.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""matter in a sense, what is the medium?""" start="00:10:07.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""It happens to be email.""" start="00:10:10.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""Technically it could be anything,""" start="00:10:12.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""but email really has that type of staying""" start="00:10:14.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""power where we've been able to use it for a""" start="00:10:16.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""long time. And this is how,""" start="00:10:19.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""and we're still able to use it.""" start="00:10:22.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""And this is how free software was always""" start="00:10:24.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""developed in the past.""" start="00:10:25.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""Only in the last, let's say 10,""" start="00:10:26.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""15 years, We've had more development taking""" start="00:10:28.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""place perhaps on forges like GitHub,""" start="00:10:32.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""GitLab, whatever. But we are 1 of the""" start="00:10:35.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""holdouts. I mean, there are others,""" start="00:10:39.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""of course, like the Linux kernel has mailing""" start="00:10:40.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""lists. They're not trying to do that scale""" start="00:10:42.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""development on GitHub.""" start="00:10:44.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""And this is not just because we're Luddites""" start="00:10:49.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""that refuse to change.""" start="00:10:51.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""We just have to do it in the old way,""" start="00:10:53.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""because it is the old way,""" start="00:10:55.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""and that's the way it should be.""" start="00:10:57.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""No, it's actually because we,""" start="00:10:58.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""as core developers, the core development team""" start="00:11:01.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""and the people already involved and doing""" start="00:11:03.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""tremendous, I mean large amounts of work in""" start="00:11:05.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs has very efficient workflows built up""" start="00:11:08.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""based on this. So of course,""" start="00:11:12.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean moving to something else is something""" start="00:11:15.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""that we might like to do,""" start="00:11:18.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""but we're not yet clear on how to do it""" start="00:11:20.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""exactly and what to move to.""" start="00:11:24.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""So these are the types of discussions that""" start="00:11:26.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""we're looking at. Can we still support a""" start="00:11:28.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""mailing, an email type workflow while moving""" start="00:11:30.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""to something else? That would be 1 of the big""" start="00:11:34.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""ones. I think another thing that trips people""" start="00:11:36.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""up is that we used a bug tracker that,""" start="00:11:38.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, maybe some people,""" start="00:11:40.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I've heard people say it's archaic.""" start="00:11:42.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's called Debugs. I think maybe Debugs gets""" start="00:11:47.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""a bit of a bad rap. I think that bugs is a""" start="00:11:49.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""good piece of software.""" start="00:11:52.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""It wasn't developed in 2023.""" start="00:11:53.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, that's much as clear.""" start="00:11:55.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's a little bit older,""" start="00:11:57.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""but it really is a workhorse of the Debian""" start="00:11:59.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""project, which is obviously a project that's""" start="00:12:01.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""developed in a very different way than Emacs""" start="00:12:03.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""is. It's on a completely different scale,""" start="00:12:09.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""of course, much bigger,""" start="00:12:11.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""many more developers, and so on.""" start="00:12:12.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I think the developers did a good job for""" start="00:12:15.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""the time. But it might be showing its age,""" start="00:12:17.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps, in places. Perhaps,""" start="00:12:20.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""again, it's the email workflow.""" start="00:12:23.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""And people see that as a little bit of a""" start="00:12:25.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""threshold. It seems alien.""" start="00:12:27.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's a little bit strange,""" start="00:12:30.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""the types of workflows that you have there.""" start="00:12:32.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we are seeing some limitations with that""" start="00:12:35.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""box. And again, how do you report bugs?""" start="00:12:38.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""Well, in a sense, it's easy.""" start="00:12:41.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""You send an email to bug-gnu-emacs at gnu.org""" start="00:12:42.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""and you copy in whatever you get from,""" start="00:12:47.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, report the EMAX bug or if you have,""" start="00:12:51.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, send mail set up locally,""" start="00:12:53.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""just hit control C, control C and it's sent""" start="00:12:55.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""to the bug tracker and that's fine.""" start="00:12:58.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""But also I have to mention that there is this""" start="00:13:03.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""very good package on GNU Elpas.""" start="00:13:08.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""If you're ever trying to read the Emacs bug""" start="00:13:10.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""tracker or following along in Emacs""" start="00:13:13.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""development, I really recommend install the""" start="00:13:16.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""package devbugs from GNU Elpa.""" start="00:13:19.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's so good. And again,""" start="00:13:22.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's built on GNU, it's all integrated in""" start="00:13:24.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs, it's so much better than using the web""" start="00:13:26.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""and so on. And if you really want to get into""" start="00:13:30.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""it, you can download the bug tracker archives""" start="00:13:33.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""and the mailing list archives,""" start="00:13:38.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""and you can put them locally,""" start="00:13:39.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""you can have them searchable,""" start="00:13:41.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""and you can have whatever experience you""" start="00:13:42.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""like. So, I mean, it's really a flexible""" start="00:13:44.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""workflow, but it's a bit strange,""" start="00:13:48.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps, to some people.""" start="00:13:51.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we also think supporting only this""" start="00:13:53.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""workflow might be a little bit too limiting.""" start="00:13:58.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we do want to move over to something like""" start="00:14:00.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""GitLab, perhaps Sourcehat or something""" start="00:14:04.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""similar. We've had a couple of discussions""" start="00:14:06.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""about that over the last couple of years.""" start="00:14:10.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think even before that,""" start="00:14:14.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""but that's how far back I've been involved,""" start="00:14:15.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""and definitely it's come up occasionally.""" start="00:14:18.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think we are less far away than perhaps""" start="00:14:23.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""ever is how I would express that,""" start="00:14:27.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""and in the sense that the remaining blockers""" start="00:14:30.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""for just making the shift,""" start="00:14:36.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's say, are I think,""" start="00:14:38.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, first of all, we're talking about""" start="00:14:40.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""limitations, perhaps in the software,""" start="00:14:42.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""they're well defined, and they're not as""" start="00:14:44.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""amountable. I don't think they have to be in""" start="00:14:46.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""any case. We should be able to make some""" start="00:14:49.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""progress. The main thing that we're lacking""" start="00:14:50.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""now is not more discussion or more people""" start="00:14:54.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""prodding us to just please switch over.""" start="00:15:00.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""No, we're looking for volunteers.""" start="00:15:03.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""If you think that you,""" start="00:15:05.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, have what it takes to sort of come""" start="00:15:08.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""in and help us do something like that and""" start="00:15:10.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""work together with us,""" start="00:15:14.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, to see what can be done,""" start="00:15:15.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps some, a few things would need to be""" start="00:15:16.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""changed in GitLab. I don't think anything""" start="00:15:20.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""huge, but maybe there are some patches to be""" start="00:15:23.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""written and sent upstream,""" start="00:15:26.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""or maybe we need to do some local hacks or""" start="00:15:27.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""whatever. If you wanna do that,""" start="00:15:30.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""please contact us, emacsdevil.""" start="00:15:33.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""We'll be very happy to talk to you.""" start="00:15:35.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""And then we can start making progress.""" start="00:15:38.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""So I'm really hoping that that sound like""" start="00:15:40.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""will come into place. But we need to,""" start="00:15:42.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""if we do switch over, we need to preserve the""" start="00:15:46.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""good parts of our email-based workflows.""" start="00:15:52.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""So there are requirements there so that we""" start="00:15:54.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""can continue to do our job as maintainers,""" start="00:15:57.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you like. Another thing is that we've""" start="00:16:01.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""sometimes seen that there's a bit of a""" start="00:16:04.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""different culture perhaps on mailing lists""" start="00:16:08.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""and on Emacs devil than what many people are""" start="00:16:11.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""used to, especially like you've used perhaps,""" start="00:16:15.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""many people might be in university and""" start="00:16:17.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""they've started using Emacs,""" start="00:16:20.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe got into a little bit of package""" start="00:16:23.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""development and starting to get the ropes of""" start="00:16:25.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""that and are very used to working on places""" start="00:16:29.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""like GitLab or something like that,""" start="00:16:32.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""then the type of culture and way of""" start="00:16:35.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""communicating that we use in Emacs might be a""" start="00:16:38.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit different. And of course,""" start="00:16:42.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's different in the sense that mailing""" start="00:16:44.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""lists have always, I mean,""" start="00:16:47.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's say hacker culture,""" start="00:16:49.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""whatever you want to call it,""" start="00:16:51.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""have always communicated in a particular way""" start="00:16:52.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""using mailing lists. So it's like succinct to""" start="00:16:54.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""the point, perhaps I'm skipping a few""" start="00:16:58.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""pleasantries. And the idea is that you should""" start="00:17:00.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""just use it in as effective way as possible,""" start="00:17:03.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""so that also the archives are usable.""" start="00:17:08.359" video="mainVideo-core" id="subtitle"]] +[[!template text="""And the other thing is that generally people""" start="00:17:11.319" video="mainVideo-core" id="subtitle"]] +[[!template text="""involved in developing free software has to""" start="00:17:13.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""deal with a lot of incoming traffic,""" start="00:17:16.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""emails. They don't have the bandwidth if it's""" start="00:17:19.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""too much noise. You really need to be strict""" start="00:17:25.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""to keep the signal to noise ratio high.""" start="00:17:28.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""We have some weird terminology on the Emacs""" start="00:17:31.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""devil. People tell us,""" start="00:17:35.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""we say sometimes install patches which""" start="00:17:38.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""basically means push to master or merge pull""" start="00:17:40.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""requests because we've used other version""" start="00:17:44.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""control systems in the past where it might""" start="00:17:46.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""have made more sense to say install patches.""" start="00:17:48.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""And then you sort of, I don't know,""" start="00:17:51.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""I say it. Don't ask me why.""" start="00:17:52.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""But it feels natural after a while.""" start="00:17:54.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""You install a patch. It's clear what you""" start="00:17:56.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""mean. You don't have to worry about which""" start="00:17:57.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""branch it's on. So it's a little bit""" start="00:18:02.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""historical there. So there is some of that""" start="00:18:06.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""culture going on. It might be different.""" start="00:18:10.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""We don't use emojis that much.""" start="00:18:11.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's another thing. There is no like,""" start="00:18:14.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""you can click the little like button at the""" start="00:18:16.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""bottom of a comment or an email as you could""" start="00:18:20.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""on GitHub. But there are exceptions and it's""" start="00:18:25.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""not like someone will send you angry emails""" start="00:18:27.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you use an emoji or something like that.""" start="00:18:29.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""But it can come off as perhaps Because people""" start="00:18:31.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""are pressed for time also when replying to""" start="00:18:34.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""all these emails. So it might come off as a""" start="00:18:37.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit short, but that's just how it is.""" start="00:18:39.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think We have heard this comment before""" start="00:18:43.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""that mailing lists are scary or Emacs devil""" start="00:18:46.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""is scary or core development is scary.""" start="00:18:50.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I've touched a few of these points a""" start="00:18:54.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit already. I think,""" start="00:18:58.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""yeah, maybe a little bit.""" start="00:18:59.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""For example, we don't use emojis very short""" start="00:19:02.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""in the communication. And we always use""" start="00:19:06.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""correct grammar and spelling.""" start="00:19:10.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""We take that seriously because it's important""" start="00:19:13.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""for being clear in your written communication""" start="00:19:15.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""when all you have is written communication.""" start="00:19:19.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's really important.""" start="00:19:22.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""But it's not like If you come in there and""" start="00:19:26.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""you don't know all these cultural rules and""" start="00:19:31.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""all these patterns, then you know you will We""" start="00:19:33.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""won't talk to you No Actually,""" start="00:19:36.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""we try to be as welcoming as we can and and""" start="00:19:37.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""be mindful and you know people not Everyone""" start="00:19:41.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""has English as their native language,""" start="00:19:44.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""for example. So perhaps someone says""" start="00:19:47.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""something, and it might come off as rude,""" start="00:19:49.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""but maybe it's just a direct translation.""" start="00:19:51.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we're trying to give a lot of whatever the""" start="00:19:53.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""native language is. So we try to give a lot""" start="00:19:56.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""of leeway and just be a little bit,""" start="00:19:59.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, flexible and focus on,""" start="00:20:01.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, the key, key points,""" start="00:20:03.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""which are the technical things,""" start="00:20:04.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""the technical decisions,""" start="00:20:06.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""technical arguments, rather than,""" start="00:20:07.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, getting bogged down in a lot of,""" start="00:20:09.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, personal, you know,""" start="00:20:11.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""discussions and flame wars.""" start="00:20:15.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""So, I mean, there are these things to be""" start="00:20:19.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""aware of, you know, it's just a little bit""" start="00:20:21.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""different. I don't think it's anything huge.""" start="00:20:23.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I wouldn't be, you know,""" start="00:20:25.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think it would be sad if people felt too""" start="00:20:28.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""intimidated by that. It just is what it is.""" start="00:20:30.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""And if you spend some time there,""" start="00:20:32.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""you'll see how people generally communicate.""" start="00:20:33.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes, there are a lot of people on""" start="00:20:38.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""EmacsDevil. It's a public mailing list.""" start="00:20:41.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""A lot of people just sign up to follow Emacs""" start="00:20:43.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""development. Sometimes they chime in.""" start="00:20:46.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think this is in general a good thing.""" start="00:20:48.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think it should be a public mailing list.""" start="00:20:50.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes this leads to weird situations from""" start="00:20:53.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""just a point of view as an Emacs maintainer,""" start="00:21:00.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? I mean, I try to say something and it""" start="00:21:03.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""doesn't always say, oh,""" start="00:21:07.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""he's the maintainer or whatever.""" start="00:21:08.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""So when I say something,""" start="00:21:10.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""it should carry a little bit more weight than""" start="00:21:11.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""some unknown person from the internet who has""" start="00:21:13.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""an opinion and decided to send it to""" start="00:21:16.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""EmacsDevil. So it's good to be a little bit""" start="00:21:18.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""aware of who is a little bit more involved""" start="00:21:21.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""with the project. I would check out the""" start="00:21:23.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""maintainers file. I would check,""" start="00:21:25.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""see in the Git log, do these people actually""" start="00:21:27.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""have any anything in core?""" start="00:21:31.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""And if not, maybe, you know,""" start="00:21:33.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""there, we won't really,""" start="00:21:35.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""even if they express an opinion very""" start="00:21:39.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""strongly, even if they're a little bit rude,""" start="00:21:41.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe they're not even involved in Emacs""" start="00:21:42.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""development. I mean, often,""" start="00:21:44.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's the case we have some people,""" start="00:21:46.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""unfortunately, at times,""" start="00:21:48.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""we have random people from the internet come""" start="00:21:50.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""in on the mailing list and they're just a""" start="00:21:52.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit rude, or they say an opinion""" start="00:21:54.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's not exactly helpful.""" start="00:21:57.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think you need to be aware.""" start="00:22:00.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, these things happen in any forum,""" start="00:22:02.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""but it happens on EmacsDevO as well.""" start="00:22:04.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""So just be a little bit aware of who you're""" start="00:22:07.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""talking to, what people are doing.""" start="00:22:10.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""It can help to Check the archives,""" start="00:22:13.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""see who writes what, and so on.""" start="00:22:16.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""But it's not something that I think is a huge""" start="00:22:20.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""problem. It is just, again,""" start="00:22:23.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""something to be aware of.""" start="00:22:24.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""We have the new kind of communication""" start="00:22:25.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""guidelines in place, which basically says""" start="00:22:28.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""that you should be nice to people and stay""" start="00:22:30.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""focused on the technical problem,""" start="00:22:33.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""try to see things from another person's point""" start="00:22:36.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""of view, this kind of stuff.""" start="00:22:38.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we're really trying to be as inclusive as""" start="00:22:39.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""possible and just stay correct in general.""" start="00:22:42.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""And sometimes, I mean,""" start="00:22:46.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""not everyone, it's a public list.""" start="00:22:48.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""We moderate it, but not to a huge extent,""" start="00:22:50.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? So sometimes people get away with a""" start="00:22:52.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit of perhaps stretching the""" start="00:22:57.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""boundaries of what might be included in the""" start="00:23:02.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""kind communication guidelines,""" start="00:23:04.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""sort of the fences and limitations of that.""" start="00:23:08.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I would just ignore that.""" start="00:23:11.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes it happens that we,""" start="00:23:13.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""as happens in any forum,""" start="00:23:15.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""by the way, you just, we have these very big""" start="00:23:17.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""threads. We start discussing something else.""" start="00:23:19.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Perhaps you send us a patch and it just""" start="00:23:21.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""devolves into us discussing something""" start="00:23:24.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""completely different. And of course I partake""" start="00:23:26.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""in that, not better than anyone else,""" start="00:23:28.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""but it just happens. I mean,""" start="00:23:30.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's not your fault. It's just what happens""" start="00:23:32.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""sometimes in forums, and don't mind that.""" start="00:23:34.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it's a little bit easier to do that in""" start="00:23:37.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""emails, because you just change the subject,""" start="00:23:39.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""and now it's supposed to be a different""" start="00:23:41.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""thread, but it comes as replies usually to""" start="00:23:43.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""you, which wouldn't happen perhaps in a""" start="00:23:45.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""different workflow. So it's something to be""" start="00:23:48.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""aware of as well. Another thing is that,""" start="00:23:49.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""of course, in written communication,""" start="00:23:53.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""tone doesn't always come across.""" start="00:23:55.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""If someone sounds negative,""" start="00:23:57.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""sometimes it's just them being neutral.""" start="00:23:59.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes you get no replies.""" start="00:24:01.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""You send something, you get no replies.""" start="00:24:05.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""And this could mean, actually it could mean,""" start="00:24:07.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""yeah, what you said was uncontroversial.""" start="00:24:09.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""We think it was a good idea.""" start="00:24:11.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""No 1 replied to it because either someone""" start="00:24:13.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""else would reply or just there was no need to""" start="00:24:16.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""reply because, yeah, why not?""" start="00:24:18.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""So but if you do send a patch and you don't""" start="00:24:21.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""get an answer, wait. I mean,""" start="00:24:24.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""don't wait 1, 2 days. Maybe we're busy or""" start="00:24:26.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""we're sick or whatever.""" start="00:24:29.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""Wait 2 weeks. It's fine to just send it""" start="00:24:30.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""again. If you send the patch to EmacsDevil,""" start="00:24:32.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""send it to the bug mailing list,""" start="00:24:35.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""because we lose track of stuff on EmacsDevil.""" start="00:24:37.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's just the reality of it.""" start="00:24:39.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""So if you propose making a change and no 1""" start="00:24:43.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""commented, feel free to ask us again if a""" start="00:24:46.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""patch would be welcome and we will clarify.""" start="00:24:48.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Bug reports, unfortunately,""" start="00:24:53.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you get no answer, I mean,""" start="00:24:54.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""we do have a limited amount of time to work""" start="00:24:56.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""on bugs. If you're looking to get started in""" start="00:24:59.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs development, this is an excellent way""" start="00:25:02.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""to start getting involved.""" start="00:25:05.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""What I'd recommend is start looking into""" start="00:25:07.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""bugs. I'd install that bug,""" start="00:25:09.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'd see about the mailing workflow and set""" start="00:25:11.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""that up a little bit, or not.""" start="00:25:13.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's up to you. You can reply to an email""" start="00:25:16.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""without setting any of that stuff up.""" start="00:25:17.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""But just help us try out your bugs,""" start="00:25:20.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""send patches, do that type of stuff.""" start="00:25:22.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, that's an excellent way,""" start="00:25:24.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""and extremely welcome.""" start="00:25:26.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""We're so happy to see when people pick up bug""" start="00:25:27.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""reports that have been left by the wayside""" start="00:25:30.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""and just fix them, send us a patch,""" start="00:25:32.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""and we can just apply it.""" start="00:25:36.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""So that's really your starting point if you""" start="00:25:37.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""want to get involved in Emacs core""" start="00:25:40.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""development. I also want to say that be aware""" start="00:25:44.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""that you know Emacs is the editor of the GNU""" start="00:25:50.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""operating system and this makes the project""" start="00:25:54.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""political a little bit whether you like it or""" start="00:25:56.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""not. Luckily the you know the politics are""" start="00:25:58.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""limited enough that we can find broad""" start="00:26:01.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""agreement on it. So we want to promote,""" start="00:26:03.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""we want to create free software.""" start="00:26:05.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's sort of it. That's it.""" start="00:26:08.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""And there shouldn't be too much more to it,""" start="00:26:11.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? We want to rid the world of""" start="00:26:13.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""proprietary software as an evil thing.""" start="00:26:15.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""Ideally, all software should be free.""" start="00:26:19.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""But these are just the goals of the free""" start="00:26:23.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""software movement. So we're very strict with""" start="00:26:25.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""some things. We don't recommend non-free""" start="00:26:27.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""proprietary software. Of course,""" start="00:26:30.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""we have no problem mentioning Microsoft""" start="00:26:31.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""Windows because everyone knows that there's""" start="00:26:33.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""this obscure operating system developed in""" start="00:26:35.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""California that some people insist on using.""" start="00:26:39.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""We use, many of us use GNU plus Linux.""" start="00:26:42.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Actually, some core developers happen to use""" start="00:26:45.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""exactly, you know, not GNU plus Linux,""" start="00:26:47.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""but that's fine as well,""" start="00:26:50.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? We take a little bit of a pragmatic""" start="00:26:52.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""view, but we don't wanna do,""" start="00:26:54.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""what we don't wanna do is promote like this""" start="00:26:56.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""small, unknown piece of non-free software and""" start="00:26:59.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""sort of help the non-free software in that""" start="00:27:04.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""way. That's where we try to draw the line,""" start="00:27:08.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, in just expressing just a few""" start="00:27:12.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""words. So that's 1 thing.""" start="00:27:15.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""We're, I think, very pragmatic on this point,""" start="00:27:18.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""but we do try to follow the principle.""" start="00:27:21.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""We also require copyright assignment.""" start="00:27:25.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think in general,""" start="00:27:27.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""the argument is that we require a copyright""" start="00:27:30.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""assignment, because that makes it easier to""" start="00:27:34.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""defend the legal status of the GNU Emacs""" start="00:27:39.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""source code. So if there's ever a legal""" start="00:27:43.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""battle, the idea is that if it's only 1""" start="00:27:45.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""copyright holder and you have a GPL""" start="00:27:48.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""violation, i.e. Someone might change Emacs""" start="00:27:50.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""and then distribute it as proprietary""" start="00:27:54.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""software or something nasty like that,""" start="00:27:56.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""then we have an easier way of defending it in""" start="00:27:58.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""court if there is only 1 copyright holder.""" start="00:28:00.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we assigned copyright to the Free Software""" start="00:28:02.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""Foundation. And I think there,""" start="00:28:04.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, sometimes people oppose this for""" start="00:28:09.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""various reasons, you know,""" start="00:28:12.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""people see it as, you know,""" start="00:28:13.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe some people might say,""" start="00:28:15.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, it's ideological,""" start="00:28:16.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, who goes, you know,""" start="00:28:18.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""the FSF goes too far with this.""" start="00:28:19.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""And, and, I mean, that's fine.""" start="00:28:21.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""You that's, that's an opinion.""" start="00:28:23.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""And the there, then other people are more""" start="00:28:25.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""practical, you know, it's just,""" start="00:28:28.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's a hassle, basically,""" start="00:28:30.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""we don't want to sign these papers.""" start="00:28:31.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I'm not really here to tell anyone that""" start="00:28:33.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""they're wrong. I've expressed my views on""" start="00:28:35.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""this in the past. But just for now,""" start="00:28:37.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm just very practical for the purposes of""" start="00:28:40.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""this talk. So I signed the papers.""" start="00:28:43.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's Maybe it didn't take me many minutes.""" start="00:28:46.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""And in most cases, it shouldn't really.""" start="00:28:49.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it's something that I found worth doing,""" start="00:28:52.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""because that way I could focus on continuing""" start="00:28:55.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""to improve Emacs instead of discussing the""" start="00:28:58.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""finer points of copyright law.""" start="00:29:01.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""You could write patches and stuff,""" start="00:29:03.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""that kind of thing. So,""" start="00:29:05.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, this is something that trips people""" start="00:29:06.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""up and, you know, it's fine that people have""" start="00:29:08.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""different opinions on it and so on,""" start="00:29:11.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""but I think for now that's just something to""" start="00:29:14.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""be aware of. So that's,""" start="00:29:19.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, I mean, there's much more that could""" start="00:29:23.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""be said. Ideally, I would like to have a""" start="00:29:26.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""practical part to this talk as well.""" start="00:29:27.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I wanted to say something about the""" start="00:29:32.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""packages in Emacs. Because as we know,""" start="00:29:34.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, Emacs is the, I can't remember what""" start="00:29:37.159" video="mainVideo-core" id="subtitle"]] +[[!template text="""it says, it's like a visual,""" start="00:29:40.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""there's in the manual it says,""" start="00:29:42.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""oh, Emacs is an advanced text editor.""" start="00:29:43.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's visual, which, I mean,""" start="00:29:46.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's not ed, the whole Unix ed,""" start="00:29:47.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""so that's cool. It's also customizable,""" start="00:29:50.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? So that's always been a thing.""" start="00:29:53.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""And what makes Emacs so amazing.""" start="00:29:57.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""And some people described it as,""" start="00:30:00.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I can't remember who said that there has been""" start="00:30:01.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""a Cambrian explosion of packages in Emacs.""" start="00:30:03.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think that's true.""" start="00:30:09.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, if you look at something like Melpa,""" start="00:30:10.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think they have over 5,000""" start="00:30:12.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""packages now. It's like truly impressive,""" start="00:30:13.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""just an immense amount of work and immense""" start="00:30:16.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""amount of packages. And really,""" start="00:30:18.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""this shows the strength,""" start="00:30:22.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, of the Emacs community,""" start="00:30:24.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""of Emacs itself as an idea.""" start="00:30:26.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think it's also just tremendous work""" start="00:30:29.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's been done by the maintainers.""" start="00:30:31.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""And they do get a lot of recognition for""" start="00:30:33.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""that. And rightly so, in my opinion.""" start="00:30:36.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's done so much, I think,""" start="00:30:39.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""for our community. The other package archive""" start="00:30:41.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""that we have is GNU-ELPA.""" start="00:30:44.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""And that's been enabled since when packages""" start="00:30:46.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""first got introduced back in,""" start="00:30:49.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, Emacs, was it 23?""" start="00:30:51.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""And probably, I mean, the main thing why a""" start="00:30:55.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""package goes onto GNU Elpa is,""" start="00:30:59.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, it should be installable out of the""" start="00:31:01.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""box. So, I mean, that's a big benefit in a""" start="00:31:04.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""sense. It's also a requirement for GNU Alpa""" start="00:31:07.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""that the copyright, again,""" start="00:31:10.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""just as GNU Emacs, the copyright is assigned""" start="00:31:12.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""to the Free Software Foundation.""" start="00:31:15.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""And some very hugely popular packages,""" start="00:31:17.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""like YaSnippet, for example,""" start="00:31:20.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""is on GNU Alpa. And we were discussing this""" start="00:31:21.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""just 2 months back. And Joe Tavora,""" start="00:31:25.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""I can't say his name, G-O-A-O,""" start="00:31:30.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""Tavora. He made the point that he's never""" start="00:31:33.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""seen a problem in any of his packages with""" start="00:31:36.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""copyright assignment in particular.""" start="00:31:40.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's never been a problem to get people to be""" start="00:31:42.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""involved in the development of those packages""" start="00:31:44.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""just because of the copyright assignment""" start="00:31:46.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""requirements. So I mean,""" start="00:31:49.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's his perspective on that.""" start="00:31:51.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think it was worth relating his""" start="00:31:54.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""experience here. So we also have this new""" start="00:32:00.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""package archive called non-GNU-alpha,""" start="00:32:06.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""which is now enabled by default as well.""" start="00:32:08.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think for practical purposes,""" start="00:32:12.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""you could get into it a little bit more,""" start="00:32:14.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, why we created non-NUELPA,""" start="00:32:16.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""and perhaps that's something we can discuss""" start="00:32:19.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""in the Q&A section. For practical purposes,""" start="00:32:23.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""the main thing to be aware of is,""" start="00:32:26.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""yes, we don't promote non-free software on""" start="00:32:28.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""there, And we also don't have the copyright""" start="00:32:30.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""assignment requirement.""" start="00:32:36.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think this is probably for new packages.""" start="00:32:41.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's generally better if they go to GNU Elpa,""" start="00:32:43.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""if there is any type of idea or ambition""" start="00:32:48.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""that, you know, at some point it would be""" start="00:32:51.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""good or it might be good to eventually have""" start="00:32:53.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""some type of functionality like this shipped""" start="00:32:56.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""with Emacs itself. So I think this is""" start="00:32:58.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""something that perhaps package authors could""" start="00:33:01.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""also be aware of, that occasionally we do""" start="00:33:04.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""bring in functionality from GNU Elpa into""" start="00:33:07.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""core Emacs because we feel that it should be""" start="00:33:09.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""better integrated with Emacs itself.""" start="00:33:12.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""So if I could give any type of""" start="00:33:16.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""recommendation, of course,""" start="00:33:18.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""you do. These are your packages,""" start="00:33:19.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? In an ideal world,""" start="00:33:22.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""we would only use this for legacy packages""" start="00:33:25.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""where people contributed in the past,""" start="00:33:28.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""but you didn't worry about the copyright""" start="00:33:30.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""assignment. But where possible,""" start="00:33:32.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think there is benefit in putting it on GNU""" start="00:33:34.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""Elpa. And I wanted to end a little bit on a""" start="00:33:37.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""more, you know, the more opinionated perhaps""" start="00:33:42.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""part of my talk and not just talk about""" start="00:33:45.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""processes. I see that I'm running out of""" start="00:33:47.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""time. So I will say Emacs is hackable.""" start="00:33:49.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think that's a blessing and a curse.""" start="00:33:51.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""And if you think about something like,""" start="00:33:54.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""the types of choices that you can make,""" start="00:33:59.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""perhaps when you implement something,""" start="00:34:01.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""There are choices, different choices between""" start="00:34:03.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""something like common list,""" start="00:34:06.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""which is like bigger, more batteries""" start="00:34:07.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""included, and something like scheme,""" start="00:34:09.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""which is more minimal.""" start="00:34:11.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think we have some of those,""" start="00:34:12.239" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, this kind of tension also in the""" start="00:34:13.679" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs itself. What should be in Emacs core?""" start="00:34:16.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""Should we have a lean Emacs core?""" start="00:34:18.159" video="mainVideo-core" id="subtitle"]] +[[!template text="""Should we have more stuff in Emacs core?""" start="00:34:19.699" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think these are good discussions to""" start="00:34:22.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""have. And there are various challenges that""" start="00:34:26.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""are associated with each of those choices.""" start="00:34:29.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think what will never change is that Emacs""" start="00:34:32.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""is hackable. Emacs is customizable.""" start="00:34:35.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""This is the key strength.""" start="00:34:37.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""This is why we love and use Emacs.""" start="00:34:38.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think fundamentally,""" start="00:34:40.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""whether you do it a lot or not,""" start="00:34:42.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""this is what at core is bringing you that""" start="00:34:44.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""amazing user experience.""" start="00:34:47.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""However, the flip side of that sometimes is""" start="00:34:50.739" video="mainVideo-core" id="subtitle"]] +[[!template text="""that it's so easy to hack Emacs so that we""" start="00:34:53.199" video="mainVideo-core" id="subtitle"]] +[[!template text="""hack around bugs instead of fixing them.""" start="00:34:56.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""We do some tweak and our customers say,""" start="00:34:58.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""okay, this is a little bit broken,""" start="00:35:00.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""Let me just fix it. I'll put an advice on""" start="00:35:01.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""this function. I'll do this customization.""" start="00:35:03.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""Or we accept limitations in Emacs core.""" start="00:35:06.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think it's fine.""" start="00:35:09.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, this will never change.""" start="00:35:12.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""That will always be core to what Emacs is,""" start="00:35:13.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? However, I think that the flip side of""" start="00:35:16.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""that is that I think sometimes we could be""" start="00:35:20.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""better at just taking those few extra steps""" start="00:35:22.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""to also make Emacs better itself and solve""" start="00:35:26.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""this for all users. And I think if we can""" start="00:35:29.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""build a little bit more of a culture like""" start="00:35:31.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""that, I mean, we already have that culture to""" start="00:35:33.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""a large extent, don't get me wrong,""" start="00:35:35.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""we do, but if we can get a little bit more of""" start="00:35:37.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""that culture, let's get that into core,""" start="00:35:39.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's get that problem fixed,""" start="00:35:41.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""that frustration. I can tell you that,""" start="00:35:43.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""I just started a new assignment at work,""" start="00:35:47.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I already told you, so I'm going to write a""" start="00:35:48.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""lot of Python, okay? So I need to keep track""" start="00:35:51.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""of something called virtual environments,""" start="00:35:54.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""and that's just a way to install these""" start="00:35:56.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""dependencies just locally per directory or""" start="00:35:58.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""per repository kind of thing.""" start="00:36:01.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I've used various packages for that.""" start="00:36:03.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""There are like 4 packages,""" start="00:36:05.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""5 packages, maybe. And 1 is called VM,""" start="00:36:07.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""and 1 is called VirtualM,""" start="00:36:10.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""and 1 is called Python-VM.""" start="00:36:11.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""And now I'm using, you know,""" start="00:36:15.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm using a different 1.""" start="00:36:16.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it's just a little bit,""" start="00:36:18.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""why doesn't this work out of the box in""" start="00:36:20.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs? Why? I don't think there's a really""" start="00:36:22.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""good fundamental good reason why something""" start="00:36:25.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""like that doesn't work in Emacs.""" start="00:36:28.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""So I think that's really,""" start="00:36:30.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, I'm sure there are other things like""" start="00:36:32.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""that, other fundamental features.""" start="00:36:35.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""Why is it that for the last 20 years,""" start="00:36:37.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""we've shipped Emacs with no PHP support out""" start="00:36:39.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""of the box? I mean, I'm not a PHP programmer.""" start="00:36:43.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""I don't really have a lot of love for PHP,""" start="00:36:47.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's say. To me, it's a very funny-looking""" start="00:36:51.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""language, but okay, still it's been very""" start="00:36:57.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""popular. Why haven't we supported it?""" start="00:37:00.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, it's just strange.""" start="00:37:02.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""You install Emacs on some machine,""" start="00:37:03.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""you open a PHP file, you get fundamental""" start="00:37:05.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""mode. It's not the best user experience,""" start="00:37:07.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""in my opinion. So I think there are some""" start="00:37:09.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""things where we really could do a little bit""" start="00:37:12.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""better. And I'm seeing this all the time.""" start="00:37:15.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""Just this week, this new assignment was""" start="00:37:20.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""interesting. There was this Emacs user.""" start="00:37:22.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""Turns out we have the exact same hack in both""" start="00:37:24.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""of our init files. So we had created the""" start="00:37:26.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""exact same mode for DIRED,""" start="00:37:29.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""actually, to hide dot files.""" start="00:37:32.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""You know, dot something is supposed to be""" start="00:37:33.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""hidden on a Unix system.""" start="00:37:36.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""So we had DERED hide dot files mode to just""" start="00:37:40.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""hide them. And why isn't that in DERED?""" start="00:37:43.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""Or should it be in DERED?""" start="00:37:47.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""Should it be a package on the new Elpa?""" start="00:37:48.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""Where should it be? Why is it just local""" start="00:37:51.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""hack? Should it be on a wiki somewhere?""" start="00:37:53.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, sometimes that's the correct answer.""" start="00:37:54.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes the correct answer is,""" start="00:37:56.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""yes, it should be a package.""" start="00:37:59.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sometimes the correct answer is,""" start="00:38:00.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""yes, it should really be in core.""" start="00:38:02.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""So what I want to promote is more like,""" start="00:38:04.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""let's just take a step back and just ask""" start="00:38:06.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""yourself, what's the best solution if we look""" start="00:38:08.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""at the overall picture?""" start="00:38:11.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""Should I hack this into my configuration?""" start="00:38:12.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""In many cases, yes, that's the right thing to""" start="00:38:14.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""do. We don't want to proliferate just random""" start="00:38:16.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""solutions all over Emacs for no reason.""" start="00:38:19.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""But sometimes we want to fix it once and for""" start="00:38:22.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""all. We want to do that in core.""" start="00:38:24.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""So you could send stuff like that to us as""" start="00:38:27.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""patches or as packages.""" start="00:38:30.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""And we can discuss a little bit about where""" start="00:38:31.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""should we solve this? What's the right level""" start="00:38:34.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""of abstraction? I'm seeing that I'm running""" start="00:38:37.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""out of time. I had an Emacs wish list.""" start="00:38:41.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""Maybe we can take more of that in the Q&A.""" start="00:38:43.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I want to say, like,""" start="00:38:47.170" video="mainVideo-core" id="subtitle"]] +[[!template text="""in VS Code, you just start VS Code.""" start="00:38:49.226" video="mainVideo-core" id="subtitle"]] +[[!template text="""You open a Python file,""" start="00:38:50.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""and you get, like, hey,""" start="00:38:51.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""are you trying to use Python?""" start="00:38:53.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Click here, install Python.""" start="00:38:54.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""You get all the nice things out of the box.""" start="00:38:56.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""And my argument is, why can't we have more of""" start="00:38:59.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""that in Emacs? I don't think it's necessarily""" start="00:39:01.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""hard, but it does take a little bit of work.""" start="00:39:04.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""The challenges here are more social,""" start="00:39:06.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, than technical.""" start="00:39:09.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I think it's worth doing,""" start="00:39:10.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""because it's not just Python.""" start="00:39:12.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's just There are always these small things""" start="00:39:14.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""where it just really should work,""" start="00:39:16.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""and that would be a much better experience.""" start="00:39:18.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""And then you could customize not that thing""" start="00:39:20.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""that should just work,""" start="00:39:23.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""but you could customize more fun and""" start="00:39:24.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""exploratory things instead of people""" start="00:39:27.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""reinventing the wheel over and over again.""" start="00:39:29.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""So I'm very excited about what's happening in""" start="00:39:31.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs. I think we should be proud of what""" start="00:39:33.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""we've accomplished. It's so many things to""" start="00:39:35.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""many different people,""" start="00:39:37.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""an environment for hacking,""" start="00:39:38.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""just a productivity system.""" start="00:39:40.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Other sees us as a different way of looking""" start="00:39:41.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""at computing, you know,""" start="00:39:44.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""the embodiment of the ideal of the Lisp""" start="00:39:45.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""machine if you want to talk big words and""" start="00:39:47.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""stuff like that. And of course,""" start="00:39:49.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs are all those things and so many more.""" start="00:39:50.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""And that's what makes Emacs so amazing.""" start="00:39:53.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""And in some sense, we should be care that""" start="00:39:56.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""people are satisfied with using lesser text""" start="00:40:00.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""editors. How could they be happy running""" start="00:40:03.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""that? I mean, I'm sure it's fine,""" start="00:40:05.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""but it sure as hell isn't Emacs.""" start="00:40:07.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""So don't we owe it to the world and to them""" start="00:40:09.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""and to ourselves to make a great Emacs.""" start="00:40:12.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""That will be my ending words.""" start="00:40:14.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I hope to see you all in the Q&A.""" start="00:40:16.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Thank you all. And thank you so much,""" start="00:40:18.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Stefan. That was a wonderful presentation.""" start="00:40:22.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I just want to give you the opportunity.""" start="00:40:24.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""You said that you perhaps had,""" start="00:40:27.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Not the practical stuff,""" start="00:40:30.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""but you wanted to do a demo or something like""" start="00:40:31.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""this? What did you mention exactly?""" start="00:40:33.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, we didn't have time really.""" start="00:40:36.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yes, I'm not sure. I didn't prepare anything""" start="00:40:38.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""so that we can do it live.""" start="00:40:42.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""But maybe for next time,""" start="00:40:43.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""I will do a demo. Don't hold me to it.""" start="00:40:44.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""Or someone else could.""" start="00:40:49.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""That would be really amazing.""" start="00:40:51.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right. Well, thank you,""" start="00:40:53.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""Stéphane. You've been already into so much""" start="00:40:54.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""detail of so many... So much of the intricacy""" start="00:40:56.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""of the maintenance. And as someone who's been""" start="00:41:01.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""95% of the time developing for Melpa,""" start="00:41:05.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""I feel like this talk was very geared to a""" start="00:41:08.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""lot of us who tend to experiment in this""" start="00:41:11.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Cambrian stage of Emacs evolution,""" start="00:41:13.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""where we get to deploy a lot of creativity""" start="00:41:16.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""whilst also feeling pretty agile in a way we""" start="00:41:20.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""come up with solutions to problems.""" start="00:41:24.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""But you've won me over with your discussion""" start="00:41:25.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""about potentially moving some of this stuff""" start="00:41:29.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""to core. And I think this particularly""" start="00:41:31.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""resonated at the end with this tension that""" start="00:41:33.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""you feel about problems that you encounter.""" start="00:41:36.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Do you fix them in Melpa?""" start="00:41:39.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""Do you fix them in core?""" start="00:41:40.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""Is it not something that is supposed to be an""" start="00:41:42.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""option? I love this tension and it's""" start="00:41:43.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""something that we've been exploring for the""" start="00:41:46.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""last 3 edition of Emacs Cons.""" start="00:41:48.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's really what is to be the interaction""" start="00:41:49.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""between this pool of very clever developers""" start="00:41:52.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""who are on Melpa but who are perhaps a little""" start="00:41:55.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""bit afraid of joining Core and the wonderful""" start="00:41:58.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""job that you do that, yes,""" start="00:42:00.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""seems archaic from the outside,""" start="00:42:02.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""but as you've been at length today in your""" start="00:42:05.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""presentation, is actually just a better way""" start="00:42:07.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""to work, a very pragmatic way to get a lot of""" start="00:42:09.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""work done. So, thank you so much for your""" start="00:42:11.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""presentation. Thank you,""" start="00:42:13.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""Leo. So, we have about 12 minutes now to go""" start="00:42:15.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""through as many questions as possible.""" start="00:42:20.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""You have obviously had a lot of questions""" start="00:42:22.950" video="mainVideo-core" id="subtitle"]] +[[!template text="""throughout your presentation.""" start="00:42:26.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""Do you have access to the pad,""" start="00:42:27.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""or do you want me to share the question and""" start="00:42:28.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""feed them to you? Yes,""" start="00:42:30.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""could you start with sharing them?""" start="00:42:32.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'll see if I can get it on my screen.""" start="00:42:34.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sure, I'll do that. Please let me know if my""" start="00:42:36.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""microphone is clipping because my OBS setup""" start="00:42:39.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""sometimes is a little bit janky.""" start="00:42:42.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I'm going to try to read the questions""" start="00:42:44.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""for now. It's tipping,""" start="00:42:46.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""I can hear you okay. Okay,""" start="00:42:48.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""so bear with the clicking,""" start="00:42:51.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""we'll switch as soon as possible to Stefan""" start="00:42:54.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""reading the question, but I'll read the first""" start="00:42:56.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""1. Can you tell us some about your,""" start="00:42:58.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""can you tell us some more I assume,""" start="00:43:02.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""about your background with Emacs development""" start="00:43:04.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""and programming in general,""" start="00:43:06.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""your professional work possibly?""" start="00:43:07.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, sure. Okay, I studied computer science""" start="00:43:11.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""at university. I started programming on a""" start="00:43:15.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Commodore 64. I started with BASIC and then I""" start="00:43:19.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""did a couple of versions of BASIC as a kid.""" start="00:43:23.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""But then really things took off when I""" start="00:43:27.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""started using GNU Linux.""" start="00:43:31.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""I can't remember which year,""" start="00:43:34.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe it was early 2000,""" start="00:43:35.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""something like that, late.""" start="00:43:38.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""No, it must've been before that actually,""" start="00:43:39.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""because I remember I was 14.""" start="00:43:42.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, okay, so let's say 1999,""" start="00:43:44.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""1998, somewhere there around.""" start="00:43:46.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""Then I started with Perl,""" start="00:43:48.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""and I did Perl for a good long while.""" start="00:43:50.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""I learned C++, I learned C,""" start="00:43:52.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""I did all kinds of stuff,""" start="00:43:55.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""and then I went to university,""" start="00:43:56.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""computer science, and I've been working,""" start="00:43:59.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, in various roles.""" start="00:44:01.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right now, I'm coding Python.""" start="00:44:04.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""Up until last Friday, I was writing firmware""" start="00:44:06.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""in C for a small microcontroller,""" start="00:44:09.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""which is pretty different than writing""" start="00:44:12.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Python, that's for sure.""" start="00:44:15.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""So yeah, so that's a little bit about me.""" start="00:44:17.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""I got interested in free software,""" start="00:44:19.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, also at a very young age.""" start="00:44:22.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""So, I mean, I've been following these,""" start="00:44:24.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, ideological discussions and""" start="00:44:26.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""debates, read all this stuff by Richard""" start="00:44:29.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Stallman and so on and so forth.""" start="00:44:31.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""But yeah, that's it. Great,""" start="00:44:33.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""thank you. I'll move on to the next question.""" start="00:44:37.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""You'll have to listen to me because if I""" start="00:44:41.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""start sharing my screen again,""" start="00:44:42.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""we're going to get some clicks.""" start="00:44:45.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""So the question. Do you think that 1 day""" start="00:44:48.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""there will be a native I'll start again,""" start="00:44:50.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""sorry. Do you think that 1 day there will be""" start="00:44:53.930" video="mainVideo-core" id="subtitle"]] +[[!template text="""a native... I'll start again,""" start="00:44:54.079" video="mainVideo-core" id="subtitle"]] +[[!template text="""sorry. Do you think that 1 day there will be""" start="00:44:54.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""a native graphical web browser in Emacs or is""" start="00:44:56.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""it kind of against its philosophy and""" start="00:44:59.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""architecture? So will we stick just with EWW""" start="00:45:00.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""and EAF or similar workaround tricks?""" start="00:45:04.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""So if, I don't know if people have seen,""" start="00:45:08.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""there is a talk by, I think,""" start="00:45:11.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""Perry Metzger, is that the name?""" start="00:45:13.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sorry if I got the name wrong.""" start="00:45:15.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""Perry Metzger, I think.""" start="00:45:17.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's like, he marks a text editor for the""" start="00:45:18.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""next 40 years. He makes an excellent point""" start="00:45:20.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""there that 1 of the things that we need to do""" start="00:45:22.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""is really get a proper HTML rendering in""" start="00:45:24.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs. It's like a dream at this point.""" start="00:45:27.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""No 1 is actively working on something like""" start="00:45:30.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""that. I think that, you know,""" start="00:45:32.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""there, first of all, you'd need to rewrite""" start="00:45:34.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""the display engine. So that's a big job.""" start="00:45:36.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""It is. I'm not saying,""" start="00:45:39.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, it can't be done,""" start="00:45:41.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""but you need to start there.""" start="00:45:43.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right? Second of all, you need to think""" start="00:45:44.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""about, you know, with all the Emacs Lisp code""" start="00:45:47.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""out there, is really assuming,""" start="00:45:50.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, 1 paradigm, which is that you have""" start="00:45:52.090" video="mainVideo-core" id="subtitle"]] +[[!template text="""a square, and basically you have columns and""" start="00:45:54.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""you have rows, and everything is in there,""" start="00:45:57.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""even images, is basically in a column,""" start="00:45:59.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, in a column on a row somewhere.""" start="00:46:02.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""Whereas, you know, when you just start doing""" start="00:46:05.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""the more web stuff and web rendering,""" start="00:46:07.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""you already have like a seaplane.""" start="00:46:10.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""You have different types of geometries that""" start="00:46:12.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""are possible. And what does it mean to go to""" start="00:46:14.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""the logical next line in that kind of sense?""" start="00:46:16.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean these types of things I'm not saying""" start="00:46:19.370" video="mainVideo-core" id="subtitle"]] +[[!template text="""it can't be done. I'm saying there are there""" start="00:46:21.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""are definitely some challenges there It would""" start="00:46:23.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""be amazing I mean, but we need someone with""" start="00:46:27.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, the inclination and talent I think""" start="00:46:30.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""to work on that's a job posting if I've ever""" start="00:46:33.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""had 1. So good luck to whoever's willing to""" start="00:46:37.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""apply for this 1. I think it's a tough 1.""" start="00:46:40.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""It is, yes. Go on. Okay,""" start="00:46:43.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""do you happen to have the questions in front""" start="00:46:46.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""of you? Can I just read them to you so that""" start="00:46:48.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""you can also have a feedback in front of you?""" start="00:46:50.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yes, I have the pad here.""" start="00:46:54.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""Okay, cool. So I'll read the next question""" start="00:46:57.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""and this way I don't have to worry too much""" start="00:46:58.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""about me butchering every word in the""" start="00:47:00.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""sentence. So, Emacs development and""" start="00:47:02.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""communication still is very much focused on""" start="00:47:04.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""email mailing lists. I like this,""" start="00:47:06.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""but what do you think about introducing other""" start="00:47:08.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""channels for talking to users,""" start="00:47:10.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""like the Emacs project community could set up""" start="00:47:12.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""a master on instance of its own,""" start="00:47:15.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""for instance? I think from the point of view""" start="00:47:17.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""of the Emacs core team,""" start="00:47:20.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""we don't really have a lot of resources or""" start="00:47:21.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""people inclined to be working on stuff like""" start="00:47:23.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""that. But I mean, there is so much going on.""" start="00:47:25.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs is a very, you know,""" start="00:47:27.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's a big community, frankly,""" start="00:47:30.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? So people working on emacs.com,""" start="00:47:32.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""there are people in the IRC channel,""" start="00:47:34.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""the emacs IRC channel,""" start="00:47:37.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""there's the emacs subreddit.""" start="00:47:39.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""And I mean, people are doing an incredible""" start="00:47:40.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""job. And I think if people wanna do more""" start="00:47:43.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""stuff like that, I mean,""" start="00:47:45.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""Don't wait for Argo, just go for it.""" start="00:47:46.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""Great. Moving on to the next question.""" start="00:47:52.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sorry, I'm not commenting anymore because we""" start="00:47:54.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""have so many questions and I'd love for you""" start="00:47:56.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""to answer as many people as possible because""" start="00:47:58.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""we have about 6 minutes technically,""" start="00:48:00.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""but we can go perhaps a little bit over.""" start="00:48:02.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""If you have the time, Stefan,""" start="00:48:05.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""though. Yeah. Okay, great.""" start="00:48:06.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""What are some features or packages you'd like""" start="00:48:09.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""to see developed by the community?""" start="00:48:11.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""We've already talked about the native HTTP""" start="00:48:12.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""display, but do you have any others?""" start="00:48:15.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""So, I mean, developed by the community,""" start="00:48:19.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""it depends what you mean.""" start="00:48:22.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""So do you mean sending stuff that people""" start="00:48:23.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""could be working on in general?""" start="00:48:27.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think for now, like let's say the roadmap,""" start="00:48:30.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'll just give some of the things that I""" start="00:48:33.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""think should happen right now and that I""" start="00:48:35.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""would love for people to send patches for.""" start="00:48:36.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's what I'm gonna be answering because""" start="00:48:39.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's what I think I can answer.""" start="00:48:41.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Tree-sitter is a new thing,""" start="00:48:43.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? Improving and working on new modes""" start="00:48:45.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""for, you know, TreeSitter,""" start="00:48:48.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's not very hard. I think many people get""" start="00:48:50.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""into it and make sure to integrate them in""" start="00:48:52.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs core. I think that would be,""" start="00:48:55.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, on my wishlist.""" start="00:48:58.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""The other thing that is that we've asked for""" start="00:49:00.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""someone perhaps with a little bit more""" start="00:49:01.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""experience, I think, but working on""" start="00:49:03.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""refactoring capabilities in Emacs and a more""" start="00:49:05.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""general framework, I think,""" start="00:49:09.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""for that. There are probably many more ideas""" start="00:49:11.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""that I could give people,""" start="00:49:13.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""but those would be the 2 big ones,""" start="00:49:15.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, that are also very uncontroversial.""" start="00:49:17.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's funny because for me,""" start="00:49:22.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""I don't think refactoring would count as a""" start="00:49:24.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""feature, but it's so vital to allowing""" start="00:49:26.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""further features to be developed.""" start="00:49:30.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""Otherwise, I remember the way Org Mode used""" start="00:49:31.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""to be before we had Org Element and stuff""" start="00:49:34.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""like this. It was really complicated to write""" start="00:49:36.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""any kind of parsing stuff for it.""" start="00:49:38.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""And now that we've got it,""" start="00:49:41.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""it just opened up a world of possibility""" start="00:49:42.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""where parsing an Org Mode file is just made""" start="00:49:44.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""so much easier. So I think that's a wonderful""" start="00:49:46.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""answer because it goes,""" start="00:49:48.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""it's multi-layered as you would expect from""" start="00:49:49.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""something that concerns the whole of Emacs.""" start="00:49:52.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""Moving on to the next question.""" start="00:49:55.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""What is the hardest decision being made""" start="00:49:57.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""within Emacs dev for the last 3 years.""" start="00:49:59.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm not sure, is it the decision in the last""" start="00:50:02.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""3 years or I'll let you interpret the""" start="00:50:04.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""question however you want.""" start="00:50:07.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""Okay, well, I'll say this.""" start="00:50:09.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""I started in August and I haven't had any""" start="00:50:11.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""really hard decisions so far.""" start="00:50:14.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""So good news. Maybe Eli will have more for""" start="00:50:16.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""the last 3 years. Keep it simple.""" start="00:50:20.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""Thanks. Cool. Next question.""" start="00:50:25.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Any plans to integrate XWM into core?""" start="00:50:28.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs is a really good Winters manager.""" start="00:50:31.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's super cool. I think EXWM is cool.""" start="00:50:34.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think they need to upgrade to Wayland""" start="00:50:38.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""somehow and that's not clear yet,""" start="00:50:40.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""but you know, we don't have any current plans""" start="00:50:41.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""to integrate it, no. Right,""" start="00:50:44.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""Next question. Do you think it is a good idea""" start="00:50:49.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""to choose Org Mode for writing documentation""" start="00:50:51.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""instead of tech info? I think that whatever""" start="00:50:53.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""we do, it should be the people that are""" start="00:50:57.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""working on the documentation that should make""" start="00:50:59.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""that choice. Currently we have,""" start="00:51:01.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, Modus themes and Org Mode itself is""" start="00:51:03.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""writing their documentation in Org Mode,""" start="00:51:05.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's fine by me. It has some drawbacks,""" start="00:51:08.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""it has some benefits, but most documentation""" start="00:51:10.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""is still in tech info.""" start="00:51:13.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""Maybe we'd need to replace that at some""" start="00:51:15.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""point, I don't know. But for now,""" start="00:51:17.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's what people know and use.""" start="00:51:19.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""And if you find that as a barrier to""" start="00:51:22.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""contribute to Emacs, I mean,""" start="00:51:24.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""just really write it as plain text.""" start="00:51:25.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""We'll be happy to help you with the markup.""" start="00:51:27.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's a little bit, you know,""" start="00:51:29.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""finicky and stuff like that.""" start="00:51:30.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""Great. Thanks for that.""" start="00:51:33.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Next question. What do you plan to work on in""" start="00:51:35.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs Core in the future?""" start="00:51:38.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm a little bit hesitant to reply to that.""" start="00:51:40.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""Of course I have ideas.""" start="00:51:42.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""Of course there are projects that I'm working""" start="00:51:43.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""on. However, if I say it here,""" start="00:51:45.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""I feel like, you know,""" start="00:51:47.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""then you'll hold me to it later and come ask,""" start="00:51:48.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""where is that feature?""" start="00:51:51.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""So I'll just say there is plenty of stuff""" start="00:51:52.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""that I'm working on, and if you want to know""" start="00:51:55.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""some of the stuff that I have been working""" start="00:51:57.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""on, check the Git log.""" start="00:51:58.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think that's just really as much as I want""" start="00:52:00.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""to say about that right now.""" start="00:52:02.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""You've added folks to just look at the path""" start="00:52:05.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""with the changelog and that's all you need.""" start="00:52:07.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""All right, moving on to the next question.""" start="00:52:11.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""What do you use Emacs for in your life other""" start="00:52:14.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""than working on Emacs itself?""" start="00:52:16.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Oh shit. So the big thing is programming,""" start="00:52:18.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? Now I work as a programmer.""" start="00:52:21.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""But in general, I use org mode heavily.""" start="00:52:27.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use it for all my writing.""" start="00:52:29.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use it to write, prepare this talk.""" start="00:52:30.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use it as a productivity system.""" start="00:52:33.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use it for emails. I use it as an RSS""" start="00:52:35.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""reader. I do most of my computing.""" start="00:52:41.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""I also have Firefox. So it's like Emacs and""" start="00:52:44.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""Firefox for some reason.""" start="00:52:47.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I do read documentation in Emacs as well in""" start="00:52:48.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""you, but yeah. Great. I'm still,""" start="00:52:51.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""I do very much the same thing with you.""" start="00:52:59.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""Like You've described exactly what I do.""" start="00:53:00.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""I work as a programmer,""" start="00:53:02.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use Augment for a lot of stuff,""" start="00:53:02.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""and I think that describes a whole lot of""" start="00:53:04.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""people currently watching the stream.""" start="00:53:06.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Moving on to the next question.""" start="00:53:09.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""What could we do in order to make Emacs more""" start="00:53:10.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""attractive for younger users?""" start="00:53:12.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""This is an amazing question and I feel wholly""" start="00:53:14.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""unprepared to answer this.""" start="00:53:18.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""Probably more introductory material aimed at""" start="00:53:21.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""that age group. What do you mean by younger""" start="00:53:24.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""users? You know what would be really cool if""" start="00:53:26.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""you had an Emacs for kids project?""" start="00:53:28.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""That would be amazing.""" start="00:53:31.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm not sure if that's what people are""" start="00:53:32.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""thinking about, but yeah,""" start="00:53:34.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""that's about what I can say for now.""" start="00:53:37.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""Good question. It is a very good question,""" start="00:53:40.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""like it comes back always to a key topic in""" start="00:53:43.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""EmacsConf, which is, how do we get more""" start="00:53:45.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""people to join us? Because it's a wonderful""" start="00:53:47.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""community. And how do we onboard people who""" start="00:53:49.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""are not programmers or people who are younger""" start="00:53:51.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""than the average Joe coming in those""" start="00:53:54.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""meetings? There's this Excellent article by""" start="00:53:57.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""Paul Graham, I think, where he was describing""" start="00:54:01.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""how they used Emacs as the sort of customer""" start="00:54:06.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""service system. They built the customer""" start="00:54:09.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""service system for the early days of Amazon""" start="00:54:11.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""in Emacs Lisp. And then they switched and all""" start="00:54:14.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""the employees were sad.""" start="00:54:17.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""So definitely there's more stuff that could""" start="00:54:18.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""be done in Emacs and be done better in Emacs.""" start="00:54:21.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""So for sure, if people want to explore more""" start="00:54:25.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""stuff like that, that's amazing.""" start="00:54:27.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah. And for people who weren't around""" start="00:54:29.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""earlier today, we've had a presentation about""" start="00:54:32.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""how to get computer science students to use""" start="00:54:33.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs and trying to provide as much""" start="00:54:36.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""information and as much tutorial as needed""" start="00:54:41.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""for them to understand what is the philosophy""" start="00:54:43.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""behind Emacs and how it influences the way""" start="00:54:45.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""you work and so forth.""" start="00:54:48.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""So you might want to revisit this discussion.""" start="00:54:49.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""And we also have plenty of talks talking""" start="00:54:51.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""about this issue. And I can just add that I""" start="00:54:53.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""think it's very important for us as a""" start="00:54:57.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""community to just be enthusiastic to get more""" start="00:55:00.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""people involved. Because I mean,""" start="00:55:03.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""look, there's this meme where it's like,""" start="00:55:04.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use Arch Linux, by the way,""" start="00:55:06.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""I use Arch, by the way.""" start="00:55:08.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""And for some reason, people using Arch keep""" start="00:55:10.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""telling you that they're using Arch.""" start="00:55:12.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""That's fine. Use whatever you want.""" start="00:55:14.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's free software, I don't care.""" start="00:55:16.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think if you look at Vim users,""" start="00:55:20.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""they're very almost militant,""" start="00:55:21.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""oh, we're Vim, and Vim is the thing.""" start="00:55:23.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""And Emacs users sometimes,""" start="00:55:25.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""and it's fine. We take a bit of a more""" start="00:55:27.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""laid-back approach. We're like,""" start="00:55:29.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""yeah, I use Emacs, you use Vim,""" start="00:55:31.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""whatever. And that's fine.""" start="00:55:32.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, that's the correct approach,""" start="00:55:35.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think. You should respect what people want""" start="00:55:36.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""to use. I don't care that people use VS Code""" start="00:55:38.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""or whatever. I'm not going to use that""" start="00:55:40.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""because it's too limiting.""" start="00:55:42.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's not really a workable environment.""" start="00:55:43.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I think it's OK to be enthusiastic.""" start="00:55:46.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think it's okay to talk about that type of""" start="00:55:48.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""enthusiasm and anything that can help""" start="00:55:51.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""increase the enthusiasm around Emacs can only""" start="00:55:54.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""help the longevity of Emacs.""" start="00:55:56.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""I agree and that's also 1 of the key""" start="00:56:02.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""objectives of EmacsConf.""" start="00:56:04.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's about bringing a lot of amazing people""" start="00:56:05.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""to come talk, like you,""" start="00:56:07.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""about stuff that is very dear to you.""" start="00:56:09.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it's very tangible how much you care,""" start="00:56:11.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""all of you, about what you're presenting.""" start="00:56:14.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""And it's amazing to put all of you people on""" start="00:56:15.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""just 48 hours talking about all of this and""" start="00:56:18.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""then creating so much content for people to""" start="00:56:20.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""watch. And I think it's really helping the""" start="00:56:22.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""enthusiasm to live on and to gather a little""" start="00:56:24.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""more snow as it comes down.""" start="00:56:28.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, I watch you Max Conf every year.""" start="00:56:29.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think it's a lot of fun.""" start="00:56:31.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""Thank you. I'll take the compliment for""" start="00:56:34.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""everyone else in the team.""" start="00:56:37.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""We're going to go a little bit longer with""" start="00:56:39.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""the Q&A because we still have a lot of""" start="00:56:41.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""questions and if Stéphane is still willing to""" start="00:56:42.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""answer, I'm still willing to not go too bad""" start="00:56:44.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""to hear a lot more of it.""" start="00:56:48.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, for me it's fine.""" start="00:56:49.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""I have time. Great. So I think I've done this""" start="00:56:50.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""question. So, all right.""" start="00:56:55.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""How are we going to make sure that a cool""" start="00:56:58.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""idea is going to pass it through for the next""" start="00:57:00.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""generation, let's say 20 years later,""" start="00:57:01.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""the generation still have the good knowledge""" start="00:57:04.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""we have today. Yeah, so I mean,""" start="00:57:05.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""if you think about what does EMAX need to""" start="00:57:09.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""have staying power, so in general,""" start="00:57:12.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""they say, you know, if if when you start a""" start="00:57:15.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""company, if you have a company for 1 year,""" start="00:57:17.020" video="mainVideo-core" id="subtitle"]] +[[!template text="""then in all likelihood,""" start="00:57:19.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""you're going to have it for 2 years because,""" start="00:57:20.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, it's just so if you've had Emacs""" start="00:57:21.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""for 4 years, I'm saying that we're going to""" start="00:57:23.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""have Emacs for the next 4 years as well.""" start="00:57:25.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""Just based on that, I'm not sure the logic""" start="00:57:27.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""holds up, but you know,""" start="00:57:30.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""how does Emacs stay relevant?""" start="00:57:32.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think is the question.""" start="00:57:34.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Well, I think we need to continue working on""" start="00:57:35.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""all the types of exploratory work that people""" start="00:57:38.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""are doing in the community.""" start="00:57:41.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think there is fundamental stuff that needs""" start="00:57:43.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""to be done. I mean, if people want to work""" start="00:57:45.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""on, you know, web rendering and Emacs,""" start="00:57:47.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe that's the next,""" start="00:57:49.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, revolutionary step that we need""" start="00:57:50.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""that could, you know, really showcase what""" start="00:57:53.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs, you know, as, you know,""" start="00:57:55.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""an idea, even if not Emacs as a software""" start="00:57:57.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""could be and, you know,""" start="00:58:00.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""Because there is huge potential in the idea""" start="00:58:01.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""as such. So maybe that's something.""" start="00:58:05.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I mean, from the point of view of core""" start="00:58:07.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""development, I think we need to just continue""" start="00:58:09.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""working on the fundamental technologies.""" start="00:58:11.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""1 thing that I would like to eventually see""" start="00:58:15.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""is a better garbage collector.""" start="00:58:17.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""We've talked about that for a long time,""" start="00:58:19.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""but I mean, we need someone to do the job""" start="00:58:22.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""really. It's not very easy.""" start="00:58:25.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's very hard, actually.""" start="00:58:27.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""So just continues working on stuff like that,""" start="00:58:31.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""continue with the exploration,""" start="00:58:34.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""continue using and being excited about Emacs.""" start="00:58:35.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think that's the best guarantee that we""" start="00:58:40.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""have. Yeah, and perhaps to echo something""" start="00:58:43.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""that you said earlier,""" start="00:58:45.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""the tools that you're using,""" start="00:58:46.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""like the emails, they've been around forever,""" start="00:58:47.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""they will be around forever.""" start="00:58:49.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""This pragmatic stance on the tools that""" start="00:58:51.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""you're using, they might look stayed from the""" start="00:58:53.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""outside, but ultimately they are what permits""" start="00:58:56.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""a sense of longevity to any kind of project""" start="00:58:59.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""you embark upon. Also,""" start="00:59:03.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""in a sense, I think that the expectations""" start="00:59:05.460" video="mainVideo-core" id="subtitle"]] +[[!template text="""might be changing in the sense that,""" start="00:59:07.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, when I started using GNU Linux,""" start="00:59:09.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know what the first thing I did was,""" start="00:59:12.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""because I couldn't get Xorg to run.""" start="00:59:15.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""So the first thing you had to do was you had""" start="00:59:16.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""to compile your own Linux kernel.""" start="00:59:19.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""So you sit there and make manuconfig and""" start="00:59:20.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""you'll like, try to read it and you've never""" start="00:59:22.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""done anything like this before.""" start="00:59:24.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""You know, I was just a kid.""" start="00:59:26.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""I had never been at this kind of,""" start="00:59:27.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, whatever. So I had to start with""" start="00:59:29.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""that. And then you have to write the X or""" start="00:59:31.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""configuration file. And I had the patience""" start="00:59:34.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""for that. But nowadays,""" start="00:59:36.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""people have different expectations.""" start="00:59:37.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""You just install something,""" start="00:59:38.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""and it works. And we need to keep that in""" start="00:59:40.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""mind as well. So that's why I keep pushing as""" start="00:59:42.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""1 of my big things. We need to build a more""" start="00:59:45.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""cohesive experience out of the box.""" start="00:59:48.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""Of course, that can be customizable.""" start="00:59:51.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""You shouldn't shoehorn anything in just for""" start="00:59:52.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""the sake of it. But you could get some things""" start="00:59:55.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""a little bit more for free.""" start="00:59:58.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""And maybe some of us that have our own""" start="01:00:01.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""configs and we've been doing this for you""" start="01:00:03.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""know, 2, 05:10, even 20 years,""" start="01:00:04.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""we could also see, you know,""" start="01:00:08.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""from the point of view of a new user that""" start="01:00:09.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""just installs VS Code and then they click,""" start="01:00:11.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""yes I use Python, yes I use that,""" start="01:00:13.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""and then it just automatically works.""" start="01:00:15.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""You know what I mean? I mean,""" start="01:00:19.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""then could we get closer to that perhaps a""" start="01:00:20.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""little bit? I think that would also help.""" start="01:00:24.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, I think that's what we call the""" start="01:00:26.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""configuration wizard. And we were talking""" start="01:00:28.700" video="mainVideo-core" id="subtitle"]] +[[!template text="""about this, I think, a couple of years ago at""" start="01:00:30.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""EmacsConf. I can't remember if it was with""" start="01:00:32.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""Adam in the chat. Adam,""" start="01:00:34.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean Alpha Papa, or if it was with Bastien,""" start="01:00:35.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""but I remember the idea cropping off.""" start="01:00:38.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Like, it's either you get a tutorial for""" start="01:00:40.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs, a proper tutorial,""" start="01:00:42.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""or you get a wizard, or you get both,""" start="01:00:43.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""and then all is right for the world.""" start="01:00:45.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""But definitely cool ideas being evoked.""" start="01:00:47.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm gonna say I need to decree the time when""" start="01:00:50.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""we finish because for me it is 11.15""" start="01:00:52.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""p.m. And I think my co-organizers are also""" start="01:00:55.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""willing to end the day and go rest because""" start="01:00:59.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""we've got another day to go tomorrow.""" start="01:01:01.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""So how about we take 3 minutes and 30 seconds""" start="01:01:03.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""to try to answer a little bit more succinctly""" start="01:01:06.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""the questions we've got left.""" start="01:01:08.560" video="mainVideo-core" id="subtitle"]] +[[!template text="""How does that sound, Stefan?""" start="01:01:09.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sounds great. Cool, so I'll start reading the""" start="01:01:11.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""questions then that we've got left.""" start="01:01:15.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""So this 1 we've got. If you're willing to""" start="01:01:18.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""discuss it, what do you think about the""" start="01:01:20.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""recent controversy about use of CLLib in""" start="01:01:22.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs call code? Am I willing to discuss""" start="01:01:24.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""that? I have said my opinion on Emacs,""" start="01:01:29.980" video="mainVideo-core" id="subtitle"]] +[[!template text="""Devel, I think. And I think I understand,""" start="01:01:36.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, the viewpoints of both sides in that""" start="01:01:40.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""discussion. It is true that some things,""" start="01:01:44.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, we have to think about that.""" start="01:01:46.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""There is a real problem,""" start="01:01:49.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think, when we have 3 different APIs for""" start="01:01:50.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""doing the same thing in Emacs.""" start="01:01:53.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""And can we make that a little bit better?""" start="01:01:55.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, perhaps we could,""" start="01:01:57.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""right? So that's about as much as I'd like to""" start="01:01:59.760" video="mainVideo-core" id="subtitle"]] +[[!template text="""say. Fair enough. I would have also accepted""" start="01:02:04.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""that CL loops are ugly to write and they""" start="01:02:06.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""don't feel very lispy.""" start="01:02:09.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""But I'll take your answer as well.""" start="01:02:10.320" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, some people think that.""" start="01:02:13.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""I understand that position as well.""" start="01:02:15.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right. Okay, next question.""" start="01:02:19.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""When we find a bug in our Emacs,""" start="01:02:21.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""do we need to try to replicate it on our side""" start="01:02:23.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""version, on our SID version,""" start="01:02:25.200" video="mainVideo-core" id="subtitle"]] +[[!template text="""sorry, then update all the usual list package""" start="01:02:26.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""we use, and if we succeed to replicate the""" start="01:02:29.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""bug in this version, only then go to""" start="01:02:31.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""development version 30 and do the same.""" start="01:02:33.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Then only ask for assistance in reporting the""" start="01:02:35.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""bug we found. So I believe when they""" start="01:02:37.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""encounter a bug, are people supposed to go to""" start="01:02:40.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""master to pull main and just to make sure""" start="01:02:43.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""that they are on the latest version.""" start="01:02:47.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""Is this something that you require?""" start="01:02:48.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""We don't require that,""" start="01:02:50.660" video="mainVideo-core" id="subtitle"]] +[[!template text="""but we do try to encourage you to reproduce""" start="01:02:51.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""it on master if we think that it matters.""" start="01:02:54.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, so if you can, that's even better.""" start="01:02:57.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""But if the bug is there in Emacs 29,""" start="01:03:01.620" video="mainVideo-core" id="subtitle"]] +[[!template text="""maybe we want to fix it in Emacs 29.2.""" start="01:03:03.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""So the latest point release is also fine.""" start="01:03:06.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Bugs in Emacs 28 at this point,""" start="01:03:10.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""like the previous major version,""" start="01:03:12.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""we might ask you to try to reproduce it on""" start="01:03:15.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs 29 because we're not planning more""" start="01:03:17.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""releases of old major versions.""" start="01:03:19.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""So that's the fundamental reason for that.""" start="01:03:21.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""Great. Thank you for your answer.""" start="01:03:24.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""All right. Moving on to the next question.""" start="01:03:25.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""On branching off sub-threads,""" start="01:03:27.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I note that they are less visible compared to""" start="01:03:29.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""starting a new thread in practice.""" start="01:03:31.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I am wondering if it is just my impression or""" start="01:03:33.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""something devs also observe.""" start="01:03:35.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, it's true. That's correct.""" start="01:03:37.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""I don't know what to do about it.""" start="01:03:41.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""If you want more visibility,""" start="01:03:42.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""I guess just start a new thread.""" start="01:03:44.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""I don't know. I can only agree,""" start="01:03:47.080" video="mainVideo-core" id="subtitle"]] +[[!template text="""really. I concur. That's true.""" start="01:03:48.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""Okay. Next question. What about rewriting""" start="01:03:51.720" video="mainVideo-core" id="subtitle"]] +[[!template text="""Emacs in Rust? Use Guile instead of Elisp.""" start="01:03:54.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""Multi-threaded Emacs. Make Emacs prettier and""" start="01:03:57.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""shiny. And of course, same defaults.""" start="01:03:59.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""Just kidding. We are spoiled children because""" start="01:04:02.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""you and Eli, Lars, and etc do an impressive""" start="01:04:04.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""work. I live in Emacs since 2001.""" start="01:04:08.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""Thanks. That was a good 1.""" start="01:04:11.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""Sane defaults. Okay, Well,""" start="01:04:14.220" video="mainVideo-core" id="subtitle"]] +[[!template text="""thank you. Thanks for that comment.""" start="01:04:18.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""That made me chuckle. Next question by the""" start="01:04:20.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""same person, I assume.""" start="01:04:23.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""The only downside I see with copyright""" start="01:04:24.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""assignment is that 1 has to disclose their""" start="01:04:26.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""real identity. Would it be a possibility to""" start="01:04:28.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""assign a copyright under a nickname?""" start="01:04:31.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, you don't have to say a real name.""" start="01:04:33.160" video="mainVideo-core" id="subtitle"]] +[[!template text="""Just register some pseudonym.""" start="01:04:34.840" video="mainVideo-core" id="subtitle"]] +[[!template text="""The FSF does need your real name,""" start="01:04:37.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""but that's kept private only.""" start="01:04:39.440" video="mainVideo-core" id="subtitle"]] +[[!template text="""So feel free to reach out to assign at""" start="01:04:41.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""gnu.org and ask more about that.""" start="01:04:45.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""Right. All right, next question.""" start="01:04:49.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""Do you think it is possible to reach an""" start="01:04:51.820" video="mainVideo-core" id="subtitle"]] +[[!template text="""agreement on sane defaults for better""" start="01:04:53.400" video="mainVideo-core" id="subtitle"]] +[[!template text="""out-of-the-box experience?""" start="01:04:55.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""Yeah, so your sane is not my sane""" start="01:04:57.800" video="mainVideo-core" id="subtitle"]] +[[!template text="""necessarily. So that's the fundamental""" start="01:05:00.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""problem that we're discussing here.""" start="01:05:01.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""I think it's a social,""" start="01:05:02.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""not a technical problem.""" start="01:05:03.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""We do change defaults sometimes,""" start="01:05:05.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""but I mean, there is also some staying power.""" start="01:05:07.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""So it's understandable that,""" start="01:05:09.880" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, it's, we can't just change them""" start="01:05:12.260" video="mainVideo-core" id="subtitle"]] +[[!template text="""willy nilly and then flip flop between,""" start="01:05:13.940" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, 1 or the other kind of thing.""" start="01:05:15.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""So it does take a little bit more time.""" start="01:05:18.340" video="mainVideo-core" id="subtitle"]] +[[!template text="""But yeah, sure, we can.""" start="01:05:20.060" video="mainVideo-core" id="subtitle"]] +[[!template text="""We do change defaults at times.""" start="01:05:23.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""But it's perhaps more slower than what some""" start="01:05:26.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""people would prefer, for sure.""" start="01:05:29.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""So that's, yeah. Right,""" start="01:05:31.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""all right. We have 2 more questions.""" start="01:05:36.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""So will XWidgets have a future?""" start="01:05:37.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""Seeing the new bugs popping up in the latest""" start="01:05:40.120" video="mainVideo-core" id="subtitle"]] +[[!template text="""XWidget dev. Not sure if there was the rest""" start="01:05:42.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""of the question, But on XWidgets,""" start="01:05:45.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""can you tell us a little more?""" start="01:05:46.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""I'm not really following now.""" start="01:05:48.740" video="mainVideo-core" id="subtitle"]] +[[!template text="""I mean, I'm not seeing a lot of development""" start="01:05:50.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""on XWidgets currently.""" start="01:05:52.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""Some people have done work in fixing up a few""" start="01:05:54.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""bugs, but I think that feature really needs""" start="01:05:57.100" video="mainVideo-core" id="subtitle"]] +[[!template text="""more love. So I think we need,""" start="01:06:00.380" video="mainVideo-core" id="subtitle"]] +[[!template text="""you know, help is welcome,""" start="01:06:02.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""patch is welcome. That's what I can say about""" start="01:06:03.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""that. All right, and our final question of""" start="01:06:05.920" video="mainVideo-core" id="subtitle"]] +[[!template text="""the day. Have you voted for Emacs as the""" start="01:06:11.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""software of the year on the Tuxes by Jupyter""" start="01:06:13.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""Broadcasting? I did because Emacs 29 is""" start="01:06:15.140" video="mainVideo-core" id="subtitle"]] +[[!template text="""great. Thank you. Okay,""" start="01:06:17.480" video="mainVideo-core" id="subtitle"]] +[[!template text="""well, good job voting.""" start="01:06:19.300" video="mainVideo-core" id="subtitle"]] +[[!template text="""I didn't know, I don't know what Tuxy is on""" start="01:06:20.580" video="mainVideo-core" id="subtitle"]] +[[!template text="""Jupyter broadcasting, but look it up and go""" start="01:06:22.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""vote. So I wish I could tell you,""" start="01:06:25.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""I assume with Tux, it might be something""" start="01:06:28.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""related to Linux, but that's as much as I can""" start="01:06:29.500" video="mainVideo-core" id="subtitle"]] +[[!template text="""say. All right, well, Stefan,""" start="01:06:32.900" video="mainVideo-core" id="subtitle"]] +[[!template text="""thank you so much for taking the time not""" start="01:06:34.960" video="mainVideo-core" id="subtitle"]] +[[!template text="""only to do a wonderful presentation,""" start="01:06:36.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""but also for answering all the questions of""" start="01:06:38.000" video="mainVideo-core" id="subtitle"]] +[[!template text="""the community. Do you have anything else to""" start="01:06:39.640" video="mainVideo-core" id="subtitle"]] +[[!template text="""add? Just really thanks for all the questions""" start="01:06:41.240" video="mainVideo-core" id="subtitle"]] +[[!template text="""and thanks for staying.""" start="01:06:45.360" video="mainVideo-core" id="subtitle"]] +[[!template text="""It's been a long day, a long conference,""" start="01:06:47.780" video="mainVideo-core" id="subtitle"]] +[[!template text="""so thanks for staying and listening to my""" start="01:06:49.600" video="mainVideo-core" id="subtitle"]] +[[!template text="""talk as well. Really appreciate it.""" start="01:06:51.180" video="mainVideo-core" id="subtitle"]] +[[!template text="""Appreciate the good work you guys are doing""" start="01:06:52.540" video="mainVideo-core" id="subtitle"]] +[[!template text="""behind the scenes, organizing,""" start="01:06:54.280" video="mainVideo-core" id="subtitle"]] +[[!template text="""setting everything up.""" start="01:06:55.520" video="mainVideo-core" id="subtitle"]] +[[!template text="""And really humbled to be a part of this""" start="01:06:57.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""community. So thank you all.""" start="01:07:00.420" video="mainVideo-core" id="subtitle"]] +[[!template text="""Well I can assure you that no 1 either in the""" start="01:07:02.680" video="mainVideo-core" id="subtitle"]] +[[!template text="""organization team or the people watching now""" start="01:07:05.860" video="mainVideo-core" id="subtitle"]] +[[!template text="""felt like it was tiring to stay and listen to""" start="01:07:08.040" video="mainVideo-core" id="subtitle"]] +[[!template text="""your answers. So thank you so much Stefan.""" start="01:07:10.900" video="mainVideo-core" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20core%3A%20Emacs%20core%20development%3A%20how%20it%20works) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/core-before.md b/2023/info/core-before.md new file mode 100644 index 00000000..dfa57577 --- /dev/null +++ b/2023/info/core-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 68-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="core-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:07:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/m4XmrmE9Geat54AKT1RQaH">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/core-nav.md b/2023/info/core-nav.md new file mode 100644 index 00000000..57508c7e --- /dev/null +++ b/2023/info/core-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/devel">Emacs development updates</a> +Next by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/cubing-after.md b/2023/info/cubing-after.md new file mode 100644 index 00000000..dae3e345 --- /dev/null +++ b/2023/info/cubing-after.md @@ -0,0 +1,310 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="cubing-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""Hello, everyone, and welcome to Speedcubing in Emacs.""" start="00:00:00.000" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""First of all, a little bit about myself.""" start="00:00:08.360" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""My name is Vasilij Schneidermann. Online, I go by wasamasa.""" start="00:00:10.120" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I'm 31 years old. I work in information security,""" start="00:00:13.680" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and I do consulting and hacking""" start="00:00:18.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and stuff like figuring out""" start="00:00:20.480" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""how to break into other people's computers""" start="00:00:22.480" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and how to secure their systems basically.""" start="00:00:25.280" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""You can reach me by email.""" start="00:00:29.360" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I do have a self-hosted code repository thingy going on.""" start="00:00:31.440" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I have a blog, and you can find me""" start="00:00:36.640" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""in some other places online, like IRC for example.""" start="00:00:40.400" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So about the talk itself,""" start="00:00:45.920" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I used to be into the Rubik's cube when I was in school.""" start="00:00:48.680" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I forgot about it, though,""" start="00:00:52.840" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""because these cubes were not very good.""" start="00:00:54.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Recently I did find some cheap looking cube at a shop.""" start="00:00:56.280" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Did not pay terribly much for it.""" start="00:01:02.280" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It was so, so much better than my old cube,""" start="00:01:04.120" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""it was unreal.""" start="00:01:07.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""This motivated me to get back into""" start="00:01:08.640" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""this really weird kind of hobby.""" start="00:01:11.480" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this, you need to be good at producing""" start="00:01:13.560" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""a truly random scramble""" start="00:01:18.000" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and timing your attempts to get any better at it.""" start="00:01:19.400" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""There is, of course, existing software""" start="00:01:22.320" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to do the scrambling for you and the recording""" start="00:01:23.720" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and the timekeeping and such,""" start="00:01:26.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but all the good options seem to be either web or mobile,""" start="00:01:28.080" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""for example the cstimer software""" start="00:01:31.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""or the twisty-timer app on Android.""" start="00:01:33.240" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Cubing in Emacs""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""To my surprise, I did not find a single decent option""" start="00:01:35.400" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""inside Emacs, so this is basically a case study""" start="00:01:39.320" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""how to do better. For this, I wanted to make use of""" start="00:01:41.960" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""all the cool new Emacs features that appeared,""" start="00:01:45.000" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""like the SVG library; Transient,""" start="00:01:47.800" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""the library used for the Magit-style interfaces;""" start="00:01:50.880" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and the recently added sqlite-mode.""" start="00:01:53.600" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And most importantly it was about having fun.""" start="00:01:56.440" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Prior art""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""So here's a full list of prior art,""" start="00:02:01.160" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I will not go into detail about this,""" start="00:02:02.760" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but basically we have things solving""" start="00:02:04.280" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""very different parts of this,""" start="00:02:06.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but not all of it. For example: we have several,""" start="00:02:08.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""we have a timer. We have several solvers.""" start="00:02:10.760" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""We have some scramblers.""" start="00:02:14.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""We have some whole-cube simulators, including a 3D one.""" start="00:02:16.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""We have something for making it easier""" start="00:02:19.360" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to enter your algorithms in the notation.""" start="00:02:20.760" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""But nothing that does all of those things in one package,""" start="00:02:23.120" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""which kind of surprised me.""" start="00:02:25.920" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So I present the `wca-prep` package.""" start="00:02:28.120" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""The name""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""So the name, I found it difficult""" start="00:02:32.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to come up with a good name and so I looked""" start="00:02:35.560" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and I saw, well there's this World Cube Association""" start="00:02:39.960" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that holds these competitions where you compete.""" start="00:02:42.560" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""They do this for the Rubik's cube""" start="00:02:46.040" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but also a few others,""" start="00:02:47.760" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so there's like a standardized list""" start="00:02:48.920" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""of events they have for this.""" start="00:02:50.800" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""There is a standard notation for this""" start="00:02:52.640" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and rules and everything.""" start="00:02:55.160" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And the goal of my package is basically""" start="00:02:56.520" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to help prepare myself for such a competition""" start="00:02:58.200" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and in fact a week ago I went to my first one""" start="00:03:01.280" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""which was wild, but pretty cool.""" start="00:03:03.680" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So for this reason I chose this name wca-prep,""" start="00:03:06.720" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""because it helps me prepare for this kind of competition""" start="00:03:10.920" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and this limited the scope significantly,""" start="00:03:13.640" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""What's in wca-prep""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""I have a scrambler, visualization of the scramble,""" start="00:03:16.520" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""timer, and statistics.""" start="00:03:19.000" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I excluded pretty much everything else I've seen.""" start="00:03:23.320" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this reason, I only tried to focus on""" start="00:03:25.560" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""some very basic puzzles I can solve comfortably,""" start="00:03:28.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and did not want to do anything else""" start="00:03:32.200" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that may complicate things significantly.""" start="00:03:34.840" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""No other kinds of puzzles, no simulation, no solving,""" start="00:03:36.440" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""no exotic events, and no specialized scrambles""" start="00:03:40.480" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that are only good for practicing specific algorithms.""" start="00:03:43.920" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""So at this point the organizer should hopefully show""" start="00:03:49.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""a small video I've prepared, a one minute video showing how""" start="00:03:54.200" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I actually use this to solve a cube and to time my solve.""" start="00:03:58.000" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Challenges: Representing the cube""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""Okay, so building this thing, there were several challenges.""" start="00:05:15.240" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""The first one was how do I even represent""" start="00:05:18.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""the state of a Rubik's cube.""" start="00:05:20.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this there are many possible representations,""" start="00:05:22.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""no obvious best solution.""" start="00:05:25.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I did not, well, what helped me was that""" start="00:05:27.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I did not have to programmatically solve this thing,""" start="00:05:29.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so I picked the easiest possible representation""" start="00:05:31.989" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""which is just an array of every single facelet.""" start="00:05:35.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For a 3x3 cube you have 9 facelets on one side,""" start="00:05:38.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so times 6 sides you would have 54 elements in this array.""" start="00:05:42.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So with this representation, it's very simple,""" start="00:05:47.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but it's kind of weird to do scrambles with this.""" start="00:05:49.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""But otherwise, it worked very, very well.""" start="00:05:52.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""In the future, I plan to learn some group theory,""" start="00:05:54.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""pick a better representation""" start="00:05:57.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and do this in a much, much more elegant way""" start="00:05:58.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""without compromising speed too much.""" start="00:06:01.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Yes. Once I had the representation,""" start="00:06:07.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""the scrambling itself should not be too hard.""" start="00:06:10.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this, it's important to consider that basically""" start="00:06:13.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""if you do a face turn""" start="00:06:17.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""you end up swapping some facelets with other facelets,""" start="00:06:19.149" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that's the easiest way to think about this.""" start="00:06:22.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""To determine which one goes into which one's position,""" start="00:06:26.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""it was pretty confusing to figure this out.""" start="00:06:29.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this I went through a few papers,""" start="00:06:32.471" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and I found one which suggested""" start="00:06:34.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to just build a cube out of paper,""" start="00:06:36.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""number every facelet, and turn it""" start="00:06:37.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and keep track of which facelet moved into which position.""" start="00:06:40.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And programmatically, the `cl-rotatef` macro""" start="00:06:44.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""was very, very useful for doing this kind of""" start="00:06:47.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""in-place swapping you need for this operation.""" start="00:06:49.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So in the future, group theory would hopefully""" start="00:06:51.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""make this a bit less awkward.""" start="00:06:54.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Here's a photo of this paper cube I made""" start="00:06:57.989" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""along with a real cube. As you can see""" start="00:07:00.109" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""mathematically speaking, they are the same thing,""" start="00:07:03.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""they just look very, very different.""" start="00:07:07.349" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Scrambling""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""So the scramble algorithm itself,""" start="00:07:09.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I pondered how this would even be done. In the competitions,""" start="00:07:14.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""They do this in a very, very elaborate way.""" start="00:07:19.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""They generate a random cube,""" start="00:07:21.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""they try to solve it, and if it's solvable""" start="00:07:22.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""they use these solution moves""" start="00:07:25.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to turn into a scramble basically.""" start="00:07:28.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And they also make sure to canonicalize the moves,""" start="00:07:30.829" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so if you have subsequent moves that can be simplified,""" start="00:07:34.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""they do simplify these as much as possible.""" start="00:07:38.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For example,""" start="00:07:40.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""if you have two subsequent rotations in one direction,""" start="00:07:41.229" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""it's turned into a different kind of rotation,""" start="00:07:43.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so 90 and 90 equals 180.""" start="00:07:46.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And the other Elisp scramblers I looked at,""" start="00:07:49.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""they generate random moves.""" start="00:07:53.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Some of them do canonicalize. Not all of them.""" start="00:07:55.109" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""This one tries to do the best low-fi thing,""" start="00:07:57.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that is, generating random moves,""" start="00:08:00.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""canonicalizing and repeating""" start="00:08:02.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""until enough have been generated.""" start="00:08:04.029" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Visualization""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""For the visualization I had to figure out""" start="00:08:09.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""something else too complicated.""" start="00:08:13.149" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For this, I tried to figure out""" start="00:08:14.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""where every facelift would end up in the puzzle view""" start="00:08:17.229" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""when you would unfold it.""" start="00:08:19.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And for this, I did not consider the facelet orientation.""" start="00:08:21.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""This may be important later for some other puzzles""" start="00:08:25.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""where you can end up with very twisted faces,""" start="00:08:29.269" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but for simple cubes, it's not a problem.""" start="00:08:31.149" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""My initial prototype used colored text,""" start="00:08:33.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but later, I used the SVG library.""" start="00:08:36.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It turned out to be easy enough to use, actually.""" start="00:08:38.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Currently, I have hard-coded face-color mappings,""" start="00:08:41.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but I plan to replace this so that theming is possible.""" start="00:08:46.109" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""For example, if you happen to have a cube""" start="00:08:49.109" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that does not have the same color mappings as I do,""" start="00:08:51.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""then you should be able to fix this.""" start="00:08:54.690" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""UI with Transient""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""Next challenge was to build""" start="00:08:56.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""a beautiful intuitive UI with Transient.""" start="00:09:01.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""The reason why I chose this is""" start="00:09:03.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""because it would be self-documenting and Magit-style,""" start="00:09:06.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and everyone knows how Magit works basically.""" start="00:09:10.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Since Transient has become part of Emacs,""" start="00:09:12.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""there is really no reason to not try it out.""" start="00:09:15.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""The problem was documentation is difficult to understand.""" start="00:09:17.229" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It's very abstract and high level,""" start="00:09:21.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and it's hard to figure out. "Okay,""" start="00:09:23.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I want to do something,""" start="00:09:25.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""how am I supposed to do this?"""" start="00:09:26.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I did find transient-showcase, which has lots of examples,""" start="00:09:28.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but they don't really feel finished""" start="00:09:33.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and not realistic enough.""" start="00:09:35.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""When I tried to use the package,""" start="00:09:39.069" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I got plenty of unhelpful error messages""" start="00:09:40.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""when using it incorrectly.""" start="00:09:42.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I did manage to figure it out,""" start="00:09:44.109" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but I plan to find more actual examples of it,""" start="00:09:45.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""to have an executable reference basically""" start="00:09:50.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and try to improve my use of it.""" start="00:09:53.429" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Book-keeping with SQLite""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""For the book-keeping, I used SQLite.""" start="00:09:55.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""This is a very recent addition to Emacs,""" start="00:10:01.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""it only appeared in the current major version.""" start="00:10:04.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It's still very early days.""" start="00:10:07.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I found some oddities, one of them turned out to be""" start="00:10:09.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""a bug in the transaction macro.""" start="00:10:13.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Like basically, if you do an SQL transaction""" start="00:10:14.829" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and an error happens, then every helper I found""" start="00:10:17.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""does a rollback on an error.""" start="00:10:20.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""But this one did not. It actually committed on an error,""" start="00:10:20.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and this was very weird to figure out.""" start="00:10:26.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I reported a bug. Eli was nice enough to send me a patch.""" start="00:10:29.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""We did some patch review,""" start="00:10:34.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and he ended up fixing it properly.""" start="00:10:35.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So yes, there's still a lot to be done there, and yeah,""" start="00:10:37.989" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""the API is very basic.""" start="00:10:45.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""You don't have convenience helpers""" start="00:10:46.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""like fetch the first row or fetch the first value""" start="00:10:48.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""or anything, but they're easy enough to write yourself.""" start="00:10:51.309" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And the biggest challenge with this bookkeeping part""" start="00:10:54.430" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""was figuring out a decent schema,""" start="00:10:56.370" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""like how to organize data correctly""" start="00:10:58.029" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""so that it would not be awkward to manipulate.""" start="00:11:00.149" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And with this, you can finally build a package""" start="00:11:02.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that remembers its state properly""" start="00:11:05.749" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and don't have to run into foot guns""" start="00:11:07.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""with Lisp-style serialization, deserialization.""" start="00:11:10.469" video="mainVideo-cubing" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]] + +[[!template text="""So yes, that concludes it so far.""" start="00:11:12.629" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So what did I learn from this exercise?""" start="00:11:18.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Well, there are still plenty of packages""" start="00:11:22.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""for Emacs to be written.""" start="00:11:24.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""If you think everything you can think of""" start="00:11:25.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""or you need has already been written, well, guess what?""" start="00:11:28.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""No.""" start="00:11:31.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""These are still plenty of specialized things""" start="00:11:31.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""that could need your help.""" start="00:11:34.045" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""These cubes do not require advanced mathematics,""" start="00:11:36.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""contrary to what you may think.""" start="00:11:39.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Yes, you can apply advanced mathematics to them""" start="00:11:41.149" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""if you want to, but you don't have to.""" start="00:11:44.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""What surprised me about this is basically group theory.""" start="00:11:47.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I've heard of it before.""" start="00:11:50.989" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It seemed to be a meme, basically,""" start="00:11:52.069" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""because it has been like mostly Haskell people""" start="00:11:53.829" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""being very excited about this""" start="00:11:56.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and it seemed kind of, like, divorced from reality, basically.""" start="00:11:58.189" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""But this puzzle, it actually proves that yes,""" start="00:12:02.509" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""it has its use.""" start="00:12:05.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""It definitely has.""" start="00:12:06.949" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""You just have to find the right problem matching it,""" start="00:12:08.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and yeah.""" start="00:12:11.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So yeah, once I understand it better,""" start="00:12:13.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""the topic, I expect to write better code.""" start="00:12:15.389" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""These new Emacs features, they work well enough.""" start="00:12:18.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""There are some rough edges.""" start="00:12:24.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""They definitely need more testing.""" start="00:12:25.909" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So please, please, everyone,""" start="00:12:27.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""if you write Elisp, please try SQLite or Transient""" start="00:12:30.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""or anything else that looks cool and shiny.""" start="00:12:34.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Report bugs.""" start="00:12:36.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Find ways to improve them, anything. And yeah,""" start="00:12:38.469" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I'm sure that if we do this,""" start="00:12:41.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""then Emacs will continue to get even better.""" start="00:12:44.869" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""So yeah, what's next for this package?""" start="00:12:47.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Well, I could... There are lots of obvious UI improvements""" start="00:12:51.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""and testing to be done.""" start="00:12:55.989" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I basically want to reach feature parity""" start="00:12:57.349" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""with the twisty-timer app, which this is very much inspired by.""" start="00:12:59.709" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I want nice-looking stats like graphical ones""" start="00:13:02.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""instead of just a simple list of times.""" start="00:13:06.669" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And I want support for more puzzles, of course,""" start="00:13:08.789" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""not just the simple cubes,""" start="00:13:11.229" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""but as I progress learning these puzzles,""" start="00:13:12.549" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""I want to have Emacs supporting me for this.""" start="00:13:14.589" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""But generally, it's a very open-ended package.""" start="00:13:18.069" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""And this concludes the talk.""" start="00:13:22.429" video="mainVideo-cubing" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:13:26.629" video="mainVideo-cubing" id="subtitle"]] + + + +Captioner: sachac + +Questions or comments? Please e-mail [mail@vasilij.de](mailto:mail@vasilij.de?subject=Comment%20for%20EmacsConf%202023%20cubing%3A%20Speedcubing%20in%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/cubing-before.md b/2023/info/cubing-before.md new file mode 100644 index 00000000..c1dbf0c3 --- /dev/null +++ b/2023/info/cubing-before.md @@ -0,0 +1,26 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 14-min talk; Q&A: IRC +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="cubing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="cubing-mainVideo" data=""" +00:00.000 Introduction +01:35.400 Cubing in Emacs +02:01.160 Prior art +02:32.040 The name +03:16.520 What's in wca-prep +03:49.240 Demo +05:15.340 Challenges: Representing the cube +07:09.220 Scrambling +08:09.500 Visualization +08:56.420 UI with Transient +09:55.580 Book-keeping with SQLite +11:12.580 Conclusion + +"""]]<div></div>Duration: 13:35 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/2DYX2o8kB1Rv8Mqaj7H1Dx">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/cubing-nav.md b/2023/info/cubing-nav.md new file mode 100644 index 00000000..3f0e5db3 --- /dev/null +++ b/2023/info/cubing-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/poltys">The browser in a buffer</a> +Next by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/devel-after.md b/2023/info/devel-after.md new file mode 100644 index 00000000..297fbe3d --- /dev/null +++ b/2023/info/devel-after.md @@ -0,0 +1,561 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="devel-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""2 seconds. All right. I think we are live.""" start="00:00:02.419" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Yes. So, hi again, everyone.""" start="00:00:08.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I have the pleasure to welcome John Wiegley""" start="00:00:10.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""in person to this EmacsConf.""" start="00:00:13.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Hi, John. Hello there.""" start="00:00:15.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""How are you doing, Leo?""" start="00:00:17.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I am doing fantastic, and even more now that""" start="00:00:18.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I am in a room with you because we've been,""" start="00:00:21.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""we were reminiscing with Sacha.""" start="00:00:24.279" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So you had been there in person in 2013 And""" start="00:00:25.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""since we started doing those online,""" start="00:00:30.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Juan, since 2019, I think you've always been""" start="00:00:32.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""online, right? Usually it's a pre-recorded""" start="00:00:35.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""video. I think this will be the first 1 I do""" start="00:00:38.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""live in a long time. You're right.""" start="00:00:40.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm saying we are online right now,""" start="00:00:42.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but I just meant pre-recorded video.""" start="00:00:44.239" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So it's good to have you almost in person or""" start="00:00:45.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""at least live and we are excited to hear""" start="00:00:48.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""about some of the Emacs news.""" start="00:00:50.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So the floor is yours.""" start="00:00:52.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""All right, well welcome everybody.""" start="00:00:55.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""This is the yearly state of the Emacs union,""" start="00:00:57.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I guess, about how Emacs development is""" start="00:01:00.239" video="mainVideo-devel" id="subtitle"]] +[[!template text="""going. Just to note, I am not currently a""" start="00:01:02.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""maintainer of Emacs. So what I do to get""" start="00:01:05.379" video="mainVideo-devel" id="subtitle"]] +[[!template text="""these notes is I call up my friend,""" start="00:01:07.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Eli Zaretsky, 1 of the current Emacs""" start="00:01:09.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""maintainers, and he and I sit down for an""" start="00:01:12.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""hour, and he just gives me his dump of what's""" start="00:01:13.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""been going on. So I'm sort of just the""" start="00:01:17.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""messenger here. But thanks to Eli for these""" start="00:01:19.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""notes and all of the efforts that he""" start="00:01:22.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""contributes. So what he's been telling me is""" start="00:01:24.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that this Emacs 29 release that we had""" start="00:01:27.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""recently looks to have been very,""" start="00:01:30.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""very successful, which is some good news,""" start="00:01:31.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because there were a lot of new features,""" start="00:01:33.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and some of those features were actually""" start="00:01:35.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""quite radical. So far,""" start="00:01:37.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it's been quite a success,""" start="00:01:39.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""no serious problems with it,""" start="00:01:40.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and we have Emacs 29.2""" start="00:01:42.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""will be released very soon.""" start="00:01:45.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""They are thinking now about starting the""" start="00:01:47.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs 30 release cycle soon after 29.2""" start="00:01:50.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is released, where the release branch,""" start="00:01:53.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""which is called Emacs-30 usually,""" start="00:01:55.880" video="mainVideo-devel" id="subtitle"]] +[[!template text="""will be cut and then development will become""" start="00:01:59.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""frozen with only bug fixes going into that""" start="00:02:01.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""branch. That may take quite some time until""" start="00:02:03.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it actually comes to fruition as a release,""" start="00:02:07.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but at least it means that the release is""" start="00:02:09.639" video="mainVideo-devel" id="subtitle"]] +[[!template text="""going to start taking shape in that branch""" start="00:02:11.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""soon. So, for now, Emacs 30 looks like maybe""" start="00:02:13.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it's going to be a little less interesting""" start="00:02:17.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""than Emacs 29 was, meaning not a huge number""" start="00:02:19.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""of changing features. But there are still""" start="00:02:23.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""some new things going in.""" start="00:02:25.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So 1 of them is that Emacs 30 is going to""" start="00:02:26.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""have Android support. So you will be able to""" start="00:02:29.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""run Emacs 30 on your Android devices.""" start="00:02:32.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So if you've ever wanted to have native Emacs""" start="00:02:35.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on a tablet, which I know I've always wanted,""" start="00:02:37.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that will become possible with Emacs 30.""" start="00:02:40.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""There's also going to be much better support""" start="00:02:43.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for touchscreen devices,""" start="00:02:45.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""coincidentally, both laptops and tablets.""" start="00:02:47.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So that'll enhance that Android support.""" start="00:02:50.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""There will be some recently gained support""" start="00:02:54.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for LLDB in GUD.dl. So if you're on a Mac OS""" start="00:02:57.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""machine or a machine that uses just LLVM as""" start="00:03:01.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""part of the compilation process,""" start="00:03:05.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""then you probably are familiar with LLDB as""" start="00:03:07.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the command line debugger.""" start="00:03:10.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And that support for using LLDB through a GUD""" start="00:03:11.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""will become possible in Emacs 30.""" start="00:03:15.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm looking forward to this actually quite a""" start="00:03:17.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""bit as well. C Perl mode is being deprecated,""" start="00:03:19.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and all future work now is only being put""" start="00:03:23.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""towards C Perl mode. Another 1 is that there""" start="00:03:25.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""are going to be some new major modes based on""" start="00:03:30.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""TreeSitter. They will be for the languages""" start="00:03:33.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Lua, Elixir, and HTML.""" start="00:03:35.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And if you're not familiar,""" start="00:03:38.800" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I think TreeSitter was introduced in Emacs""" start="00:03:40.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""29. It's a library that allows you to specify""" start="00:03:42.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the grammar of a programming language as a""" start="00:03:47.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""BNF file, and I think using JavaScript,""" start="00:03:49.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and then with that file as input to Emacs,""" start="00:03:53.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it is then able to do syntax highlighting,""" start="00:03:56.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""syntax discovery, all of those things within""" start="00:04:00.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs without having to use elisp and regexps""" start="00:04:03.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""to discover the structure of the language.""" start="00:04:06.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""It defers the structure gathering to""" start="00:04:08.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""TreeSitter and then uses that information to""" start="00:04:10.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""navigate the language.""" start="00:04:13.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So, As time goes on, you'll see more and more""" start="00:04:15.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""languages taking on TreeSetter support.""" start="00:04:17.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So the next 3 coming up,""" start="00:04:19.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Lua, Elixir, and HTML.""" start="00:04:21.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And then the last feature for Emacs 30 is""" start="00:04:24.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that the byte compiler will now detect and""" start="00:04:26.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""warn about many more questionable constructs.""" start="00:04:29.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Things like empty macro bodies,""" start="00:04:33.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""missing lexical constructs,""" start="00:04:35.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""or say, condition case without any handlers.""" start="00:04:37.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Just silly stuff that might litter the code,""" start="00:04:40.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but now you'll get a warning about it from""" start="00:04:43.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the byte compiler to help you clean up the""" start="00:04:45.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""code and get rid of those potential sites of""" start="00:04:46.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""error. So this is the main thing that will be""" start="00:04:49.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""worked on for Emacs 30 and what's looked like""" start="00:04:52.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""shaping up for the release.""" start="00:04:55.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And also, he wanted me to announce that""" start="00:04:56.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Stefan Kongas is now a new co-maintainer.""" start="00:04:58.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And Stefan is, I believe,""" start="00:05:01.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""here with us in the conference and he'll be""" start="00:05:03.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""able, I hope, to help me answer any questions""" start="00:05:05.500" video="mainVideo-devel" id="subtitle"]] +[[!template text="""about future Emacs development because I'm""" start="00:05:08.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""not in the heat of it and don't have all""" start="00:05:10.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""those answers at the moment.""" start="00:05:12.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So That is all there is as far as a""" start="00:05:14.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""development update for now.""" start="00:05:17.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And I am available to take any questions.""" start="00:05:19.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""All right. Thank you so much,""" start="00:05:24.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Sean, for being the messenger of all this""" start="00:05:26.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""good news. I mean, you did start by saying""" start="00:05:29.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""this would not be as exciting,""" start="00:05:31.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""perhaps, as prior releases of Emacs,""" start="00:05:33.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but you then proceeded to say a lot of stuff""" start="00:05:36.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that it felt very exciting to me.""" start="00:05:38.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So good, good. Glad to hear that.""" start="00:05:40.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Right. So we do have questions coming in""" start="00:05:44.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""already and again people the link is on IRC""" start="00:05:47.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and also on the talks page if you want to""" start="00:05:50.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""start asking questions.""" start="00:05:52.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So John what I'm going to do I'm going to""" start="00:05:53.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""read you the questions and then you can""" start="00:05:54.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""answer them. Is that okay with you?""" start="00:05:56.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Absolutely. So starting with the first""" start="00:05:58.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question which changes in recent Emacs""" start="00:06:01.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""releases are you enjoying using?""" start="00:06:04.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I have really liked the visual line mode.""" start="00:06:08.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm not sure how recent that is.""" start="00:06:13.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Some of these features I only discovered""" start="00:06:15.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""quite late, the new display line number""" start="00:06:16.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""functionality, where it's much,""" start="00:06:19.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""much, much faster, and of course,""" start="00:06:21.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""native compilation. Native compilation has""" start="00:06:23.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""been quite brilliant for some of the larger""" start="00:06:25.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""packages that I use. I do a lot of stuff in""" start="00:06:27.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs. I use GNU's, I use E-Shell,""" start="00:06:29.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I use Org Mode quite a lot.""" start="00:06:31.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So native compilation has brought the user""" start="00:06:33.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""experience much closer to a modern app than""" start="00:06:36.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""some of the lagging and slowness that I might""" start="00:06:39.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""have experienced in the past.""" start="00:06:42.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Definitely. Moving on to the next question.""" start="00:06:44.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""What do you think the future in the area of""" start="00:06:47.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""artificial intelligence from the developer""" start="00:06:49.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""point of view? Could you say that 1 more""" start="00:06:51.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""time? Your voice broke up a little bit.""" start="00:06:53.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Oh, sorry. What do you think the future in""" start="00:06:54.876" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the area of artificial intelligence from the""" start="00:06:55.025" video="mainVideo-devel" id="subtitle"]] +[[!template text="""developer point of view?""" start="00:06:55.141" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Could you say that 1 more time?""" start="00:06:55.208" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Your voice broke up a little bit.""" start="00:06:55.324" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Oh, sorry. What do you think the future in""" start="00:06:55.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the area of artificial intelligence from the""" start="00:06:58.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""developer point of view?""" start="00:07:00.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""It's also a shaky question,""" start="00:07:01.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I think, but you get the point.""" start="00:07:02.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I do use chat-gpt-shell inside of Emacs quite""" start="00:07:04.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""a bit, actually, when doing development in""" start="00:07:09.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""other languages. Just the other day,""" start="00:07:10.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I was working on my Ledger accounting""" start="00:07:12.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""program, and I haven't done a lot of C++ in""" start="00:07:15.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""recent years. So I had forgotten how to""" start="00:07:18.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""exactly compare 2 strings only up to the""" start="00:07:21.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""length of the shortest string.""" start="00:07:23.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I know I could have cranked that out just""" start="00:07:25.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""writing it C style, but I didn't remember""" start="00:07:26.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""what the current state of the art is for C++""" start="00:07:28.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and the STL. So I just asked chatGPT.""" start="00:07:30.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I asked the exact question that I just said""" start="00:07:33.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""to you and sure enough it popped out the""" start="00:07:36.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""one-liner that was exactly what I needed.""" start="00:07:38.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So I think in terms of developer assistance,""" start="00:07:40.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""not having to keep all of standard libraries""" start="00:07:42.800" video="mainVideo-devel" id="subtitle"]] +[[!template text="""or common idioms in memory.""" start="00:07:45.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I don't know if other people are familiar""" start="00:07:47.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""with Rosetta Stone projects.""" start="00:07:49.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""They're projects where you have say a hundred""" start="00:07:51.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""different languages and there's a particular""" start="00:07:53.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question, say, how do I read a file and copy""" start="00:07:55.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it to another location?""" start="00:07:58.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And then it has an instance of doing that""" start="00:07:59.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""activity for every 1 of those languages.""" start="00:08:01.880" video="mainVideo-devel" id="subtitle"]] +[[!template text="""That's a great database,""" start="00:08:04.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and I've used them quite a bit in the past""" start="00:08:05.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for remembering how to do certain things,""" start="00:08:07.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""say, converting a string to UTF-8.""" start="00:08:09.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I think that AI does a great job of""" start="00:08:13.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""completely replacing the need for databases""" start="00:08:15.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""like that because you can just ask how do I""" start="00:08:17.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""copy a convert a string to UTF-8.""" start="00:08:19.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Yeah exactly and you know especially with""" start="00:08:23.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""languages which are tried well tried you know""" start="00:08:27.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it's very easy to get an answer that is""" start="00:08:30.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""correct. But sometimes what I find bothersome""" start="00:08:32.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""with this type of coding,""" start="00:08:34.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I think it's AI-aided coding,""" start="00:08:37.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but it's still coding,""" start="00:08:39.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is that, especially with C languages,""" start="00:08:41.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""sometimes you're going to end up with""" start="00:08:43.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""undefined behaviors and stuff like this just""" start="00:08:44.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because other people have been doing it,""" start="00:08:45.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""not because the algorithm or the model was""" start="00:08:47.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""trained with data that dates back to 10 years""" start="00:08:50.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""ago. At the time, C++ was a little different.""" start="00:08:53.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Anyway, I'm not here to talk,""" start="00:09:00.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""you are here to talk. Moving on to the next""" start="00:09:01.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question. People already get to hear my voice""" start="00:09:03.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""plenty, whereas yours are much sparser.""" start="00:09:06.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""All right. So, what is the future of Emacs on""" start="00:09:10.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""macOS? I understand that there are too few""" start="00:09:13.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""developers for the platform.""" start="00:09:16.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Is that still true? That's a good question.""" start="00:09:17.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I don't know what the current statistics are.""" start="00:09:21.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I've been a user of Emacs on Mac OS for""" start="00:09:23.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""decades now. It feels like the,""" start="00:09:27.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""There's also that Mac port version of Emacs,""" start="00:09:30.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""which builds Emacs more directly using the""" start="00:09:33.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""GUI libraries on the platform.""" start="00:09:35.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""That continues to be updated with every""" start="00:09:38.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""single new release that comes out.""" start="00:09:40.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So I'd say that the support may not be as""" start="00:09:42.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""great as it is on Linux and other platforms,""" start="00:09:45.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but to this day I haven't suffered from being""" start="00:09:47.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""a Mac user. Great. The only thing I remember""" start="00:09:50.500" video="mainVideo-devel" id="subtitle"]] +[[!template text="""about Emacs on macOS was that emojis made it""" start="00:09:55.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""inside the GUI first before they did it""" start="00:10:00.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""anywhere else. That's the 1 anecdote that I""" start="00:10:03.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""have on MacOS. Right. And historically that""" start="00:10:05.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""feature was removed in order to prevent Mac""" start="00:10:09.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""from having features that Linux did not.""" start="00:10:12.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I didn't want to go into that point.""" start="00:10:15.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I just wanted to mention the beginning of the""" start="00:10:16.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""anecdote and people can find it out.""" start="00:10:18.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But yes, that's also what it led to.""" start="00:10:19.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Moving on to the next question.""" start="00:10:24.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Why aren't you contributing to Emacs anymore?""" start="00:10:25.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Lack of time, I guess?""" start="00:10:28.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Lack of time, primarily.""" start="00:10:30.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Work has been very consuming.""" start="00:10:32.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""There are a lot of other projects and things""" start="00:10:33.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that I like doing. I still find Emacs Lisp""" start="00:10:36.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""very, very fun to write.""" start="00:10:39.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Just the other day, I was hacking up some""" start="00:10:40.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""extension macros for myself for org mode.""" start="00:10:43.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But to have the time needed to sit down and""" start="00:10:45.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""design a whole new mode and work on it.""" start="00:10:48.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I've been spending a lot of my time now in""" start="00:10:51.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""functional languages, especially theorem""" start="00:10:53.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""provers. I just find that so intellectually""" start="00:10:55.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""satisfying and interesting.""" start="00:10:58.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Plus it pays a lot better.""" start="00:11:00.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Never had a paying job as an Emacs list""" start="00:11:01.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""developer. So when it comes to now just being""" start="00:11:03.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""a fun language or a hobby language,""" start="00:11:06.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it is relegated to the time that I have free""" start="00:11:08.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""when it's available. Right.""" start="00:11:10.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Well, the good thing is that it's kind of""" start="00:11:13.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""like riding a bicycle,""" start="00:11:15.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""you know, writing a major mode,""" start="00:11:16.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it comes back relatively quickly and still""" start="00:11:17.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""enjoyable. You know, the other day,""" start="00:11:20.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""actually, I took notes on a mode that I""" start="00:11:22.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""wanted to write. There's an app I use on the""" start="00:11:25.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Mac called drafts, and I really love it.""" start="00:11:28.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I use it all the time.""" start="00:11:30.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I wanted to mimic the interface of this app""" start="00:11:31.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""in Emacs. So I could use Emacs as my drafts""" start="00:11:34.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""application rather than this separate 1.""" start="00:11:37.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So I noted down all the different user""" start="00:11:40.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""parameters and how it should function and""" start="00:11:42.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""everything to describe the app to myself as""" start="00:11:44.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""sort of notes to get me started on that work""" start="00:11:47.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""when I did have free time to work on it.""" start="00:11:50.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Somebody out there on the internet just saw""" start="00:11:52.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""these notes, because I keep a lot of my stuff""" start="00:11:54.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on GitHub. They fed it to chat GPT,""" start="00:11:57.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""going back to your AI question.""" start="00:12:00.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And they actually sent back to me a mode that""" start="00:12:02.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""implemented everything that I had said,""" start="00:12:04.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""which was effectively,""" start="00:12:06.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""chat GPT, seeing that what I had described""" start="00:12:08.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""was clear enough for it to derive most of the""" start="00:12:10.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""code that I would have wanted to write.""" start="00:12:14.500" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So maybe, maybe another thing that AI can do""" start="00:12:16.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is it can increase the value,""" start="00:12:19.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the efficiency of my free time.""" start="00:12:21.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Exactly. I think that's a wonderful point.""" start="00:12:24.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And phrasing it as efficiency of free time is""" start="00:12:27.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""great because you still have the expertise,""" start="00:12:29.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""obviously, that you're mobilizing into the""" start="00:12:31.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""design that you're formulating to charge DPT,""" start="00:12:33.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but then this expertise is turned into""" start="00:12:35.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""something that actually works.""" start="00:12:37.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Perhaps we're all going to become software""" start="00:12:40.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""architects at some point,""" start="00:12:41.780" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and then the busy work of actually coding the""" start="00:12:42.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""library and the software will be relegated to""" start="00:12:45.800" video="mainVideo-devel" id="subtitle"]] +[[!template text="""AI. That's an interesting future where we""" start="00:12:48.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""still, however, need to acquire the skills to""" start="00:12:51.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""know what is code, I suppose.""" start="00:12:55.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But that's an interesting future to think of.""" start="00:12:56.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""A fairly long question.""" start="00:13:00.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So 1 of the tricky things about running Emacs""" start="00:13:02.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on Android is do you use anything that""" start="00:13:04.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""requires extra packages?""" start="00:13:06.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Example like PDF tools with new PDF or going""" start="00:13:08.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""with a database, playing music or video with""" start="00:13:11.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""MPD or MPV on Bonga, LFeed.""" start="00:13:13.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Do you run Emacs Termex,""" start="00:13:16.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs APK, Emacs in virtual machine?""" start="00:13:18.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""This is also the case on Emacs for Windows to""" start="00:13:20.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""a lesser degree. So summarizing,""" start="00:13:22.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""how do you make Emacs work on Android if you""" start="00:13:24.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""do not have the synergy of stuff that you""" start="00:13:27.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""usually find on Linux systems like MPV and""" start="00:13:30.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""all the fancy applications like this?""" start="00:13:32.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""It's a good question. Since I'm not an""" start="00:13:35.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Android user and I've never tried running""" start="00:13:38.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs on Android platforms,""" start="00:13:40.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm not sure what's available out there to""" start="00:13:42.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""plug Emacs into. I mean,""" start="00:13:44.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""effectively, that question comes down to""" start="00:13:46.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""external dependencies and system support.""" start="00:13:48.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""That would be a great question for Stefan or""" start="00:13:50.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""somebody who has tried using Emacs,""" start="00:13:53.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the development version of Emacs on Android.""" start="00:13:56.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Great. We'll put a pin in this for Stéphane""" start="00:14:00.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""afterwards. Great, so moving on to the next""" start="00:14:04.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question. Will Org Tech someday become the""" start="00:14:07.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""default tech mode in Emacs?""" start="00:14:09.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And if so, when? Will Org what become?""" start="00:14:11.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Org Tech, you know, the LaTeX mode.""" start="00:14:15.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I do not know. It's been a while since I've""" start="00:14:19.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""done LaTeX. It must have been like 4 years,""" start="00:14:24.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but it was a pretty, the major mode for""" start="00:14:26.880" video="mainVideo-devel" id="subtitle"]] +[[!template text="""editing documents, like the state of the art""" start="00:14:30.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for editing latex documents in Emacs.""" start="00:14:32.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And apparently it's not default.""" start="00:14:34.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I assume there's latex mode or something that""" start="00:14:36.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is doing it. So were you saying octech,""" start="00:14:38.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""like A-U-C tech? Oh, did I not pronounce the""" start="00:14:41.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""C? Octech, yes. I thought you said org tech.""" start="00:14:45.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I wasn't familiar with that.""" start="00:14:48.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Octech is the only 1 I've ever used.""" start="00:14:50.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I know there is a built-in LaTeX mode,""" start="00:14:52.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but I've never used it.""" start="00:14:55.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I always just download whatever the latest""" start="00:14:57.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""version of Org Tech is and use that.""" start="00:14:59.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I don't know why it's not a standard package.""" start="00:15:01.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Becoming a standard package has its own costs""" start="00:15:03.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for the development cycle because it slows""" start="00:15:07.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""down release cycle quite a bit.""" start="00:15:09.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""It's now you have to create PRs that are""" start="00:15:12.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""reviewed by the Emacs Devel mailing list.""" start="00:15:14.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""It is a little more inertia.""" start="00:15:17.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Of course, it gets you more distribution""" start="00:15:19.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because it's a default package now,""" start="00:15:21.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and everybody can be using that.""" start="00:15:24.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But it's not something every developer""" start="00:15:26.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""decides to do. It took a few years,""" start="00:15:28.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""in fact, to get usePackage into Emacs core.""" start="00:15:31.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And that only happened after it was so stable""" start="00:15:34.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that it really wasn't receiving many changes""" start="00:15:37.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""anymore. Yeah, yeah it's it's the thing when""" start="00:15:39.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""you move into core you lose a lot of your""" start="00:15:44.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""agility in terms of how you're writing the""" start="00:15:46.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""code or how you expand code.""" start="00:15:49.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""That's why you have this vibrant community on""" start="00:15:51.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Melpa compared to core but you know it""" start="00:15:54.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""doesn't necessarily ought to be this way it""" start="00:15:57.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""could be a little different you know And it""" start="00:15:59.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""feels like there's this repetition between""" start="00:16:02.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""repartition, sorry, between people developing""" start="00:16:04.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for the core of Emacs and people developing""" start="00:16:06.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on Melpa, but at the end of the day those 2""" start="00:16:08.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""groups are constantly talking to 1 another""" start="00:16:10.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and taking cues from 1 another as well.""" start="00:16:13.180" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So that's great. And there's of course...""" start="00:16:15.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""May I jump in about this particular question""" start="00:16:18.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because I think I mean You know,""" start="00:16:21.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Org Mode doesn't really have any problems""" start="00:16:25.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""with releases Correct.""" start="00:16:27.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Just because it's distributed with Emacs so""" start="00:16:29.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""there is a difference between being in the""" start="00:16:32.860" video="mainVideo-devel" id="subtitle"]] +[[!template text="""core proper and being distributed with Emacs.""" start="00:16:35.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And for something like use packages,""" start="00:16:38.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it's really necessary to be in the core.""" start="00:16:40.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But for something like major mode,""" start="00:16:42.600" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it's a bit easier. That's a very very good""" start="00:16:45.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""point. Yeah, I'd forgotten about that""" start="00:16:48.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""distinction. Org mode does advance pretty""" start="00:16:50.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""rapidly and then it makes releases into the""" start="00:16:53.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""core distribution. Gianni,""" start="00:16:55.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I believe you also wanted to say something""" start="00:16:59.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""before someone started jumped in with a""" start="00:17:01.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question do you happen to remember okay""" start="00:17:03.840" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that's fine I lost her to lost to their time""" start="00:17:08.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'll be moving on to the next question then""" start="00:17:12.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and by the way feel free to interrupt us you""" start="00:17:15.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""know The whole point of this discussion is""" start="00:17:17.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""for you to ask questions to John Wheatley.""" start="00:17:19.619" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So whether it be via the other pad or via""" start="00:17:21.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""BBB, choose your weapon.""" start="00:17:23.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""All right, moving on to the next question in""" start="00:17:27.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the meantime. And we have about 7 minutes""" start="00:17:28.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""left of Q&A and then we'll be moving on to""" start="00:17:30.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Stéphane. So, do you use other IDEs for""" start="00:17:32.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""theorem proving work, notably VS Code for""" start="00:17:35.780" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Lean? Which languages and provers can or do""" start="00:17:38.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""you use Emacs for? I've only used Emacs.""" start="00:17:42.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I've used Emacs for working with ACL 2,""" start="00:17:46.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Coq, Agda, and Lean, and I really love""" start="00:17:49.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Proof-General. Coq is my favorite language to""" start="00:17:53.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""be working in. Agda has really great support""" start="00:17:55.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""as well, has a very nice Emacs mode.""" start="00:17:57.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm only just now starting to get into Lean""" start="00:17:59.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""4. So I have everything installed,""" start="00:18:02.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but I haven't really started coding in""" start="00:18:05.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""earnest. I'm still reading a lot of the""" start="00:18:07.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""tutorials and learning a bit about the""" start="00:18:08.800" video="mainVideo-devel" id="subtitle"]] +[[!template text="""language. There was a while there where I""" start="00:18:10.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""used a IDE for ACL 2 that was outside of""" start="00:18:13.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Emacs, only because it was the same IDE all""" start="00:18:17.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""my co-workers were using and it was easier to""" start="00:18:19.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""share tips and tricks with them.""" start="00:18:22.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But yeah, no, I found Emacs to be a great""" start="00:18:24.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""home for doing theorem proving.""" start="00:18:28.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Right. Next question. Can we see that AI""" start="00:18:32.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""generated draft? You know what you mentioned""" start="00:18:36.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""before about the draft that you then fed into""" start="00:18:40.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""ChargPT? Do you happen to have this draft""" start="00:18:43.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""anywhere? Let me see if it's still on GitHub.""" start="00:18:45.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Just take me 1 second to take a look here.""" start="00:18:51.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Take your time. The problem is I don't quite""" start="00:18:55.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""remember where I made the note.""" start="00:18:59.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""But no, I don't see it on GitHub,""" start="00:19:04.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""so I don't have it readily at hand.""" start="00:19:07.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Well, that's fine. We'll be able to...""" start="00:19:10.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Well, if you happen to find it,""" start="00:19:13.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""we'll make sure to add it on the pad and then""" start="00:19:15.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on the talks page. And I think we would all""" start="00:19:17.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""be interested to see what this design""" start="00:19:20.940" video="mainVideo-devel" id="subtitle"]] +[[!template text="""document that actually made something work""" start="00:19:22.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""afterwards in JudgeDPT with Elisp.""" start="00:19:27.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm very interested to see what it would do""" start="00:19:28.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because I tend to be very interested about""" start="00:19:30.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""this type of stuff I had generated but I""" start="00:19:32.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""never thought about doing it with Elisp""" start="00:19:34.780" video="mainVideo-devel" id="subtitle"]] +[[!template text="""because somehow it feels like 2 different""" start="00:19:37.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""worlds, like Elisp is kind of from the past,""" start="00:19:39.000" video="mainVideo-devel" id="subtitle"]] +[[!template text="""don't going me wrong, I love it and I use it""" start="00:19:41.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""every day But it's 2 different parts of my""" start="00:19:44.140" video="mainVideo-devel" id="subtitle"]] +[[!template text="""brain that I didn't think about linking.""" start="00:19:46.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So I'd be very excited to see this as well.""" start="00:19:48.820" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Moving on to the next question.""" start="00:19:53.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Oh, go on, please. I did find it.""" start="00:19:54.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm gonna have to give it to you as a link""" start="00:19:57.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""here. Sure, you can do it on the blue button""" start="00:20:01.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and I'll put it on the pad.""" start="00:20:03.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I put it into the public chat for Bibi.""" start="00:20:10.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Yes. So if anyone is interested,""" start="00:20:12.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm putting it right in the answer to the""" start="00:20:15.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question right here on my screen.""" start="00:20:18.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So feel free to click on it and explore it.""" start="00:20:20.200" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm kind of curious, so I'm gonna...""" start="00:20:22.120" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Can I click it on stream and can we look at""" start="00:20:23.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""it a little bit together?""" start="00:20:25.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Sure, sure. I haven't tried running it,""" start="00:20:26.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I can't say for its fitness,""" start="00:20:29.020" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but it's definitely enough of the groundwork""" start="00:20:31.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""done that it's absolutely an assistance.""" start="00:20:34.400" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Right. Okay, so it's loading up right now?""" start="00:20:38.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""You can see my webcam,""" start="00:20:41.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""right? I can see your browser attempting to""" start="00:20:42.620" video="mainVideo-devel" id="subtitle"]] +[[!template text="""load. There we go. Okay,""" start="00:20:45.680" video="mainVideo-devel" id="subtitle"]] +[[!template text="""cool. So I'm not sure what GitHub is doing.""" start="00:20:47.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Let me give it a little more room.""" start="00:20:50.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""The reactive setup is not working too well.""" start="00:20:51.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Oh, I see. You're viewing the...""" start="00:20:57.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I see. Can I see the file then?""" start="00:20:59.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I should be able to see the file.""" start="00:21:02.220" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I think he just mentions the code in that""" start="00:21:06.460" video="mainVideo-devel" id="subtitle"]] +[[!template text="""comment. So if there's a way to view only the""" start="00:21:09.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""comment it would make it clear.""" start="00:21:11.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Right. Okay. I'm loading the file separately.""" start="00:21:14.897" video="mainVideo-devel" id="subtitle"]] +[[!template text="""I'm checking the time.""" start="00:21:17.320" video="mainVideo-devel" id="subtitle"]] +[[!template text="""We have about 3 minutes left and I think we""" start="00:21:18.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""have a question. In the meantime,""" start="00:21:21.340" video="mainVideo-devel" id="subtitle"]] +[[!template text="""whilst I show this, I'm gonna launch another""" start="00:21:22.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""question, which was about Drafts.""" start="00:21:25.760" video="mainVideo-devel" id="subtitle"]] +[[!template text="""You are carrying, you're talking about""" start="00:21:29.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Drafts, but does that mean you're not using""" start="00:21:30.740" video="mainVideo-devel" id="subtitle"]] +[[!template text="""org anymore? Oh, no, I use org all the time.""" start="00:21:32.480" video="mainVideo-devel" id="subtitle"]] +[[!template text="""In fact, the way that I've configured drafts""" start="00:21:35.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is that after I type the thing in the note""" start="00:21:38.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""into drafts, I hit a key and it creates an""" start="00:21:40.580" video="mainVideo-devel" id="subtitle"]] +[[!template text="""org mode capture item for it.""" start="00:21:43.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""The reason why I use Drafts instead of Emacs""" start="00:21:45.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""is because it's always available.""" start="00:21:48.560" video="mainVideo-devel" id="subtitle"]] +[[!template text="""If Emacs is currently doing some job for me,""" start="00:21:51.100" video="mainVideo-devel" id="subtitle"]] +[[!template text="""say I'm running some long-running subshell""" start="00:21:53.960" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and the UI is frozen up whatnot,""" start="00:21:57.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Drafts is always 100% of the time instantly""" start="00:21:59.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""available. So that's why I tend to then lean""" start="00:22:02.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""on it a bit, but all of the destination of""" start="00:22:04.900" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that data is still Org Mode and everything""" start="00:22:07.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that I do gets tracked through Org Mode.""" start="00:22:10.240" video="mainVideo-devel" id="subtitle"]] +[[!template text="""That's also why I wanted to implement the UI""" start="00:22:13.080" video="mainVideo-devel" id="subtitle"]] +[[!template text="""scheme of drafts in Emacs so that I could""" start="00:22:16.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""drop the use of this external application.""" start="00:22:18.800" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And then, I mean, I would still have the""" start="00:22:21.540" video="mainVideo-devel" id="subtitle"]] +[[!template text="""problem of sometimes Emacs being unavailable,""" start="00:22:23.160" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but I would pay that price in order to have""" start="00:22:26.060" video="mainVideo-devel" id="subtitle"]] +[[!template text="""that good UI of drafts inside Emacs.""" start="00:22:30.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Great. I think we have,""" start="00:22:34.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""we might be too tight on time.""" start="00:22:38.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""We only have about 2 minutes and I need to""" start="00:22:39.720" video="mainVideo-devel" id="subtitle"]] +[[!template text="""jump room to go into Stephane's room as well.""" start="00:22:41.640" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So John, where I get to thank you so much for""" start="00:22:44.440" video="mainVideo-devel" id="subtitle"]] +[[!template text="""taking the time to answer our questions,""" start="00:22:47.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""but also doing a little bit of reporting on""" start="00:22:53.260" video="mainVideo-devel" id="subtitle"]] +[[!template text="""the state of Emacs. And now we'll get to""" start="00:22:55.040" video="mainVideo-devel" id="subtitle"]] +[[!template text="""continue this with Stéphane.""" start="00:22:58.380" video="mainVideo-devel" id="subtitle"]] +[[!template text="""So do you have any last words for everyone,""" start="00:22:59.280" video="mainVideo-devel" id="subtitle"]] +[[!template text="""John? No, no. I look forward to hearing""" start="00:23:01.300" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Stéphane speak. Okay, great.""" start="00:23:03.660" video="mainVideo-devel" id="subtitle"]] +[[!template text="""And we'll look forward,""" start="00:23:06.420" video="mainVideo-devel" id="subtitle"]] +[[!template text="""potentially, to having you again next year,""" start="00:23:07.360" video="mainVideo-devel" id="subtitle"]] +[[!template text="""potentially still doing news like this,""" start="00:23:10.520" video="mainVideo-devel" id="subtitle"]] +[[!template text="""and, fingers crossed, maybe having you live""" start="00:23:12.980" video="mainVideo-devel" id="subtitle"]] +[[!template text="""again. Maybe, maybe let's see what happens.""" start="00:23:15.920" video="mainVideo-devel" id="subtitle"]] +[[!template text="""All right, John. Thank you so much.""" start="00:23:19.700" video="mainVideo-devel" id="subtitle"]] +[[!template text="""Bye bye. Bye bye.""" start="00:23:20.860" video="mainVideo-devel" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20devel%3A%20Emacs%20development%20updates) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/devel-before.md b/2023/info/devel-before.md new file mode 100644 index 00000000..5429f360 --- /dev/null +++ b/2023/info/devel-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 24-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="devel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 23:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/57HSebb9a9JZynh2B3ehze">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/devel-nav.md b/2023/info/devel-nav.md new file mode 100644 index 00000000..451e821f --- /dev/null +++ b/2023/info/devel-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a> +Next by track: <a href="/2023/talks/core">Emacs core development: how it works</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/doc-after.md b/2023/info/doc-after.md new file mode 100644 index 00000000..7df3351e --- /dev/null +++ b/2023/info/doc-after.md @@ -0,0 +1,1189 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="doc-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Hello, everyone.""" start="00:00:00.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This talk is on literate documentation""" start="00:00:04.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with Emacs and org-mode.""" start="00:00:07.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'm going to take just a moment here""" start="00:00:10.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to unpack what I just said.""" start="00:00:12.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs, as most of us probably already know,""" start="00:00:14.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is a powerful text editor and list programming environment""" start="00:00:17.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from the 1970s.""" start="00:00:21.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Chances are, if you're attending this talk,""" start="00:00:23.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you already know a bit about Emacs.""" start="00:00:25.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""org-mode is an Emacs major mode and authoring tool""" start="00:00:28.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that helps you write documents in a plain text markup""" start="00:00:32.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""language called Org.""" start="00:00:36.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""These Org documents can be exported""" start="00:00:37.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to a number of different document formats,""" start="00:00:40.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""like HTML, PDF, ODT, Markdown, and more.""" start="00:00:42.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""org-mode has a lot of features.""" start="00:00:48.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It can be an outliner, a to-do list manager,""" start="00:00:51.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""an agenda, organizer, and much more.""" start="00:00:54.240" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Org Babel and literate programming""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Today, we're going to be demonstrating""" start="00:00:57.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""what I consider to be org-mode's killer feature called""" start="00:00:59.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Org Babel.""" start="00:01:03.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Babel allows you to take human language prose,""" start="00:01:04.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""computer language source code blocks, and their outputs""" start="00:01:07.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and weave them together seamlessly""" start="00:01:11.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to form a cohesive document.""" start="00:01:13.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It is seriously cool.""" start="00:01:16.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Literate documentation is a play on the term""" start="00:01:19.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""literate programming, popularized by Donald Knuth""" start="00:01:21.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the early 1980s.""" start="00:01:25.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Knuth's literate programming idea""" start="00:01:27.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""was that computer programs could be""" start="00:01:29.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""expressed in a natural language and be""" start="00:01:31.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""human-readable documents rather than written exclusively""" start="00:01:34.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for machines to read.""" start="00:01:38.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In a traditional program, you might""" start="00:01:40.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""have a bunch of machine-readable source code""" start="00:01:43.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and a handful of human-readable comments,""" start="00:01:45.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which attempt to describe what the program is doing.""" start="00:01:48.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Literate programming flips this on its head.""" start="00:01:51.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""A literate program is a document that""" start="00:01:54.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""describes how the program works with machine-readable source""" start="00:01:56.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""code blocks inside of it.""" start="00:02:01.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""These source code blocks are later""" start="00:02:02.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""tangled out of the document and submitted to the machine""" start="00:02:04.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""either to be compiled or interpreted and ultimately run.""" start="00:02:08.440" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""This presentation""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Throughout this presentation, you'll""" start="00:02:14.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""see my browser window here on the left side of the screen.""" start="00:02:15.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And on the right side, I've got a terminal session""" start="00:02:19.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""running tmux.""" start="00:02:22.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This allows us to have a virtual terminal window connected""" start="00:02:23.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to two separate Linux machines, one running Ubuntu Server 2204""" start="00:02:28.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and another running Fedora Server 38.""" start="00:02:35.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I've specifically chosen these two distributions for my demo""" start="00:02:39.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because they are representative of the two dominant flavors""" start="00:02:43.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of GNU Linux, Debian and RedHat.""" start="00:02:46.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In both cases, these are bare-bones server additions""" start="00:02:49.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with the stock packages installed.""" start="00:02:53.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I've manually installed a few packages like Git, emacs-noex""" start="00:02:55.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to get the terminal version of emacs, and tmux.""" start="00:03:00.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""But otherwise, these Linux installs""" start="00:03:04.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""are what you'd get right out of the box.""" start="00:03:06.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""For this demo, I've created a literate org-mode document""" start="00:03:08.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that describes how to build GNU Emacs from its source code""" start="00:03:12.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on both Debian and RedHat-based systems.""" start="00:03:16.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""While both operating systems are very similar,""" start="00:03:19.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""they differ substantially on which packages""" start="00:03:22.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""are installed out of the box, how optional packages are""" start="00:03:25.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""named, searched, and installed, and of course,""" start="00:03:29.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the distributions have different names,""" start="00:03:32.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""like Ubuntu or Fedora.""" start="00:03:34.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I chose building Emacs from source""" start="00:03:36.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as a topic for this demonstration""" start="00:03:39.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because while the process is largely""" start="00:03:41.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the same on both RedHat and Debian,""" start="00:03:43.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""there are a lot of minor little differences""" start="00:03:46.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that need to be accounted for, which really prohibits you""" start="00:03:49.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from hard coding names of packages and package management""" start="00:03:52.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""tools and distributions into your document.""" start="00:03:57.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I suppose you could create two versions of the same document,""" start="00:04:01.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""one specifically for RedHat and one specifically for Debian,""" start="00:04:05.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but that would be really tedious to maintain.""" start="00:04:09.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Like if, for example, you updated some prose""" start="00:04:13.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in one document, you'd have to remember""" start="00:04:16.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to do it in the other one too.""" start="00:04:18.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And if you weren't careful, the two documents""" start="00:04:20.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""could drift out of sync.""" start="00:04:22.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In this demo, I'll show you techniques""" start="00:04:25.260" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for creating dynamic, literate documents that""" start="00:04:27.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""can change based on parameters and constants embedded""" start="00:04:30.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""into the non-exported regions of the document.""" start="00:04:34.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'll show how with a single org-mode source document,""" start="00:04:38.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can press a couple of keys to configure""" start="00:04:41.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it to export a RedHat-specific version of my building""" start="00:04:44.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs from source essay or a Debian-specific version.""" start="00:04:48.720" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Getting started""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""All right, let's get started.""" start="00:04:53.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll begin by firing up a new terminal Emacs session""" start="00:04:55.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on my Ubuntu machine.""" start="00:04:58.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, I installed Emacs on this machine using apt-get.""" start="00:05:00.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And doing that, you get version 27.1,""" start="00:05:04.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is, hey, only two major versions""" start="00:05:07.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""behind the current version of Emacs.""" start="00:05:10.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is another reason why I thought""" start="00:05:13.011" video="mainVideo-doc" id="subtitle"]] +[[!template text="""writing a guide on how to build Emacs from source code""" start="00:05:15.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""might be a good idea.""" start="00:05:18.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""You can get a much newer version of Emacs on Ubuntu""" start="00:05:19.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""if you install it via Snap, but, uh, Snaps.""" start="00:05:22.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Don't get me started.""" start="00:05:25.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, I wanted to use a completely vanilla""" start="00:05:28.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""terminal mode install of Emacs for this demonstration""" start="00:05:30.922" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because my personal Emacs config has a ton of packages""" start="00:05:34.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""installed and is heavily modified.""" start="00:05:38.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I want folks to be able to follow along""" start="00:05:41.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with a bog-standard, out-of-the-box Emacs config.""" start="00:05:43.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The Emacs config on this Ubuntu machine""" start="00:05:47.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""has just two settings.""" start="00:05:49.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I require org-tempo because my fingers are hardwired""" start="00:05:51.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to use some of the handy shortcuts that it provides.""" start="00:05:55.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And I also turn off the menu bar""" start="00:05:58.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because I just can't stand to look at it.""" start="00:06:00.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's begin by opening a file called buildemacs.org,""" start="00:06:03.140" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which will be the source code""" start="00:06:07.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for our literate org-mode document.""" start="00:06:08.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, in preparation for this talk,""" start="00:06:11.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I've already written this document,""" start="00:06:12.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we'll take a look at the finished product""" start="00:06:14.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""here in a bit, but let's first take a look""" start="00:06:17.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at how we might approach this task.""" start="00:06:19.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll start at the top of the document""" start="00:06:22.409" video="mainVideo-doc" id="subtitle"]] +[[!template text="""by filling out some export keywords.""" start="00:06:24.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""These keywords are something that every backend exporter,""" start="00:06:27.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""be it LaTeX or plain text or ODT or whatever, understands,""" start="00:06:30.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and they're essentially document metadata.""" start="00:06:35.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""As you can see, I'm typing `#+`""" start="00:06:38.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""followed by a couple characters""" start="00:06:42.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then `M-TAB` to auto-complete.""" start="00:06:43.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If you hit #+ by itself and then M-TAB,""" start="00:06:45.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can see all the possible completions.""" start="00:06:50.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And as you can see, there's a lot.""" start="00:06:53.120" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""README""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""The next thing we're gonna do is make a README section""" start="00:06:55.780" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at the top of this document.""" start="00:06:58.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This section is intended for folks""" start="00:06:59.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""who are looking at the org-mode document,""" start="00:07:02.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""trying to figure out what it's for.""" start="00:07:04.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We don't want to actually export the section heading,""" start="00:07:06.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""so we're gonna tag it with the :noexport: tag.""" start="00:07:09.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then here, we just write something quick""" start="00:07:13.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to let folks know that this document""" start="00:07:15.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""can potentially execute code""" start="00:07:17.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and just a little something about what the document is for.""" start="00:07:19.800" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Writing a code block""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Okay, so now that we've written some text,""" start="00:07:23.500" video="mainVideo-doc" id="subtitle"]] +[[!template text="""let's try our hand at writing a code block.""" start="00:07:26.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'm getting pretty sick of looking at""" start="00:07:29.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the default Emacs theme.""" start="00:07:31.289" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All that blue and purple in the document""" start="00:07:32.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""makes it look bruised.""" start="00:07:35.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's make an Emacs Lisp code block""" start="00:07:37.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that switches the theme""" start="00:07:40.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to one of my favorite built-in themes, Leuven.""" start="00:07:41.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Leuven was created by my man, Fabrice Niessen,""" start="00:07:44.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""who I personally have learned a ton of org-mode stuff about""" start="00:07:48.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just by studying his work.""" start="00:07:52.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, if we cruise back up to the code block,""" start="00:07:54.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we should be able to hit `C-c C-c`,""" start="00:07:56.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and have it execute.""" start="00:07:58.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And there you have it, a high-contrast color theme""" start="00:08:00.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that was designed to look great in org-mode.""" start="00:08:03.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So that's great and all,""" start="00:08:06.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but there are a couple of things I don't like.""" start="00:08:08.080" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text=""":results none""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""First of all, we don't need to see a #+RESULTS block here,""" start="00:08:10.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and that's because we're not really interested""" start="00:08:13.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in what the Emacs Lisp function `load-theme` returns.""" start="00:08:15.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I mean, it's great it returned t and all to indicate success,""" start="00:08:18.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we just don't need to see it.""" start="00:08:22.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We can slap a `:results none` header arg""" start="00:08:23.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on the code block to keep things nice and clean.""" start="00:08:26.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There are a lot of different header args,""" start="00:08:30.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and I often confuse and misremember them.""" start="00:08:32.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So I'll always refer back to the org-mode manual""" start="00:08:35.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when working with them.""" start="00:08:38.920" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Confirmation""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""The second thing I don't like is that""" start="00:08:40.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when we hit C-c C-c to execute the block,""" start="00:08:42.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs prompted us if we really wanted to run the block.""" start="00:08:46.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs Lisp is Emacs' mother tongue,""" start="00:08:49.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and I don't wanna be hassled when speaking""" start="00:08:52.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""my native language.""" start="00:08:53.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There's a variable that controls this""" start="00:08:55.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""called `org-confirm-babel-evaluate`.""" start="00:08:57.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And this can be either set to t or nil""" start="00:09:00.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to either always confirm or never confirm.""" start="00:09:03.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If however, you provided a lambda, an anonymous function,""" start="00:09:06.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Org will call your function with the name of the language""" start="00:09:10.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and the source block that it's about to run.""" start="00:09:14.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And your function can make the decision""" start="00:09:16.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""about if Emacs should ask you for confirmation or not.""" start="00:09:19.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""What I'm doing here is setting `org-confirm-babel-evaluate`""" start="00:09:24.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as a "file local variable".""" start="00:09:27.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This means whenever the file is opened by Emacs,""" start="00:09:30.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it'll set this variable to be a lambda that returns nil,""" start="00:09:33.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""meaning don't confirm, on Elisp code blocks.""" start="00:09:38.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""As you can see, the variable is currently set""" start="00:09:42.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to its default value of t, meaning always confirm.""" start="00:09:45.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now if we save the buffer, exit Emacs,""" start="00:09:50.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and pop back in again,""" start="00:09:53.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`org-confirm-babel-evaluate` should be set how we like it.""" start="00:09:55.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We were however prompted for confirmation""" start="00:10:00.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on setting the file-local variable,""" start="00:10:02.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which controls if we're prompted""" start="00:10:04.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for Elisp source code block evaluation.""" start="00:10:06.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I feel like there's a Yo Dawg joke here somewhere.""" start="00:10:09.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""When we were prompted, we hit the exclamation mark,""" start="00:10:12.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which automatically marks this variable as being safe.""" start="00:10:15.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So you won't be bothered the next time you open this file.""" start="00:10:18.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This variable is called `safe-local-variable-values`""" start="00:10:21.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and if we pop over to our .emacs file,""" start="00:10:26.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can see that Emacs' customize tooling""" start="00:10:29.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""helpfully updated this variable in our config file for us.""" start="00:10:32.520" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Running blocks automatically""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now that's great and all,""" start="00:10:36.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but I really don't like having to hit `C-c C-c`""" start="00:10:38.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on that source block every time I open this document""" start="00:10:42.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just to bring up the Leuven theme.""" start="00:10:45.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's have this source block run automatically""" start="00:10:47.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""every time the document is opened.""" start="00:10:50.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now I know what you're thinking.""" start="00:10:53.180" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Shouldn't you just put all of this configuration stuff""" start="00:10:55.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in your .emacs file and keep it out of the document?""" start="00:10:57.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Well, that's what I've done with my personal Emacs config,""" start="00:11:01.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but we want this document to be able to be used by folks""" start="00:11:04.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with a completely vanilla Emacs setup,""" start="00:11:08.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or even a completely tricked out Emacs setup,""" start="00:11:11.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""so we can't assume anything.""" start="00:11:13.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The idea is if the Emacs user who opens the document""" start="00:11:16.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""agrees to setting all of the variables""" start="00:11:19.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and running all of the code within,""" start="00:11:22.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""they'll be able to export the document""" start="00:11:24.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as well as run all of the code blocks inside of it""" start="00:11:26.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just as we intended.""" start="00:11:28.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And the differences in base Emacs configuration""" start="00:11:30.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""will be completely minimized.""" start="00:11:33.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now it's worth pointing out that the file-local variables""" start="00:11:35.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we're setting here are local, in this case, buffer-local.""" start="00:11:39.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The configuration we use in this document""" start="00:11:43.024" video="mainVideo-doc" id="subtitle"]] +[[!template text="""won't override someone's carefully constructed""" start="00:11:45.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""org-mode setup.""" start="00:11:48.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The first thing we're gonna wanna do""" start="00:11:49.500" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in order to make this block execute""" start="00:11:51.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when the document is loaded is to give it a name.""" start="00:11:53.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It's always a good idea to give every source block""" start="00:11:55.989" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you create in your document a unique name,""" start="00:11:58.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""even if you don't refer to it elsewhere.""" start="00:12:01.338" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I do this because when I'm debugging my documents,""" start="00:12:03.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs will prompt me about running a block.""" start="00:12:07.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If the block has a name, Emacs mentions it,""" start="00:12:10.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and I know there's a problem with the result caching""" start="00:12:12.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or something with the "foo" block.""" start="00:12:15.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""But if the block doesn't have a name,""" start="00:12:17.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it can be really hard to figure out""" start="00:12:20.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which block Emacs is complaining about.""" start="00:12:22.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So I always name my blocks.""" start="00:12:24.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now we're gonna add another file local variable,""" start="00:12:27.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but this one is special.""" start="00:12:30.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If your "variable"""" start="00:12:32.116" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just happens to be named "eval",""" start="00:12:34.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it means that Emacs should evaluate""" start="00:12:36.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the Lisp expression that follows.""" start="00:12:38.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Here we'll use the progn function""" start="00:12:40.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to sequentially run two elisp functions""" start="00:12:43.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and return the value of the last one executed.""" start="00:12:46.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The first function is `org-babel-goto-named-source-block`,""" start="00:12:48.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which jumps us to the startup block.""" start="00:12:53.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The second one is `org-babel-execute-src-block`,""" start="00:12:55.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which executes the current source block.""" start="00:12:59.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That should get the job done.""" start="00:13:02.093" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now all we have to do is save the document,""" start="00:13:03.631" video="mainVideo-doc" id="subtitle"]] +[[!template text="""exit Emacs, jump back in,""" start="00:13:05.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and once we've confirmed that we're willing""" start="00:13:08.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to run the new "eval" line in our file local variables,""" start="00:13:10.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we're good to go.""" start="00:13:14.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now if we want to add new configuration stuff""" start="00:13:15.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to the document, we can just add it to the startup block""" start="00:13:18.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and not have to muck about with confirmations""" start="00:13:21.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or adding new file-local variables or whatever.""" start="00:13:24.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And just like before, we'll let Emacs' customize system""" start="00:13:28.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""save this decision to our .emacs file.""" start="00:13:31.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now that all that business with confirmations,""" start="00:13:34.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""file-local variables, and the startup block""" start="00:13:37.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""are out of the way,""" start="00:13:40.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can get on with writing our introduction.""" start="00:13:41.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll create a new top level headline called introduction""" start="00:13:44.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and explain to the reader of the exported document""" start="00:13:47.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""what this is all about.""" start="00:13:51.440" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Export options""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now as you can see, we've actually hard-coded""" start="00:13:53.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the name of the Linux distro in our prose.""" start="00:13:55.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I promised you a single document that could be""" start="00:13:58.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for either RedHat or Debian distros,""" start="00:14:00.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""so we can't have this.""" start="00:14:03.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Astute members in the audience have probably been uneasy""" start="00:14:05.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""ever since I hard coded the name "Debian"""" start="00:14:08.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the README section above.""" start="00:14:11.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""One way of solving this problem is by using exclude tags.""" start="00:14:13.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's add the `#+EXCLUDE_TAGS` export keyword to our document.""" start="00:14:17.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This keyword tells the exporter,""" start="00:14:21.960" video="mainVideo-doc" id="subtitle"]] +[[!template text=""""Hey, if you see a headline tagged with any of these tags,""" start="00:14:24.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""don't export it."""" start="00:14:27.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""By default, the tag `:noexport:` is excluded.""" start="00:14:29.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And if you'll notice, we tagged our README section""" start="00:14:33.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with that tag, so it doesn't show up""" start="00:14:36.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the exported document.""" start="00:14:38.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll keep this tag in the list,""" start="00:14:40.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but we'll also add the tag `:redhat:` as a tag to exclude.""" start="00:14:42.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now it's just a matter of creating two introduction""" start="00:14:47.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""sections, one for Debian, one for RedHat.""" start="00:14:50.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And if you want the RedHat version of the document,""" start="00:14:53.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can just modify the `#+EXCLUDE_TAGS` line""" start="00:14:56.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at the top of the document.""" start="00:14:59.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Awesome, right?""" start="00:15:00.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Right?""" start="00:15:02.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""OK, this is not that great.""" start="00:15:03.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Well, it does work.""" start="00:15:05.545" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And you can see if we export the document,""" start="00:15:07.388" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we'll get something that only references Debian,""" start="00:15:10.082" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and the `:noexport:` and `:redhat:`""" start="00:15:12.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""tagged headlines are omitted.""" start="00:15:15.189" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This strategy would work great""" start="00:15:17.451" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when the RedHat- and Debian-specific sections""" start="00:15:19.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""are substantially different, but that's not""" start="00:15:22.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the case with the introduction.""" start="00:15:24.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We definitely don't want to have to maintain""" start="00:15:26.199" video="mainVideo-doc" id="subtitle"]] +[[!template text="""two distinct introductions.""" start="00:15:28.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I also noticed that the export tags are included""" start="00:15:30.825" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the exported document.""" start="00:15:34.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That's a terrible default. We'll fix that,""" start="00:15:36.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we'll also ensure that my email address appears""" start="00:15:38.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at the top of the document.""" start="00:15:42.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's also take this opportunity to get rid""" start="00:15:43.372" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of the table of contents.""" start="00:15:45.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We don't need it.""" start="00:15:47.355" video="mainVideo-doc" id="subtitle"]] +[[!template text="""These are all export option settings""" start="00:15:48.868" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and can be modified using the options keyword""" start="00:15:51.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at the top of the doc.""" start="00:15:53.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The manual is really your friend here,""" start="00:15:55.509" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as there are a ton of export options.""" start="00:15:57.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now when we export the document again,""" start="00:16:00.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it should look a lot better.""" start="00:16:03.120" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Substituting constants""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now that we've cleaned up the look of the exported document,""" start="00:16:05.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we'll take a look at a better way""" start="00:16:09.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of solving the problem with the introduction.""" start="00:16:10.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Thinking like a programmer for a moment,""" start="00:16:13.378" video="mainVideo-doc" id="subtitle"]] +[[!template text="""what I really want here is a way of specifying a constant.""" start="00:16:15.519" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Rather than hard-coding the name "Debian" or "RedHat"""" start="00:16:19.735" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or whatever into my document,""" start="00:16:22.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I want to substitute that text with a symbolic constant,""" start="00:16:24.570" video="mainVideo-doc" id="subtitle"]] +[[!template text="""named something like "distro", that can dynamically change""" start="00:16:28.235" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to "Debian" or "RedHat" or "Slackware" or whatever,""" start="00:16:31.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""depending on how the document is configured.""" start="00:16:36.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In the past, I've come up with some pretty cumbersome ways""" start="00:16:38.690" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of doing this, but eventually I stumbled upon the idea""" start="00:16:41.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of using Org-mode properties""" start="00:16:44.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as a way of storing these constants.""" start="00:16:46.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Like it says in the docs, properties are key-value pairs""" start="00:16:49.410" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that are associated with an entry""" start="00:16:53.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and they live in a collapsible properties drawer.""" start="00:16:55.170" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's do a bit of cleanup on our document""" start="00:16:58.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we'll put things into sections.""" start="00:17:00.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll also add a section for document constants.""" start="00:17:02.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And that's where we'll put the properties drawer""" start="00:17:14.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with the "distro" property.""" start="00:17:19.560" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Getting the properties""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now the question is,""" start="00:17:25.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""how do we reference these properties in the document?""" start="00:17:27.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It turns out there's an Elisp function""" start="00:17:30.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""called `org-property-values`, which does what we want.""" start="00:17:32.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If we run it and give it the name of our property,""" start="00:17:35.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it returns a list with the string "Debian" in it.""" start="00:17:38.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It's worth noting that this function is named""" start="00:17:42.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`org-property-values` with values being plural.""" start="00:17:45.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In org-mode, there could be a property named "foo"""" start="00:17:49.990" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that has different values depending on which heading level""" start="00:17:52.890" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you're at in the document,""" start="00:17:55.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is why the function returns a list.""" start="00:17:57.610" video="mainVideo-doc" id="subtitle"]] +[[!template text="""For our purposes though,""" start="00:17:59.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can just pull off the first value in the list with car""" start="00:18:01.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we're good to go.""" start="00:18:04.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now we'll make an Emacs Lisp list function called `get_prop`""" start="00:18:05.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that does just that.""" start="00:18:10.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This function takes one argument called `prop`,""" start="00:18:11.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is the property to look up""" start="00:18:14.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we'll give it a default value of "distro".""" start="00:18:15.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we can hit `C-c C-c` on the block""" start="00:18:18.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to verify that it works.""" start="00:18:20.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now we just have to make an inline call""" start="00:18:23.150" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to our `get_prop` function""" start="00:18:25.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""within the prose of the introduction section.""" start="00:18:26.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And that should get us much closer""" start="00:18:29.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to not hard coding distro names into our document.""" start="00:18:31.660" video="mainVideo-doc" id="subtitle"]] +[[!template text="""But before we do that,""" start="00:18:35.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I need to clean up something that's been bothering me.""" start="00:18:36.870" video="mainVideo-doc" id="subtitle"]] +[[!template text="""By default, Emacs' `fill-column` variable""" start="00:18:39.850" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is set to 70 characters,""" start="00:18:42.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which may have been appropriate for 1970,""" start="00:18:44.990" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but it's not great for 2023.""" start="00:18:47.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll just cruise up to our startup block""" start="00:18:51.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and set the variable there.""" start="00:18:53.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll hit `C-c C-c`,""" start="00:18:56.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and now our document will wrap at 100 columns,""" start="00:18:58.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which for our purposes, I think is much more reasonable.""" start="00:19:02.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The org-mode syntax for making an inline function call""" start="00:19:05.830" video="mainVideo-doc" id="subtitle"]] +[[!template text="""within the prose of your document is `call_`,""" start="00:19:09.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""followed by the name of the function,""" start="00:19:13.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""some optional header arguments,""" start="00:19:15.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then the function arguments.""" start="00:19:17.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, when we export the document,""" start="00:19:19.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we see that it's replaced our previously hard coded "Debian"""" start="00:19:21.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with the value from the property. Huzzah!""" start="00:19:26.050" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now this is close to, but not exactly what we want.""" start="00:19:29.410" video="mainVideo-doc" id="subtitle"]] +[[!template text="""You can see that "Debian" is surrounded by a backtick""" start="00:19:32.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and a single quote,""" start="00:19:36.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is the plain text exporters way""" start="00:19:37.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of showing you verbatim text.""" start="00:19:40.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In more sophisticated document backends,""" start="00:19:43.030" video="mainVideo-doc" id="subtitle"]] +[[!template text="""verbatim text is rendered in monospace.""" start="00:19:45.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We can fix that by adding a ":results raw" header argument""" start="00:19:49.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to the inline call.""" start="00:19:54.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, when we export the document,""" start="00:19:56.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it looks like what we'd expect.""" start="00:19:58.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now this is getting better, but it's still not great.""" start="00:20:00.290" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Macros""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""The `call_` syntax is pretty cumbersome,""" start="00:20:03.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it's a lot to type every time we want""" start="00:20:05.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to reference a constant""" start="00:20:08.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and not have it be marked up as verbatim.""" start="00:20:09.850" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is where org-mode macros come to our rescue.""" start="00:20:13.220" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If we head to the top of the document,""" start="00:20:17.170" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can create a couple of macros""" start="00:20:19.470" video="mainVideo-doc" id="subtitle"]] +[[!template text="""using the `#+MACRO:` export keyword.""" start="00:20:21.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll define two macros with short names.""" start="00:20:24.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""One named "p" for "property",""" start="00:20:27.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and the other one named "pr" for "property raw".""" start="00:20:30.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Org-mode macros are expanded when the document is exported,""" start="00:20:34.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and any positional arguments provided""" start="00:20:39.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""are referenced by their number.""" start="00:20:41.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now in the introduction,""" start="00:20:43.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can use the macro replacement syntax,""" start="00:20:45.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is three curly braces,""" start="00:20:47.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""followed by the macro name and any arguments,""" start="00:20:49.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then three ending curly braces.""" start="00:20:52.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""You see why I kept the macro name short.""" start="00:20:55.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That's six curly braces in total we're typing,""" start="00:20:58.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which still takes up a fair amount of space.""" start="00:21:01.280" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Properties in practice""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now let's take a look at how we might use""" start="00:21:05.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""these properties in practice.""" start="00:21:07.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Debian and RedHat distros differ""" start="00:21:09.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on how they install packages.""" start="00:21:11.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we're gonna want an "install" property,""" start="00:21:12.930" video="mainVideo-doc" id="subtitle"]] +[[!template text="""where in Debian we use `sudo apt-get install -qq`,""" start="00:21:16.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and on RedHat we'll use something like""" start="00:21:24.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`sudo dnf install -y`.""" start="00:21:26.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now development packages""" start="00:21:33.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""also have a different naming convention.""" start="00:21:35.330" video="mainVideo-doc" id="subtitle"]] +[[!template text="""For example, the `ncurses` library on Debian""" start="00:21:38.050" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is called `libncurses-dev`,""" start="00:21:40.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""where on RedHat it's called `ncurses-devel`.""" start="00:21:43.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There are likely going to be""" start="00:21:48.260" video="mainVideo-doc" id="subtitle"]] +[[!template text="""many more little differences like this""" start="00:21:49.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that we'll need to solve with properties.""" start="00:21:52.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now I already don't like where this is going.""" start="00:21:55.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Switching between the Debian and RedHat""" start="00:21:58.610" video="mainVideo-doc" id="subtitle"]] +[[!template text="""versions of the document is gonna mean""" start="00:22:00.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""commenting and uncommenting out""" start="00:22:03.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""a bunch of different properties,""" start="00:22:05.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is pretty janky.""" start="00:22:06.990" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Using a prefix""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Luckily we can solve this problem""" start="00:22:09.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with a little bit of Emacs Lisp.""" start="00:22:11.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll start by modifying our properties,""" start="00:22:14.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""so their property names are prefixed""" start="00:22:16.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""with either `deb_` or `rh_`""" start="00:22:19.141" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to signify which distro the property applies to.`""" start="00:22:23.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll also create a single property called "prefix",""" start="00:22:27.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which will be prepended to the property name""" start="00:22:31.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""by the `get_prop` function""" start="00:22:34.590" video="mainVideo-doc" id="subtitle"]] +[[!template text="""if the requested property is not found.""" start="00:22:36.530" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This way, when we want to switch between""" start="00:22:39.510" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the Debian and RedHat versions of the document,""" start="00:22:42.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we just need to change the prefix property.""" start="00:22:45.350" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So now we'll change the Elisp code.""" start="00:22:49.030" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we'll use a let expression with two bound variables.""" start="00:22:51.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The first one is called ret,""" start="00:22:55.210" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which determines if the initial call""" start="00:22:56.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to `org-property-values` succeeds.""" start="00:22:59.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The second variable is called prefix,""" start="00:23:01.950" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is the prefix property.""" start="00:23:04.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If the first call to `org-property-values` succeeds,""" start="00:23:06.220" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we return it as normal.""" start="00:23:09.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If not, we concatenate the property value""" start="00:23:11.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that was passed into the function""" start="00:23:14.250" video="mainVideo-doc" id="subtitle"]] +[[!template text="""onto the prefix and try again.""" start="00:23:15.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now when we call the `get_prop` function with "distro"""" start="00:23:18.970" video="mainVideo-doc" id="subtitle"]] +[[!template text="""as the prop argument, it won't be found.""" start="00:23:23.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So the code will slap our prefix tag on the front,""" start="00:23:26.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""making it something like `rh_distro`,""" start="00:23:29.690" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it will be found and returned.""" start="00:23:33.250" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's see that in action.""" start="00:23:35.330" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, now we're talking.""" start="00:23:40.000" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Switching distributions""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""This setup is starting to look pretty good,""" start="00:23:42.010" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but there are just a few things""" start="00:23:44.420" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that I want to add before we move on.""" start="00:23:46.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""First of all, I think the document should have a subtitle,""" start="00:23:48.660" video="mainVideo-doc" id="subtitle"]] +[[!template text="""something that tells you if you're looking at the RedHat""" start="00:23:51.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or the Debian version of the document.""" start="00:23:53.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I also think it would be great""" start="00:23:56.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""if the file name of the exported document""" start="00:23:57.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""reflected the distribution as well.""" start="00:24:00.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I also want to add a quick Debian only section""" start="00:24:05.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to the document that explains how it got its name.""" start="00:24:08.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now let's see what happens when we export the document.""" start="00:24:11.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This did not work out as we wanted.""" start="00:24:17.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""As you can see, the macro we used in the subtitles""" start="00:24:20.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""didn't expand properly,""" start="00:24:23.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and as a result, our subtitle didn't render right.""" start="00:24:24.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Sadly, you can't use macros""" start="00:24:28.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or inline function calls everywhere.""" start="00:24:30.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And one place where they don't work""" start="00:24:32.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is inside of certain export keywords.""" start="00:24:34.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we're gonna have to hard code them here.""" start="00:24:37.190" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Another mistake that we made is we forgot to update""" start="00:24:43.220" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the `#+EXCLUDE_TAGS` export keyword,""" start="00:24:46.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because with the RedHat version of the document,""" start="00:24:49.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we want to exclude the Debian tag.""" start="00:24:51.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now when we export the document,""" start="00:24:54.510" video="mainVideo-doc" id="subtitle"]] +[[!template text="""everything should be correct.""" start="00:24:56.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The word RedHat should appear in the subtitle,""" start="00:24:57.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and the Debian fun fact section should not be present.""" start="00:25:00.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now we just need to add a section to the README""" start="00:25:04.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that explains the steps you need to take""" start="00:25:06.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in order to switch the document""" start="00:25:09.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from RedHat to Debian.""" start="00:25:11.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Okay, let's see here.""" start="00:25:12.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We have to change `#+SUBTITLE`, change the `#+EXCLUDE_TAGS`,""" start="00:25:14.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""change the `#+EXPORT_FILE_NAME`,""" start="00:25:18.310" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and change the `prefix` property.""" start="00:25:20.430" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is OK, but it's not great.""" start="00:25:23.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs Lisp can once again come to our rescue.""" start="00:25:26.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""What we'll do is make an Elisp code block""" start="00:25:29.430" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that will invite the user to hit `C-c C-c` on.""" start="00:25:32.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And the code block will essentially make all these changes""" start="00:25:35.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the document for them.""" start="00:25:39.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This code block, which we'll call `switch_distro`,""" start="00:25:40.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""takes one argument called `os`,""" start="00:25:43.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which by default is set to "Debian".""" start="00:25:45.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It starts out with a let expression""" start="00:25:48.690" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that defines three bound variables.""" start="00:25:50.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The `debian` variable is a boolean that is true""" start="00:25:53.030" video="mainVideo-doc" id="subtitle"]] +[[!template text="""if the distro we're switching to is Debian.""" start="00:25:55.970" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Based on the value of this boolean,""" start="00:25:58.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we'll set the `noexport` and `prefix` variables accordingly.""" start="00:26:00.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The `save-excursion` block tells Emacs""" start="00:26:04.170" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that we're going to be moving around in the document""" start="00:26:06.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and to remember to put our point back where we started""" start="00:26:09.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when the block finishes.""" start="00:26:11.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""After that, we essentially go to the top of the document""" start="00:26:13.430" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and search and replace the subtitle, `exclude_tags`,""" start="00:26:16.250" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`export_file_name`, and the `prefix`.""" start="00:26:19.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Pretty cool.""" start="00:26:22.500" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's see this in action.""" start="00:26:23.390" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If we hit `C-c C-c` on this block,""" start="00:26:25.030" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we should see the document automatically change a bit.""" start="00:26:27.870" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And now when we export it,""" start="00:26:30.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we get the Debian version of the doc.""" start="00:26:32.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If we want to change it back,""" start="00:26:36.090" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can just head back over to the code block""" start="00:26:37.630" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and change the default value for the os variable""" start="00:26:39.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from "Debian" to "RedHat" and hit `C-c C-c` again.""" start="00:26:43.150" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And now when we re-export,""" start="00:26:47.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we're looking at the RedHat version of the document.""" start="00:26:49.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Just as an aside, if you ever thought to yourself,""" start="00:26:52.910" video="mainVideo-doc" id="subtitle"]] +[[!template text=""""I should learn Emacs Lisp someday"""" start="00:26:55.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Make it someday soon. You'll be happy you did.""" start="00:26:58.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Not only is it a fun programming language,""" start="00:27:01.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but you can do powerful things with it in Emacs,""" start="00:27:03.770" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which I hope is a point that folks take away from this talk.""" start="00:27:06.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, that was a lot.""" start="00:27:12.150" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""A tour""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now that we've spent the past 20 minutes or so""" start="00:27:14.150" video="mainVideo-doc" id="subtitle"]] +[[!template text="""digging into some of the tips and tricks I used""" start="00:27:16.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when creating my build Emacs from source document,""" start="00:27:19.410" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we'll say goodbye to this document we've been working on""" start="00:27:22.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we'll start a tour""" start="00:27:26.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of the actual literate document I wrote.""" start="00:27:27.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""A document that I'll demonstrate actually downloading""" start="00:27:29.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and building a new Emacs when I export it""" start="00:27:33.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on both my Ubuntu and RedHat virtual machines.""" start="00:27:35.660" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'll also show you how org-mode can generate""" start="00:27:38.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""slick professional looking PDF files""" start="00:27:41.690" video="mainVideo-doc" id="subtitle"]] +[[!template text="""through the power of LaTeX.""" start="00:27:44.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll start here at the orgdemo2 directory,""" start="00:27:46.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which I've cloned from GitLab.""" start="00:27:49.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This repository has all the source materials for this talk.""" start="00:27:51.230" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The buildemacs.org file is where most of the good stuff is.""" start="00:27:55.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So that's where we'll start.""" start="00:27:59.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There's a lot of file-local variables""" start="00:28:01.480" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that we'll need to confirm.""" start="00:28:03.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we'll do that too.""" start="00:28:04.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So the first thing we're gonna do""" start="00:28:06.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is hit `C-u TAB` twice,""" start="00:28:07.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which will give us a top-level overview""" start="00:28:10.780" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of all of our headings.""" start="00:28:13.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""As you can see, we've got a lot""" start="00:28:15.140" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of the same familiar export keywords we had before.""" start="00:28:16.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`#+TITLE`, `#+SUBTITLE`, `#+AUTHOR`, `#+EMAIL`,""" start="00:28:20.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""plus a few we haven't seen before.""" start="00:28:23.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""For example, I've squirreled away""" start="00:28:25.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""a lot of the `#+LATEX_HEADER` export keywords""" start="00:28:27.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in this file called latex.setup.""" start="00:28:30.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And I did this just so they don't clutter up the document.""" start="00:28:33.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Much of the LaTeX magic""" start="00:28:36.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that makes the exported document look good""" start="00:28:38.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is in these headers.""" start="00:28:40.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""LaTeX commands begin with a backslash.""" start="00:28:42.590" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And a common one we use a lot here is `\usepackage`.""" start="00:28:45.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This lets us bring in packages like geometry,""" start="00:28:49.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""svg for the cool SeaGL SVG logo,""" start="00:28:52.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""`fancyhdr` and fancy verbatim [`fancyvrb`]""" start="00:28:56.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to keep things looking pretty fancy.""" start="00:28:58.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Using a scalable vector image format""" start="00:29:00.690" video="mainVideo-doc" id="subtitle"]] +[[!template text="""makes it possible for us to do really cool things""" start="00:29:03.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""like having a scaled-down version of the SeaGL logo""" start="00:29:05.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""appear in the fancy footer below.""" start="00:29:09.270" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I also include some macros in a separate file""" start="00:29:11.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just to help keep things tidy in the main document.""" start="00:29:15.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Here I've got the familiar macros""" start="00:29:18.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we've seen before for `get_prop`.""" start="00:29:20.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""But here I use different permutations""" start="00:29:23.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""depending on if I want results raw""" start="00:29:25.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or raw verbatim or just verbatim.""" start="00:29:28.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I also have a couple of macros here at the top of the file""" start="00:29:31.870" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that are for pulling strings out of results blocks""" start="00:29:35.070" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then trimming them""" start="00:29:40.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""so there's no white space on either side.""" start="00:29:41.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Like in the version of the document""" start="00:29:44.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we worked on at the start of this talk,""" start="00:29:46.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the real document also has a README section""" start="00:29:48.430" video="mainVideo-doc" id="subtitle"]] +[[!template text="""marked with the `:noexport:` tag.""" start="00:29:51.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It also has a section about choosing""" start="00:29:53.470" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which version of the document to export""" start="00:29:55.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and a code block on how to switch between them.""" start="00:29:57.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""It's also got a lot of helpful information in it""" start="00:30:00.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""like what OS and Emacs versions""" start="00:30:03.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the document has been tested to "run" on,""" start="00:30:05.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""a section on the LaTeX prerequisites""" start="00:30:09.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and the section on executing""" start="00:30:12.330" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the document's various code blocks.""" start="00:30:14.080" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""TeX and LaTeX""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""The latter two sections we'll take a look at now.""" start="00:30:16.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Out of the box on Fedora and Ubuntu server distros,""" start="00:30:19.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the TeX typesetting system""" start="00:30:22.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""also by noted computer scientist Donald Knuth""" start="00:30:24.710" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is not installed.""" start="00:30:27.670" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we'll need to install some packages.""" start="00:30:28.860" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Starting out we'll need the `texlive` package""" start="00:30:31.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which gets you a fully featured TeX setup.""" start="00:30:34.450" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This also gets you LaTeX""" start="00:30:37.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which can be viewed as a distribution of TeX macros.""" start="00:30:39.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""You'll also need XeTeX.""" start="00:30:42.790" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This gets you Unicode support and lets you use modern fonts.""" start="00:30:44.900" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll also want to install pdfTeX.""" start="00:30:49.780" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This gets us the ability to generate PDFs from TeX sources.""" start="00:30:52.810" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And finally, we're gonna need to install latexmk""" start="00:30:57.210" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which is a Perl script""" start="00:31:01.300" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that knows how to run LaTeX multiple times""" start="00:31:02.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in order to properly deal with intra-document links.""" start="00:31:05.140" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Other prerequisites""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""But wait, there's more.""" start="00:31:09.250" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We're also gonna need Inkscape""" start="00:31:11.070" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to rasterize our SeaGL vector logo""" start="00:31:12.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""at different resolutions.""" start="00:31:15.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And we're gonna need the JetBrains Mono font""" start="00:31:17.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to make our source code look snazzy.""" start="00:31:20.360" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll also need the Inter font""" start="00:31:23.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to make our prose look snazzy as well.""" start="00:31:24.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I've helpfully added a bash code block in the README""" start="00:31:28.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that you can hit C-c C-c on to install.""" start="00:31:31.300" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This really does lock up Emacs for a few minutes""" start="00:31:35.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it's sort of annoying.""" start="00:31:38.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""When we export the document and turn off all caching""" start="00:31:40.330" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it actually builds Emacs for real,""" start="00:31:43.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Emacs can be locked up for tens of minutes.""" start="00:31:45.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There's a package called ob-async""" start="00:31:48.770" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that I've been meaning to check out that might help here.""" start="00:31:50.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""But since I wanted this document""" start="00:31:54.260" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to work on bog-standard Emacs setups,""" start="00:31:55.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I didn't get around to it.""" start="00:31:58.000" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Caching""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Before we get into talking about running the document,""" start="00:32:00.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""let's talk briefly about results caching.""" start="00:32:03.140" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll take a look at the section of the document""" start="00:32:06.450" video="mainVideo-doc" id="subtitle"]] +[[!template text="""where we talk about Git tags for an example.""" start="00:32:08.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The `num_tags` bash code block determines""" start="00:32:13.140" video="mainVideo-doc" id="subtitle"]] +[[!template text="""how many tags there are in the Emacs Git repo.""" start="00:32:15.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And when I hit C-c C-c on that block""" start="00:32:19.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""several days ago, when I was first creating the document,""" start="00:32:21.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that number was 183.""" start="00:32:25.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That result has remained cached in the document since then.""" start="00:32:28.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And you can see a snippet of the SHA1 hash""" start="00:32:32.170" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of the contents of the source block below.""" start="00:32:34.900" video="mainVideo-doc" id="subtitle"]] +[[!template text="""You can see where I referenced the result""" start="00:32:38.390" video="mainVideo-doc" id="subtitle"]] +[[!template text="""using the `sr` for string raw macro in the prose below,""" start="00:32:40.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and how it gets rendered in the exported PDF document.""" start="00:32:44.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All the source blocks in the exported sections""" start="00:32:50.510" video="mainVideo-doc" id="subtitle"]] +[[!template text="""of the document include cached results like this.""" start="00:32:52.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If I export the document now, it won't take that long to do""" start="00:32:56.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because while there are a ton of code blocks""" start="00:33:01.390" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the exported sections, they're all cached.""" start="00:33:03.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now let's get back to the section of the README""" start="00:33:09.070" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that explains how to execute the code in the document.""" start="00:33:11.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Here I explain that if you want to build Emacs""" start="00:33:14.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on your computer using this document,""" start="00:33:17.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you've got a couple of options.""" start="00:33:20.190" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The first option is to manually invalidate the caches""" start="00:33:22.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and take C-c C-c on every code block""" start="00:33:25.650" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in the main document.""" start="00:33:28.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This lets you supervise the entire process,""" start="00:33:30.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it also creates new cached result blocks,""" start="00:33:33.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but it's time consuming.""" start="00:33:36.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""There is also an internal link to the main document here,""" start="00:33:39.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and you can jump to it with C-c C-o.""" start="00:33:43.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is one of those intra-document links""" start="00:33:47.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that is really tricky to get right with LaTeX,""" start="00:33:50.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and is why we opted to use the latexmk Perl script""" start="00:33:53.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to build the PDF version of the document.""" start="00:33:56.990" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'm mentioning it specifically here""" start="00:34:00.050" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because it took me forever to figure this out.""" start="00:34:01.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The second option you've got""" start="00:34:05.630" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is to change the default header arg""" start="00:34:07.270" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from `:cache yes` to `:cache no` at the top of the document.""" start="00:34:09.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If we cruise up to the top of the document,""" start="00:34:13.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can see that this header argument property""" start="00:34:16.270" video="mainVideo-doc" id="subtitle"]] +[[!template text="""basically says that unless a code block""" start="00:34:19.130" video="mainVideo-doc" id="subtitle"]] +[[!template text="""explicitly says otherwise,""" start="00:34:22.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""it's by default supposed to be cached.""" start="00:34:24.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That's how we were able to export the document""" start="00:34:27.119" video="mainVideo-doc" id="subtitle"]] +[[!template text="""before so quickly.""" start="00:34:29.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""The code block named `no_cache_no_confirm`""" start="00:34:31.559" video="mainVideo-doc" id="subtitle"]] +[[!template text="""uses the `save-excursion` and regex replace trick""" start="00:34:34.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that I demonstrated earlier""" start="00:34:38.619" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to munch the default cache header arg""" start="00:34:40.349" video="mainVideo-doc" id="subtitle"]] +[[!template text="""from "cache yes" to "cache no".""" start="00:34:42.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And it also turns off confirmations on bash code blocks.""" start="00:34:45.410" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Let's do that now.""" start="00:34:49.300" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now we'll export the document to PDF,""" start="00:34:51.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""which will ignore the cache result blocks""" start="00:34:54.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and clone the Git repository on Savannah,""" start="00:34:57.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""create a branch that points""" start="00:35:00.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to the most recently tagged version of Emacs 29,""" start="00:35:01.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""run configure a handful of times,""" start="00:35:05.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""installing packages to fix missing dependencies""" start="00:35:07.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""along the way,""" start="00:35:10.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""build Emacs, install Emacs in our home directory,""" start="00:35:12.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""verify that it has successfully built a binary,""" start="00:35:16.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""run it in batch mode with some sample Elisp""" start="00:35:19.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and show the file sizes and dates of the generated files.""" start="00:35:22.550" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is gonna take a while.""" start="00:35:26.870" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And while it's running, we'll pop over to our Fedora box.""" start="00:35:28.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, now we'll fire up Emacs,""" start="00:35:32.830" video="mainVideo-doc" id="subtitle"]] +[[!template text="""hit `C-c C-c` on the `configure_document` code block""" start="00:35:34.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to configure the document for RedHat""" start="00:35:39.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""since Fedora here is a RedHat based distro.""" start="00:35:41.850" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Then what we'll do is we'll pop down""" start="00:35:45.710" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and hit `C-c C-c`""" start="00:35:47.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on the `rh_install_latex` code block""" start="00:35:49.590" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to install the LaTeX prerequisites""" start="00:35:53.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""for this Fedora virtual machine.""" start="00:35:56.230" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Finally, we'll execute the `no_cache_no_confirm` block""" start="00:35:58.460" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then kick off the export.""" start="00:36:02.590" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Then we'll go and check back on what's happening""" start="00:36:05.050" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on the Ubuntu box.""" start="00:36:07.280" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Ooh, top looks pretty quiet.""" start="00:36:09.530" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I think the export is complete.""" start="00:36:11.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Ooh, those are the words I love to see in the status area,""" start="00:36:14.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""PDF file produced!""" start="00:36:17.560" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Looking at the PDF""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Now I can't use my web browser""" start="00:36:20.610" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to take a look at this PDF file""" start="00:36:22.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because I haven't set up a web server""" start="00:36:24.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or anything like that on the Ubuntu virtual machine.""" start="00:36:27.080" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I can, however, use TRAMP with the ssh method""" start="00:36:30.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to poke around on the ubuntu host""" start="00:36:34.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""on my personal version of Emacs.""" start="00:36:36.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So let's do that.""" start="00:36:39.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Okay, so now if we go into the source directory""" start="00:36:40.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then we hop into the orgdemo2 directory""" start="00:36:44.810" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then we look at the deb version of the PDF,""" start="00:36:48.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""there she blows.""" start="00:36:51.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now, if we go down to the Building Emacs section,""" start="00:36:54.150" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can see that it built.""" start="00:36:58.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And if we look in the bin directory,""" start="00:37:00.130" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can see that at 17:01,""" start="00:37:03.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that's when all of those files got created.""" start="00:37:06.780" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Also the file creation date on the PDF is 17:01.""" start="00:37:11.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So all of this code executed roughly the same time""" start="00:37:15.590" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the PDF was created.""" start="00:37:18.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, so now let's head back over to the Fedora box""" start="00:37:21.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then we'll navigate to the source directory,""" start="00:37:25.340" video="mainVideo-doc" id="subtitle"]] +[[!template text="""the orgdemo2 directory,""" start="00:37:27.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and there is our RedHat version of the built Emacs PDF.""" start="00:37:30.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And Bob's your uncle.""" start="00:37:35.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And you can see it is the RedHat version of the document""" start="00:37:38.220" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because this is a RedHat box.""" start="00:37:42.550" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And if we go over to the What did we install? section,""" start="00:37:44.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you can see that these binaries were built at 17:35.""" start="00:37:51.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And now if we pop open dired""" start="00:37:56.050" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we take a look at the PDF,""" start="00:37:58.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we can see it also was created at 17:35.""" start="00:38:00.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, in the couple minutes remaining,""" start="00:38:07.330" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I thought it would be a good idea""" start="00:38:10.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""just to take a look at the document""" start="00:38:11.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and maybe just go through some of what it actually does""" start="00:38:15.740" video="mainVideo-doc" id="subtitle"]] +[[!template text="""in explaining how to build Emacs from source.""" start="00:38:19.000" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We'll look at the RedHat version since we're here.""" start="00:38:22.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And the first thing you do is""" start="00:38:27.140" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you have to get access to the source code.""" start="00:38:28.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And before you can do anything,""" start="00:38:31.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""this is a RedHat-specific section""" start="00:38:32.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""where you need to install some development tools.""" start="00:38:35.420" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And this development tools group actually has Git.""" start="00:38:38.300" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Now I installed Git earlier, but if you didn't do that,""" start="00:38:41.540" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that would be the first thing that you need to do.""" start="00:38:44.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We create a source directory, we cd into it,""" start="00:38:46.940" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we clone the repo from Savannah.""" start="00:38:50.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we start to take a look at some of the Git tags.""" start="00:38:53.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And we showed this before where we check out""" start="00:38:56.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""how many different tags there are.""" start="00:38:58.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we run this kind of funky Git command""" start="00:39:00.370" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to sort of list all the tags that begin with 'emacs-29',""" start="00:39:02.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and we sort them by when they were tagged.""" start="00:39:06.040" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we can see that Emacs 29.1.pretest""" start="00:39:08.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""is the most recent version.""" start="00:39:12.400" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So that's the one we grab""" start="00:39:14.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and that's the one we decide to build.""" start="00:39:15.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we create a branch that is based on this tag.""" start="00:39:18.660" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And this is dynamically generated based on what we saw here.""" start="00:39:22.780" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So that's what we use here.""" start="00:39:27.480" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Errors""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""In this case, we're piping standard error""" start="00:39:29.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to where standard out goes.""" start="00:39:32.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""That's another trick.""" start="00:39:35.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""If you want to actually see an error get created,""" start="00:39:36.070" video="mainVideo-doc" id="subtitle"]] +[[!template text="""org-mode will capture any errors that code blocks produce,""" start="00:39:39.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and it will show you the error message in a buffer.""" start="00:39:44.120" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So if you actually wanna show what it looks like""" start="00:39:46.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""when something errors out, this is the trick you have to use.""" start="00:39:49.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then what we do is we look for a configure script""" start="00:39:53.060" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and there isn't one.""" start="00:39:56.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we realize,""" start="00:39:57.420" video="mainVideo-doc" id="subtitle"]] +[[!template text="""uh-oh, we're gonna have to deal with autotools.""" start="00:39:58.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So, you know, we run the autogen script and it complains""" start="00:40:00.910" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because we're missing some prerequisites.""" start="00:40:05.560" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we have to install autoconf,""" start="00:40:08.680" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then we run it again,""" start="00:40:11.350" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and finally it generates a configure script.""" start="00:40:13.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And this is another case where I pull this number""" start="00:40:15.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""right here into the actual prose.""" start="00:40:19.020" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And I can see it's, oh, it's, you know, this how many bytes.""" start="00:40:21.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""When was the last time you wrote a shell script""" start="00:40:24.840" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that was this many bytes long?""" start="00:40:26.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we configure the build process.""" start="00:40:29.580" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And, you know, it's not gonna work right away""" start="00:40:31.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""because we don't have GNU Texinfo installed.""" start="00:40:33.760" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So we gotta do that, which we do with `dnf install` here.""" start="00:40:36.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then there's this section that is either RedHat-""" start="00:40:41.440" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or Debian-specific that talks about, like,""" start="00:40:44.320" video="mainVideo-doc" id="subtitle"]] +[[!template text="""if you don't know the name of a package""" start="00:40:48.920" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that contains a given file name, how do you query it?""" start="00:40:51.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And in the RedHat world, you use `dnf provides makeinfo`.""" start="00:40:55.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""In the Debian world, you do something entirely different.""" start="00:40:59.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we have to install the `ncurses` binary.""" start="00:41:02.290" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And finally we get like a minimal configuration""" start="00:41:06.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and you can see that there's a whole bunch of nos here.""" start="00:41:10.300" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So, you know, we don't have cairo,""" start="00:41:13.700" video="mainVideo-doc" id="subtitle"]] +[[!template text="""we don't have imagemagick, we don't have dbus,""" start="00:41:15.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""you know, there's a whole bunch of stuff we don't have.""" start="00:41:18.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""We don't have X, we don't have libjansson, no tree-sitter.""" start="00:41:20.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This is really a bare-bones Emacs""" start="00:41:23.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""that is strictly terminal mode.""" start="00:41:25.960" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Then we actually build Emacs, which is, you know,""" start="00:41:28.640" video="mainVideo-doc" id="subtitle"]] +[[!template text="""kind of boring, we're just gonna type make""" start="00:41:30.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then make is gonna run successfully.""" start="00:41:33.260" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And make is gonna spew a ton of output, right?""" start="00:41:35.260" video="mainVideo-doc" id="subtitle"]] +[[!template text="""So here's where I do that /dev/null trick,""" start="00:41:37.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""where I pipe everything to /dev/null""" start="00:41:41.100" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then I, or I pipe standard output to /dev/null""" start="00:41:42.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and then I pipe standard error""" start="00:41:45.820" video="mainVideo-doc" id="subtitle"]] +[[!template text="""to wherever standard output's going.""" start="00:41:47.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then at the end to say that it ran successfully,""" start="00:41:50.240" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I say "Make ran successfully!"""" start="00:41:52.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Then we take a look at the Emacs binary""" start="00:41:55.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and you know, it's an elf binary.""" start="00:41:57.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And, you know, because this is running on my Mac,""" start="00:41:59.880" video="mainVideo-doc" id="subtitle"]] +[[!template text="""this is an ARM-based machine, this virtual machine is.""" start="00:42:01.720" video="mainVideo-doc" id="subtitle"]] +[[!template text="""Oops, and this is a bug.""" start="00:42:06.620" video="mainVideo-doc" id="subtitle"]] +[[!template text="""This really should be a macro call,""" start="00:42:10.520" video="mainVideo-doc" id="subtitle"]] +[[!template text="""but I think I have the wrong number of curly braces""" start="00:42:12.200" video="mainVideo-doc" id="subtitle"]] +[[!template text="""or something in there.""" start="00:42:14.800" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I need to figure out why that's not right.""" start="00:42:16.160" video="mainVideo-doc" id="subtitle"]] +[[!template text="""I'll look into that later.""" start="00:42:19.130" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we install Emacs and then we kind of show""" start="00:42:21.110" video="mainVideo-doc" id="subtitle"]] +[[!template text="""like the file sizes of everything in the home directory.""" start="00:42:23.980" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And then we, you know, show the binaries that got installed.""" start="00:42:27.720" video="mainVideo-doc" id="subtitle"]] + +[[!template new="1" text="""Final thoughts""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]] + +[[!template text="""Anyway, so this is the final thoughts section.""" start="00:42:31.990" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And my final thoughts are, is I hope you enjoyed this talk""" start="00:42:35.600" video="mainVideo-doc" id="subtitle"]] +[[!template text="""and I hope you actually learned a thing or two.""" start="00:42:39.220" video="mainVideo-doc" id="subtitle"]] +[[!template text="""All right, thanks everybody.""" start="00:42:42.380" video="mainVideo-doc" id="subtitle"]] +[[!template text="""And I'll see you all next time.""" start="00:42:43.360" video="mainVideo-doc" id="subtitle"]] + + + +Captioner: jc + +<a name="doc-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Well, we have about, I think,""" start="00:00:03.639" video="qanda-doc" id="subtitle"]] +[[!template text="""10 or 15 minutes of on-stream Q&A time.""" start="00:00:06.339" video="qanda-doc" id="subtitle"]] +[[!template text="""But if there's more questions than that,""" start="00:00:10.320" video="qanda-doc" id="subtitle"]] +[[!template text="""people are welcome to stay.""" start="00:00:11.420" video="qanda-doc" id="subtitle"]] +[[!template text="""If Mike has the time to answer some more,""" start="00:00:14.200" video="qanda-doc" id="subtitle"]] +[[!template text="""then Awesome.""" start="00:00:15.060" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I will be around for the rest of the""" start="00:00:20.920" video="qanda-doc" id="subtitle"]] +[[!template text="""conference. So I am spudpnds,""" start="00:00:22.440" video="qanda-doc" id="subtitle"]] +[[!template text="""which is spud upside down on IRC,""" start="00:00:26.580" video="qanda-doc" id="subtitle"]] +[[!template text="""if you want to hit me up on IRC.""" start="00:00:29.640" video="qanda-doc" id="subtitle"]] +[[!template text="""Nice.""" start="00:00:30.860" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: I see we already have a question on the pad,""" start="00:00:42.800" video="qanda-doc" id="subtitle"]] +[[!template text="""and it is, did you develop a variant of your""" start="00:00:45.920" video="qanda-doc" id="subtitle"]] +[[!template text="""document for CentOS?""" start="00:00:46.920" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: I did not. I have not messed with any other""" start="00:00:52.840" video="qanda-doc" id="subtitle"]] +[[!template text="""Red Hat distributions other than Fedora.""" start="00:00:56.120" video="qanda-doc" id="subtitle"]] +[[!template text="""I would like to expand the document out to""" start="00:00:59.960" video="qanda-doc" id="subtitle"]] +[[!template text="""Windows and to Mac OS as I think a lot of""" start="00:01:05.740" video="qanda-doc" id="subtitle"]] +[[!template text="""people really want to build Emacs on those""" start="00:01:07.720" video="qanda-doc" id="subtitle"]] +[[!template text="""platforms because it's much harder to get""" start="00:01:09.840" video="qanda-doc" id="subtitle"]] +[[!template text="""Emacs binaries running on those platforms.""" start="00:01:13.080" video="qanda-doc" id="subtitle"]] +[[!template text="""Although they're around on the internet it's""" start="00:01:15.860" video="qanda-doc" id="subtitle"]] +[[!template text="""not as bad as it used to be,""" start="00:01:17.320" video="qanda-doc" id="subtitle"]] +[[!template text="""but building Emacs is very,""" start="00:01:19.280" video="qanda-doc" id="subtitle"]] +[[!template text="""a very fun thing to do.""" start="00:01:21.000" video="qanda-doc" id="subtitle"]] +[[!template text="""And I encourage everybody to do that.""" start="00:01:22.760" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. We're also getting comments from folks""" start="00:01:46.160" video="qanda-doc" id="subtitle"]] +[[!template text="""here on BigBlueButton.""" start="00:01:46.800" video="qanda-doc" id="subtitle"]] +[[!template text="""EXC or Matt saying, great talk,""" start="00:01:49.640" video="qanda-doc" id="subtitle"]] +[[!template text="""good demonstration of what's possible.""" start="00:01:51.140" video="qanda-doc" id="subtitle"]] +[[!template text="""And Aaron thanking Mike,""" start="00:01:53.940" video="qanda-doc" id="subtitle"]] +[[!template text="""saying awesome presentation.""" start="00:01:54.760" video="qanda-doc" id="subtitle"]] +[[!template text="""And they missed the first few minutes and""" start="00:01:56.880" video="qanda-doc" id="subtitle"]] +[[!template text="""have to rewatch to get the portion that they""" start="00:01:59.540" video="qanda-doc" id="subtitle"]] +[[!template text="""missed.""" start="00:01:59.720" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: I had a hard time cramming the entire talk""" start="00:02:03.400" video="qanda-doc" id="subtitle"]] +[[!template text="""into 40 minutes. So I spoke quickly.""" start="00:02:08.220" video="qanda-doc" id="subtitle"]] +[[!template text="""I have a feeling I may have left some folks""" start="00:02:10.639" video="qanda-doc" id="subtitle"]] +[[!template text="""behind who weren't paying close attention.""" start="00:02:12.540" video="qanda-doc" id="subtitle"]] +[[!template text="""So rewatching might help.""" start="00:02:16.020" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, nice.""" start="00:02:18.920" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: I noticed Matt said that he helps maintain""" start="00:02:24.920" video="qanda-doc" id="subtitle"]] +[[!template text="""the shell functionality or Babel and last""" start="00:02:27.440" video="qanda-doc" id="subtitle"]] +[[!template text="""March they added async evaluation into""" start="00:02:30.240" video="qanda-doc" id="subtitle"]] +[[!template text="""session code blocks. Very cool,""" start="00:02:32.920" video="qanda-doc" id="subtitle"]] +[[!template text="""especially when you're doing something that""" start="00:02:34.680" video="qanda-doc" id="subtitle"]] +[[!template text="""takes a long time. It would be nice if Emacs""" start="00:02:36.420" video="qanda-doc" id="subtitle"]] +[[!template text="""wasn't locked up. I will definitely have to""" start="00:02:38.920" video="qanda-doc" id="subtitle"]] +[[!template text="""check that out. I use this technique at work""" start="00:02:50.220" video="qanda-doc" id="subtitle"]] +[[!template text="""a lot, like when I write documents to how to""" start="00:02:53.220" video="qanda-doc" id="subtitle"]] +[[!template text="""explain things to coworkers and such.""" start="00:02:55.900" video="qanda-doc" id="subtitle"]] +[[!template text="""And 1 of the things I had to explain was how""" start="00:03:00.060" video="qanda-doc" id="subtitle"]] +[[!template text="""to build AWS MySQL databases and replicas,""" start="00:03:05.220" video="qanda-doc" id="subtitle"]] +[[!template text="""and how to build them with very specific""" start="00:03:07.760" video="qanda-doc" id="subtitle"]] +[[!template text="""parameters to work with the system called""" start="00:03:09.960" video="qanda-doc" id="subtitle"]] +[[!template text="""Vitesse. And when I was running that""" start="00:03:13.060" video="qanda-doc" id="subtitle"]] +[[!template text="""document, building these kinds of MySQL""" start="00:03:15.660" video="qanda-doc" id="subtitle"]] +[[!template text="""databases in AWS with lockup Emacs for 20,""" start="00:03:20.280" video="qanda-doc" id="subtitle"]] +[[!template text="""25 minutes at a time. So,""" start="00:03:22.300" video="qanda-doc" id="subtitle"]] +[[!template text="""yeah, I'm really excited about async""" start="00:03:26.060" video="qanda-doc" id="subtitle"]] +[[!template text="""evaluation.""" start="00:03:26.540" video="qanda-doc" id="subtitle"]] +[[!template text="""Totally. Oh yeah, Python mode I think has had""" start="00:04:03.780" video="qanda-doc" id="subtitle"]] +[[!template text="""async for shell blocks for a while.""" start="00:04:05.600" video="qanda-doc" id="subtitle"]] +[[!template text="""I think there's a third-party package at Elba""" start="00:04:09.220" video="qanda-doc" id="subtitle"]] +[[!template text="""that adds async support for that.""" start="00:04:11.260" video="qanda-doc" id="subtitle"]] +[[!template text="""But yeah, I explicitly wanted to make sure""" start="00:04:16.360" video="qanda-doc" id="subtitle"]] +[[!template text="""that it would work with super vanilla stuff.""" start="00:04:18.620" video="qanda-doc" id="subtitle"]] +[[!template text="""Oh, it's built in. I see.""" start="00:04:20.060" video="qanda-doc" id="subtitle"]] +[[!template text="""Yeah, I didn't realize it was built in for""" start="00:04:24.140" video="qanda-doc" id="subtitle"]] +[[!template text="""Python blocks. I'll have to check that out.""" start="00:04:25.920" video="qanda-doc" id="subtitle"]] +[[!template text="""There's so much Emacs.""" start="00:04:27.800" video="qanda-doc" id="subtitle"]] +[[!template text="""It's hard to wrap your head even around a""" start="00:04:32.080" video="qanda-doc" id="subtitle"]] +[[!template text="""tiny portion of it. It's such a deep topic.""" start="00:04:34.900" video="qanda-doc" id="subtitle"]] +[[!template text="""Looks like somebody in IRC said,""" start="00:04:47.660" video="qanda-doc" id="subtitle"]] +[[!template text="""I can't wait to add some of this stuff to my""" start="00:04:50.220" video="qanda-doc" id="subtitle"]] +[[!template text="""documents. And that really makes me happy.""" start="00:04:52.680" video="qanda-doc" id="subtitle"]] +[[!template text="""I hope people go out and write literate Org""" start="00:04:55.400" video="qanda-doc" id="subtitle"]] +[[!template text="""Mode documents that do amazing things.""" start="00:04:57.180" video="qanda-doc" id="subtitle"]] +[[!template text="""When's the next talk? We have like,""" start="00:05:25.640" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: let's see. I think we have about 4 or 5""" start="00:05:30.900" video="qanda-doc" id="subtitle"]] +[[!template text="""minutes live on stream for Q&A.""" start="00:05:32.960" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, okay. Oh, here's the question.""" start="00:05:35.860" video="qanda-doc" id="subtitle"]] +[[!template text="""Blaine asks, are you running Emacs from the""" start="00:05:39.160" video="qanda-doc" id="subtitle"]] +[[!template text="""host machine? And yeah,""" start="00:05:41.420" video="qanda-doc" id="subtitle"]] +[[!template text="""so I'm running Emacs on the exact same""" start="00:05:43.940" video="qanda-doc" id="subtitle"]] +[[!template text="""machine that I'm building Emacs on.""" start="00:05:46.560" video="qanda-doc" id="subtitle"]] +[[!template text="""And I had first thought about doing that over""" start="00:05:50.580" video="qanda-doc" id="subtitle"]] +[[!template text="""Tramp. And I thought that would be a very""" start="00:05:53.440" video="qanda-doc" id="subtitle"]] +[[!template text="""cool demo to show how you could do that""" start="00:05:55.360" video="qanda-doc" id="subtitle"]] +[[!template text="""remotely on Tramp so you didn't need Emacs on""" start="00:05:57.980" video="qanda-doc" id="subtitle"]] +[[!template text="""the host machine. But I decided it would be a""" start="00:06:03.160" video="qanda-doc" id="subtitle"]] +[[!template text="""lot easier, and as I ran into a deadline to""" start="00:06:05.640" video="qanda-doc" id="subtitle"]] +[[!template text="""get the talk completed,""" start="00:06:06.360" video="qanda-doc" id="subtitle"]] +[[!template text="""I abandoned that notion for the""" start="00:06:08.900" video="qanda-doc" id="subtitle"]] +[[!template text="""straightforward approach.""" start="00:06:09.880" video="qanda-doc" id="subtitle"]] +[[!template text="""But ideally, I would spin up virtual machines""" start="00:06:13.260" video="qanda-doc" id="subtitle"]] +[[!template text="""and then using the Org Mode document and""" start="00:06:16.980" video="qanda-doc" id="subtitle"]] +[[!template text="""having Org Mode reach out to those machines""" start="00:06:18.960" video="qanda-doc" id="subtitle"]] +[[!template text="""via SSH and Tramp.""" start="00:06:20.440" video="qanda-doc" id="subtitle"]] +[[!template text="""Oh yeah, there's also a little bit of""" start="00:06:33.400" video="qanda-doc" id="subtitle"]] +[[!template text="""discussion on IRC about org macros and how""" start="00:06:38.200" video="qanda-doc" id="subtitle"]] +[[!template text="""they made their way into the document.""" start="00:06:39.720" video="qanda-doc" id="subtitle"]] +[[!template text="""And I remember when I first discovered org""" start="00:06:42.540" video="qanda-doc" id="subtitle"]] +[[!template text="""macros by reading the org mode documentation,""" start="00:06:44.480" video="qanda-doc" id="subtitle"]] +[[!template text="""I was really excited because I thought I""" start="00:06:47.360" video="qanda-doc" id="subtitle"]] +[[!template text="""could limit a lot of the boilerplate I end up""" start="00:06:49.860" video="qanda-doc" id="subtitle"]] +[[!template text="""typing. But as we discussed,""" start="00:06:51.900" video="qanda-doc" id="subtitle"]] +[[!template text="""ORD macros, I think, only work in 1 context""" start="00:06:54.760" video="qanda-doc" id="subtitle"]] +[[!template text="""in your ORD mode document,""" start="00:06:56.380" video="qanda-doc" id="subtitle"]] +[[!template text="""and I think that's in the pros section.""" start="00:06:58.280" video="qanda-doc" id="subtitle"]] +[[!template text="""So You can't resolve a macro inside a header""" start="00:07:03.740" video="qanda-doc" id="subtitle"]] +[[!template text="""arg, for example, or inside an options block.""" start="00:07:06.600" video="qanda-doc" id="subtitle"]] +[[!template text="""It would be awesome if macros worked""" start="00:07:09.560" video="qanda-doc" id="subtitle"]] +[[!template text="""everywhere, but I'm happy to have them just""" start="00:07:12.280" video="qanda-doc" id="subtitle"]] +[[!template text="""as they are now.""" start="00:07:13.500" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: Indeed, they're very convenient.""" start="00:07:22.960" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: And Blaine also says, thank you for showing""" start="00:07:32.020" video="qanda-doc" id="subtitle"]] +[[!template text="""what's possible with literate documentation.""" start="00:07:33.420" video="qanda-doc" id="subtitle"]] +[[!template text="""This is mind-blowing. Yeah,""" start="00:07:35.380" video="qanda-doc" id="subtitle"]] +[[!template text="""I think so too. I first saw this technique in""" start="00:07:39.400" video="qanda-doc" id="subtitle"]] +[[!template text="""Howard's video, Literate DevOps,""" start="00:07:41.020" video="qanda-doc" id="subtitle"]] +[[!template text="""and I remember I was just picking up parts of""" start="00:07:44.720" video="qanda-doc" id="subtitle"]] +[[!template text="""my mind after it exploded after having""" start="00:07:46.720" video="qanda-doc" id="subtitle"]] +[[!template text="""watched that video. So I wanted to do some of""" start="00:07:49.740" video="qanda-doc" id="subtitle"]] +[[!template text="""it myself, and that's where I came up with a""" start="00:07:51.820" video="qanda-doc" id="subtitle"]] +[[!template text="""couple different approaches to that.""" start="00:07:54.020" video="qanda-doc" id="subtitle"]] +[[!template text="""It's not just for, you know,""" start="00:07:57.600" video="qanda-doc" id="subtitle"]] +[[!template text="""making literate Emacs configurations.""" start="00:07:59.060" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: For Sure. We have another remark slash""" start="00:08:04.680" video="qanda-doc" id="subtitle"]] +[[!template text="""question on the pad. Someone saying great""" start="00:08:07.260" video="qanda-doc" id="subtitle"]] +[[!template text="""presentation. The preparation is outstanding.""" start="00:08:09.800" video="qanda-doc" id="subtitle"]] +[[!template text="""And for someone like me that never touched""" start="00:08:12.520" video="qanda-doc" id="subtitle"]] +[[!template text="""the org-mux side of Emacs,""" start="00:08:14.040" video="qanda-doc" id="subtitle"]] +[[!template text="""What do you feel is the more complex part to""" start="00:08:17.040" video="qanda-doc" id="subtitle"]] +[[!template text="""tackle? You made it seem simple,""" start="00:08:19.120" video="qanda-doc" id="subtitle"]] +[[!template text="""but the complexity there.""" start="00:08:20.500" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Just getting all of the configuration""" start="00:08:25.840" video="qanda-doc" id="subtitle"]] +[[!template text="""set up the way you want it is the hardest""" start="00:08:30.800" video="qanda-doc" id="subtitle"]] +[[!template text="""part. So some of the defaults are,""" start="00:08:34.780" video="qanda-doc" id="subtitle"]] +[[!template text="""you know, they don't look good when you""" start="00:08:37.120" video="qanda-doc" id="subtitle"]] +[[!template text="""render them out in LaTeX and finally PDF.""" start="00:08:39.320" video="qanda-doc" id="subtitle"]] +[[!template text="""And there's a lot of work to be done to tweak""" start="00:08:42.039" video="qanda-doc" id="subtitle"]] +[[!template text="""the LaTeX environment so it looks as pretty""" start="00:08:45.380" video="qanda-doc" id="subtitle"]] +[[!template text="""as you might want it. And then just Org Mode""" start="00:08:48.620" video="qanda-doc" id="subtitle"]] +[[!template text="""has a lot of knobs that you can tune,""" start="00:08:50.800" video="qanda-doc" id="subtitle"]] +[[!template text="""and they have a pretty large impact on how""" start="00:08:53.720" video="qanda-doc" id="subtitle"]] +[[!template text="""your document is exported.""" start="00:08:55.520" video="qanda-doc" id="subtitle"]] +[[!template text="""So I think the hardest part is just knowing""" start="00:09:00.360" video="qanda-doc" id="subtitle"]] +[[!template text="""what's possible and knowing where all the""" start="00:09:03.820" video="qanda-doc" id="subtitle"]] +[[!template text="""knobs are to tune and twist.""" start="00:09:05.200" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: Got another question on the pad.""" start="00:09:10.240" video="qanda-doc" id="subtitle"]] +[[!template text="""And I think we have about a minute or so on""" start="00:09:12.040" video="qanda-doc" id="subtitle"]] +[[!template text="""the stream. So I'll read this question as""" start="00:09:13.740" video="qanda-doc" id="subtitle"]] +[[!template text="""well. But folks, you're welcome to continue""" start="00:09:15.160" video="qanda-doc" id="subtitle"]] +[[!template text="""on the pad or just come join here on BBB""" start="00:09:17.560" video="qanda-doc" id="subtitle"]] +[[!template text="""after myself and the stream move on to the""" start="00:09:20.200" video="qanda-doc" id="subtitle"]] +[[!template text="""next talk. Yeah, and the next question is,""" start="00:09:23.100" video="qanda-doc" id="subtitle"]] +[[!template text="""how do you normally debug,""" start="00:09:24.320" video="qanda-doc" id="subtitle"]] +[[!template text="""for example, view the logs or see failed""" start="00:09:26.640" video="qanda-doc" id="subtitle"]] +[[!template text="""statuses when the commands in the source""" start="00:09:29.440" video="qanda-doc" id="subtitle"]] +[[!template text="""blocks fail, especially if they output lots""" start="00:09:32.020" video="qanda-doc" id="subtitle"]] +[[!template text="""and lots of logs, and you need to see the""" start="00:09:34.640" video="qanda-doc" id="subtitle"]] +[[!template text="""full history of the build.""" start="00:09:35.640" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so I see it in the messages buffer""" start="00:09:39.520" video="qanda-doc" id="subtitle"]] +[[!template text="""whenever I export a document.""" start="00:09:42.080" video="qanda-doc" id="subtitle"]] +[[!template text="""If there's a failure, that's typically where""" start="00:09:44.540" video="qanda-doc" id="subtitle"]] +[[!template text="""it's written to. And I will actually kill the""" start="00:09:47.460" video="qanda-doc" id="subtitle"]] +[[!template text="""messages buffer before I export so I know""" start="00:09:49.960" video="qanda-doc" id="subtitle"]] +[[!template text="""that only the messages in the buffer are for""" start="00:09:52.840" video="qanda-doc" id="subtitle"]] +[[!template text="""my given export and I mentioned that""" start="00:09:55.800" video="qanda-doc" id="subtitle"]] +[[!template text="""debugging trick where you name all of your""" start="00:09:58.580" video="qanda-doc" id="subtitle"]] +[[!template text="""org-mode source blocks So if there is a""" start="00:10:00.720" video="qanda-doc" id="subtitle"]] +[[!template text="""problem in 1 of the blocks,""" start="00:10:02.320" video="qanda-doc" id="subtitle"]] +[[!template text="""it'll actually tell you what the block,""" start="00:10:06.560" video="qanda-doc" id="subtitle"]] +[[!template text="""the name of the block the error occurred in.""" start="00:10:09.140" video="qanda-doc" id="subtitle"]] +[[!template text="""If you don't do that, it just gives you a""" start="00:10:13.160" video="qanda-doc" id="subtitle"]] +[[!template text="""position number in the buffer.""" start="00:10:14.800" video="qanda-doc" id="subtitle"]] +[[!template text="""And whenever I tried to convert those""" start="00:10:18.620" video="qanda-doc" id="subtitle"]] +[[!template text="""position numbers to actual places where the""" start="00:10:21.400" video="qanda-doc" id="subtitle"]] +[[!template text="""error occurred, it was never exactly where I""" start="00:10:23.600" video="qanda-doc" id="subtitle"]] +[[!template text="""suspected it would be.""" start="00:10:24.640" video="qanda-doc" id="subtitle"]] +[[!template text="""So I found that very difficult in debugging.""" start="00:10:26.680" video="qanda-doc" id="subtitle"]] +[[!template text="""So the only real debugging tip I have is name""" start="00:10:29.800" video="qanda-doc" id="subtitle"]] +[[!template text="""your source blocks, even if you don't refer""" start="00:10:32.840" video="qanda-doc" id="subtitle"]] +[[!template text="""to them later.""" start="00:10:33.480" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: I think that's all the time we have on""" start="00:10:39.860" video="qanda-doc" id="subtitle"]] +[[!template text="""stream. And I also have to drop as well.""" start="00:10:41.320" video="qanda-doc" id="subtitle"]] +[[!template text="""But thanks again so much,""" start="00:10:42.540" video="qanda-doc" id="subtitle"]] +[[!template text="""Mike. And folks are welcome to come here and""" start="00:10:46.160" video="qanda-doc" id="subtitle"]] +[[!template text="""continue discussion here.""" start="00:10:47.980" video="qanda-doc" id="subtitle"]] +[[!template text="""Thanks again.""" start="00:10:52.600" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: You""" start="00:21:45.060" video="qanda-doc" id="subtitle"]] +[[!template text="""Thank""" start="00:22:00.060" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 0]: you""" start="00:22:15.060" video="qanda-doc" id="subtitle"]] +[[!template text="""[Speaker 1]: for""" start="00:22:28.400" video="qanda-doc" id="subtitle"]] +[[!template text="""watching. You""" start="00:22:45.060" video="qanda-doc" id="subtitle"]] +[[!template text="""you""" start="00:23:00.260" video="qanda-doc" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20doc%3A%20Literate%20Documentation%20with%20Emacs%20and%20Org%20Mode) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/doc-before.md b/2023/info/doc-before.md new file mode 100644 index 00000000..8e799bc4 --- /dev/null +++ b/2023/info/doc-before.md @@ -0,0 +1,45 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +Actually a general-audience talk; just on the development track for scheduling purposes + +[[!toc ]] +Format: 43-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="doc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="doc-mainVideo" data=""" +00:00.000 Introduction +00:57.760 Org Babel and literate programming +02:14.080 This presentation +04:53.480 Getting started +06:55.780 README +07:23.500 Writing a code block +08:10.460 :results none +08:40.320 Confirmation +10:36.960 Running blocks automatically +13:53.000 Export options +16:05.700 Substituting constants +17:25.740 Getting the properties +20:03.060 Macros +21:05.240 Properties in practice +22:09.020 Using a prefix +23:42.010 Switching distributions +27:14.150 A tour +30:16.200 TeX and LaTeX +31:09.250 Other prerequisites +32:00.060 Caching +36:20.610 Looking at the PDF +39:29.440 Errors +42:31.990 Final thoughts + +"""]]<div></div>Duration: 42:45 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/8ak16Qy1tjeFEqmcnan6MQ">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="doc-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="doc-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus"></audio></div><div></div>Duration: 11:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/doc-nav.md b/2023/info/doc-nav.md new file mode 100644 index 00000000..5f8eaf6b --- /dev/null +++ b/2023/info/doc-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a> +Next by track: <a href="/2023/talks/windows">Windows into Freedom</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/eat-after.md b/2023/info/eat-after.md new file mode 100644 index 00000000..41bfbc90 --- /dev/null +++ b/2023/info/eat-after.md @@ -0,0 +1,113 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="eat-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""Hello everyone. Welcome to my talk.""" start="00:00:00.000" video="mainVideo-eat" id="subtitle"]] +[[!template text="""I am Akib Azmain Turja and my talk is titled""" start="00:00:04.200" video="mainVideo-eat" id="subtitle"]] +[[!template text=""""Eat and Eat-powered Eshell:""" start="00:00:09.360" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Fast, featureful terminal inside Emacs."""" start="00:00:11.520" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Benchmarking""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""So I just claimed that Eat is a fast terminal emulator.""" start="00:00:15.440" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Let me show you that. I will print a 1-megabyte sized file""" start="00:00:22.840" video="mainVideo-eat" id="subtitle"]] +[[!template text="""in the terminal using this command.""" start="00:00:33.280" video="mainVideo-eat" id="subtitle"]] +[[!template text="""It takes 0.76 seconds. Now let's benchmark term-mode.""" start="00:00:39.040" video="mainVideo-eat" id="subtitle"]] +[[!template text="""I will be in term -mode. I use the same command,""" start="00:00:47.360" video="mainVideo-eat" id="subtitle"]] +[[!template text="""and it's clearly the loser.""" start="00:00:54.800" video="mainVideo-eat" id="subtitle"]] +[[!template text="""It took 12 seconds, more than an order of magnitude slower.""" start="00:01:06.600" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Let's also measure the speed of return.""" start="00:01:18.320" video="mainVideo-eat" id="subtitle"]] +[[!template text="""And it took 0.79 seconds.""" start="00:01:27.280" video="mainVideo-eat" id="subtitle"]] +[[!template text="""But this is actually a little bit slower than Eat.""" start="00:01:33.480" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Why? That shouldn't happen.""" start="00:01:36.160" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Anyway, hopefully that shows how fast Eat is.""" start="00:01:41.800" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Running programs""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""So let's run some extra programs in Eat,""" start="00:01:49.720" video="mainVideo-eat" id="subtitle"]] +[[!template text="""like top. You can also run htop or even btop.""" start="00:01:54.440" video="mainVideo-eat" id="subtitle"]] +[[!template text="""There is a fancy version of top.""" start="00:02:05.640" video="mainVideo-eat" id="subtitle"]] +[[!template text="""And obviously you can run Emacs in it.""" start="00:02:08.560" video="mainVideo-eat" id="subtitle"]] +[[!template text="""There is mouse support, and there is true color support.""" start="00:02:20.240" video="mainVideo-eat" id="subtitle"]] +[[!template text="""You can show any color in the terminal""" start="00:02:33.880" video="mainVideo-eat" id="subtitle"]] +[[!template text="""as long as your main display supports it.""" start="00:02:38.800" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Shell integration""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""And then there is shell integration.""" start="00:02:47.080" video="mainVideo-eat" id="subtitle"]] +[[!template text="""For example, directory tracking.""" start="00:02:50.360" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Like, I can switch to some other directory""" start="00:02:52.400" video="mainVideo-eat" id="subtitle"]] +[[!template text="""and Emacs follows the shell directory.""" start="00:03:07.480" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Prompt annotation""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""Then there is prompt annotation,""" start="00:03:11.920" video="mainVideo-eat" id="subtitle"]] +[[!template text="""this column. These zeros indicate""" start="00:03:16.440" video="mainVideo-eat" id="subtitle"]] +[[!template text="""that the command has executed successfully.""" start="00:03:20.320" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Then you can navigate between commands like this.""" start="00:03:27.080" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Message passing""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""There is message passing.""" start="00:03:37.680" video="mainVideo-eat" id="subtitle"]] +[[!template text="""By message passing, I mean sending something""" start="00:03:39.400" video="mainVideo-eat" id="subtitle"]] +[[!template text="""from the terminal to the host Emacs.""" start="00:03:44.120" video="mainVideo-eat" id="subtitle"]] +[[!template text="""By host Emacs, I mean Emacs running the terminal.""" start="00:03:46.960" video="mainVideo-eat" id="subtitle"]] +[[!template text="""For example I can say "hi" and it's showing "hi"""" start="00:03:52.120" video="mainVideo-eat" id="subtitle"]] +[[!template text="""in this echo area of my Emacs.""" start="00:03:57.440" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Shell integration""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""Then let's show you the killer feature of Eat,""" start="00:04:03.520" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Eat's shell integration.""" start="00:04:08.680" video="mainVideo-eat" id="subtitle"]] +[[!template text="""You can run any program in it. For example: top, btop,""" start="00:04:20.240" video="mainVideo-eat" id="subtitle"]] +[[!template text="""and obviously Emacs itself.""" start="00:04:37.840" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Input modes""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""So let's discuss how to use Eat. There are four input modes.""" start="00:04:52.160" video="mainVideo-eat" id="subtitle"]] +[[!template text="""The first one is semi-char mode. That is the default mode.""" start="00:05:03.160" video="mainVideo-eat" id="subtitle"]] +[[!template text="""This is like vterm. All keys are the same to your terminal""" start="00:05:07.320" video="mainVideo-eat" id="subtitle"]] +[[!template text="""except these keys: C-c, C-x, C-g, M-x, etc.""" start="00:05:10.920" video="mainVideo-eat" id="subtitle"]] +[[!template text="""And then there is char-mode, where all keys""" start="00:05:17.880" video="mainVideo-eat" id="subtitle"]] +[[!template text="""are same to your terminal, except this M-RET key""" start="00:05:20.600" video="mainVideo-eat" id="subtitle"]] +[[!template text="""which takes you back to the semi-char mode.""" start="00:05:26.920" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Then there is Emacs mode where you can select""" start="00:05:29.680" video="mainVideo-eat" id="subtitle"]] +[[!template text="""and copy from the terminal buffer.""" start="00:05:34.560" video="mainVideo-eat" id="subtitle"]] +[[!template text="""And finally, there is line mode.""" start="00:05:39.720" video="mainVideo-eat" id="subtitle"]] +[[!template text="""You can use it to use your terminal like a comint buffer.""" start="00:05:42.680" video="mainVideo-eat" id="subtitle"]] +[[!template text="""All these input modes are available in both Eat""" start="00:05:49.200" video="mainVideo-eat" id="subtitle"]] +[[!template text="""and eat-eshell mode, except this line mode--""" start="00:05:56.000" video="mainVideo-eat" id="subtitle"]] +[[!template text="""it's only available on Eat.""" start="00:06:05.880" video="mainVideo-eat" id="subtitle"]] +[[!template text="""By "on Eat", I mean the terminal you get""" start="00:06:10.440" video="mainVideo-eat" id="subtitle"]] +[[!template text="""by this eat command. By eshell, I mean""" start="00:06:13.960" video="mainVideo-eat" id="subtitle"]] +[[!template text="""when eat-eshell integration is enabled""" start="00:06:20.160" video="mainVideo-eat" id="subtitle"]] +[[!template text="""inside the eshell buffer.""" start="00:06:23.145" video="mainVideo-eat" id="subtitle"]] + +[[!template new="1" text="""Documentation""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]] + +[[!template text="""There is an info manual,""" start="00:06:33.760" video="mainVideo-eat" id="subtitle"]] +[[!template text="""And also the README is quite informative""" start="00:06:36.720" video="mainVideo-eat" id="subtitle"]] +[[!template text="""for you to get started.""" start="00:06:51.600" video="mainVideo-eat" id="subtitle"]] +[[!template text="""If you hit any problem,""" start="00:06:55.000" video="mainVideo-eat" id="subtitle"]] +[[!template text="""there is a dedicated chapter for debugging that,""" start="00:07:13.520" video="mainVideo-eat" id="subtitle"]] +[[!template text="""a common problems chapter.""" start="00:07:22.960" video="mainVideo-eat" id="subtitle"]] +[[!template text="""If your problem is still not fixed,""" start="00:07:26.120" video="mainVideo-eat" id="subtitle"]] +[[!template text="""please report it to me.""" start="00:07:28.000" video="mainVideo-eat" id="subtitle"]] +[[!template text="""This helps me improve it for everyone.""" start="00:07:29.520" video="mainVideo-eat" id="subtitle"]] +[[!template text="""When you report, please read this chapter""" start="00:07:36.120" video="mainVideo-eat" id="subtitle"]] +[[!template text="""so that you can make a better bug report.""" start="00:07:40.360" video="mainVideo-eat" id="subtitle"]] +[[!template text="""I am really looking forward to how people use it""" start="00:07:53.160" video="mainVideo-eat" id="subtitle"]] +[[!template text="""in their workflow.""" start="00:07:57.640" video="mainVideo-eat" id="subtitle"]] +[[!template text="""I am excited about that.""" start="00:07:59.080" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Hopefully you enjoyed my talk. That was all.""" start="00:08:03.480" video="mainVideo-eat" id="subtitle"]] +[[!template text="""Enjoy EmacsConf. Goodbye.""" start="00:08:10.760" video="mainVideo-eat" id="subtitle"]] + +Questions or comments? Please e-mail [akib@disroot.org](mailto:akib@disroot.org?subject=Comment%20for%20EmacsConf%202023%20eat%3A%20Eat%20and%20Eat%20powered%20Eshell%2C%20fast%20featureful%20terminal%20inside%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/eat-before.md b/2023/info/eat-before.md new file mode 100644 index 00000000..5620d10d --- /dev/null +++ b/2023/info/eat-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 9-min talk; Q&A: Etherpad +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="eat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 08:13 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t4pPDtbXiZdHHEyWJVUtNs">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/eat-nav.md b/2023/info/eat-nav.md new file mode 100644 index 00000000..3d8f174b --- /dev/null +++ b/2023/info/eat-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/parallel">Parallel text replacement</a> +Next by track: <a href="/2023/talks/poltys">The browser in a buffer</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/emacsconf-after.md b/2023/info/emacsconf-after.md new file mode 100644 index 00000000..d84a94cd --- /dev/null +++ b/2023/info/emacsconf-after.md @@ -0,0 +1,3170 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="emacsconf-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Hi, I'm Sacha Chua. This presentation is a quick tour""" start="00:00:00.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""of some of the things we do to run EmacsConf.""" start="00:00:04.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Since 2019, we've run it as an entirely online conference,""" start="00:00:07.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and we do as much of the organization as possible""" start="00:00:12.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""within Emacs itself.""" start="00:00:14.700" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Reasons""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""I have three reasons for making this presentation.""" start="00:00:16.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The first is entirely selfish: I need to figure out""" start="00:00:19.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""all the stuff I built for last year's EmacsConf,""" start="00:00:22.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since it was a bit of a crazy scramble.""" start="00:00:25.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The second is that I want to show people""" start="00:00:28.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the process of thinking about a complex project,""" start="00:00:30.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""looking for little things to automate in Emacs,""" start="00:00:33.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and building things up from small pieces.""" start="00:00:35.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Maybe you'll get some ideas""" start="00:00:38.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and start building tools for yourself, too.""" start="00:00:39.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The third is that you find any of these little tools interesting,""" start="00:00:42.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I want to point you to blog posts and source code""" start="00:00:47.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""where you can find out more.""" start="00:00:49.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That way, you don't need to try""" start="00:00:51.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to read and understand everything quickly.""" start="00:00:52.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can find this presentation and other links""" start="00:00:55.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""on the talk page at emacsconf.org/2023/talks/emacsconf.""" start="00:00:57.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""There are a lot of different parts,""" start="00:01:04.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so I'll try to use this map to help make sense of it all.""" start="00:01:06.320" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Information""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""There's so much information to work with,""" start="00:01:09.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so it probably doesn't surprise you that we use Org Mode a lot.""" start="00:01:11.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Most of the conference coordination happens over e-mail,""" start="00:01:14.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which I can quickly search with notmuch.""" start="00:01:18.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some of the information is private,""" start="00:01:20.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like emergency contact numbers.""" start="00:01:22.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We store the talk information in a private Org file.""" start="00:01:24.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I try to put as much as possible""" start="00:01:28.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into our public organizers' notebook""" start="00:01:30.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that processes and decisions are documented.""" start="00:01:32.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We need a public website.""" start="00:01:35.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We use Ikiwiki to make the webpages""" start="00:01:36.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because we can work with plain text files""" start="00:01:39.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in a Git repository.""" start="00:01:41.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We also make a few static HTML pages""" start="00:01:42.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for things where Ikiwiki is a little awkward.""" start="00:01:45.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We post announcements to mailing lists.""" start="00:01:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We also receive submissions in a private mailing list""" start="00:01:50.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that a number of people can review them.""" start="00:01:53.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We have a backstage area""" start="00:01:55.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for sharing files with volunteers and speakers.""" start="00:01:56.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We share those files publicly when the talk goes live.""" start="00:01:59.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And there's all the other stuff that goes into running EmacsConf,""" start="00:02:03.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like shell scripts and configuration files.""" start="00:02:06.320" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Properties""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""First, speakers propose a talk by sending an e-mail.""" start="00:02:09.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We take the info from that e-mail and store it in Org properties""" start="00:02:12.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can work with it later.""" start="00:02:15.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Every talk is identified with an ID,""" start="00:02:18.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but since `:ID:` and `:CUSTOM_ID:` have special meanings for Org,""" start="00:02:20.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I use `:SLUG:` as the keyword.""" start="00:02:24.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Speakers' names go into the `:NAME:` property,""" start="00:02:25.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and a short version goes into `:NAME_SHORT:`""" start="00:02:27.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can include that in a greeting.""" start="00:02:29.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""If people follow the template closely...""" start="00:02:32.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...we can even automatically fill in the Org subtree for their talk.""" start="00:02:34.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can use regular expressions to recognize the text""" start="00:02:38.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and extract the properties.""" start="00:02:40.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Other properties need to be set by hand.""" start="00:02:42.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I often mess things up when I retype them.""" start="00:02:45.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""To avoid typos, I have a function that sets a property""" start="00:02:47.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""based on the current region. I bind that to `C-c C-x p`.""" start="00:02:51.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That makes it much easier to set properties""" start="00:02:56.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that couldn't automatically be recognized.""" start="00:02:58.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it makes sense to dynamically generate a property""" start="00:03:01.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then edit it, like with filenames.""" start="00:03:04.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We like to name all the talk files the same way,""" start="00:03:07.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but sometimes special characters in talk titles or speaker names""" start="00:03:10.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""need a little tweaking. I'll put that in a `:FILE_PREFIX:` property""" start="00:03:14.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so I can edit it.""" start="00:03:17.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""An Org property match can map over all the talk entries""" start="00:03:19.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that don't have `:FILE_PREFIX:` defined.""" start="00:03:22.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can use that `:FILE_PREFIX:` to rename files from Emacs.""" start="00:03:25.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""With that property, we can then rename files using that prefix,""" start="00:03:29.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""some extra text, and the file extension.""" start="00:03:32.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it's easier to work with the data outside Emacs,""" start="00:03:35.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when I want to rename files with a shell script.""" start="00:03:38.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""If I export a subset of the data as JSON""" start="00:03:42.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or JavaScript Object Notation, using `json-encode`...""" start="00:03:45.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... then I can extract the data with `jq`""" start="00:03:48.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and use it in shell scripts.""" start="00:03:51.120" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Timezones""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Another example of semi-structured information""" start="00:03:53.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""is speaker availability.""" start="00:03:55.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We have speakers from all over the world,""" start="00:03:57.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so we try to schedule live Q&A sessions when they're around.""" start="00:03:59.620" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That means working with timezones.""" start="00:04:03.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Completion makes it much easier to set the timezone property""" start="00:04:05.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""without worrying about typos.""" start="00:04:08.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can take advantage of the timezone list from the tzc package,""" start="00:04:10.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which works with Unix timezone definitions.""" start="00:04:14.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can convert times using Emacs.""" start="00:04:17.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Using a standard format to encode the availability""" start="00:04:19.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""makes it easier to parse.""" start="00:04:22.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can use those availability constraints to report errors""" start="00:04:24.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when I'm experimenting with the schedule.""" start="00:04:27.440" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Scheduling""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Now that I have the availability information,""" start="00:04:29.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can think about scheduling.""" start="00:04:31.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""When we were planning EmacsConf 2022, the schedule was so full,""" start="00:04:33.941" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I wanted to see if we could make it more manageable""" start="00:04:38.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""by splitting it up into two tracks.""" start="00:04:40.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It was hard to think about times with just a table.""" start="00:04:43.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I was able to turn the schedule information""" start="00:04:45.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into an SVG to convince the other organizers""" start="00:04:48.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to get on board with this crazy plan.""" start="00:04:51.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And the nice thing about SVGs is that""" start="00:04:53.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""they can even be clickable on the wiki.""" start="00:04:54.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Being able to quickly make SVGs of different schedules""" start="00:04:57.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""also helped me test scheduling ideas and think out loud.""" start="00:05:00.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I could change the time between talks, the order of the talks,""" start="00:05:04.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and even what tracks the talks were in.""" start="00:05:06.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This was helpful when I needed to include""" start="00:05:08.940" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""some late submissions or availability changes""" start="00:05:10.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and I wanted to ask speakers what they thought.""" start="00:05:13.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""They could see the different schedule options themselves.""" start="00:05:15.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's really nice to have Emacs Lisp support for working with SVGs.""" start="00:05:18.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I also love how I can have an Emacs Lisp block""" start="00:05:22.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in an Org Mode document that updates an SVG""" start="00:05:25.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that I can view right there in my text editor.""" start="00:05:28.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Setting the timezone lets me automatically translate times""" start="00:05:32.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to the speaker's local timezone when I e-mail them.""" start="00:05:34.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's mostly a matter of using `format-time-string` with a timezone.""" start="00:05:37.820" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Templates""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""There's a lot of text to work with,""" start="00:05:41.780" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""which means templates are super handy.""" start="00:05:43.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""There are a number of templating functions for Emacs Lisp,""" start="00:05:45.700" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like the built-in `tempo.el` or `s-lex-format` from `s.el`.""" start="00:05:48.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I ended up writing something""" start="00:05:52.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that works with property lists (plists) instead,""" start="00:05:54.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since we use plists all over the emacsconf-el library.""" start="00:05:58.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""All it does is replace `${variable}`""" start="00:06:02.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with the value from a property list.""" start="00:06:04.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I use this mostly because I have a hard time""" start="00:06:05.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""keeping track of which `%s` is which when I use `format`,""" start="00:06:07.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and it's hard to get an overall view if I just use `concat`.""" start="00:06:11.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code looks for the properties and replaces them with the values.""" start="00:06:14.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I just find it a little easier to think about sometimes.""" start="00:06:17.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Getting all the information is just a matter of going over""" start="00:06:21.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""all the talk entries using `org-map-entries`.""" start="00:06:24.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This builds the talk info by running a bunch of functions.""" start="00:06:27.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some functions get the information from the Org file.""" start="00:06:30.700" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Other functions use the info already collected.""" start="00:06:33.820" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This can take a while to do again and again.""" start="00:06:36.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's useful to `memoize` this function""" start="00:06:39.260" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when I know I'll be using it a lot,""" start="00:06:41.740" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when I export the organizers notebook.""" start="00:06:43.500" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Memoize caches recent values.""" start="00:06:45.960" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Wiki""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""We combine this templating function""" start="00:06:48.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with the talk information""" start="00:06:50.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to fill in the conference wiki,""" start="00:06:51.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""since that's a matter of writing templated strings to files.""" start="00:06:53.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The talk pages are generated once""" start="00:06:56.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then left alone for manual editing,""" start="00:06:58.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""while the navigation is regenerated""" start="00:07:00.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""every time we change the details.""" start="00:07:02.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Here are some examples""" start="00:07:04.660" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""of how we fill in the conference wiki.""" start="00:07:05.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We put in the format of the talk, how Q&A works,""" start="00:07:07.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and what the status is.""" start="00:07:10.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Once the talk is live, we include the video""" start="00:07:12.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the links to the files, too.""" start="00:07:14.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code is a little bit long,""" start="00:07:17.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but the important part is that""" start="00:07:18.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we fill in a plist with the values we calculate,""" start="00:07:20.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then we can use `emacsconf-replace-plist-in-string`""" start="00:07:22.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to put that all together.""" start="00:07:26.380" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The schedule is a little more complicated.""" start="00:07:28.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I wrote an Ikiwiki directive""" start="00:07:30.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that the markup is more manageable,""" start="00:07:32.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the Emacs Lisp function uses that.""" start="00:07:34.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The Ikiwiki directive takes all the data and turns it into HTML...""" start="00:07:36.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...so we can use Emacs Lisp to iterate over""" start="00:07:40.620" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""a slightly smaller property list""" start="00:07:42.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and put them into the format Ikiwiki expects.""" start="00:07:44.820" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's nice to be able to navigate between talks""" start="00:07:47.780" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""without going back to the schedule page each time.""" start="00:07:50.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is handled by keeping two extra copies of the list:""" start="00:07:52.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""one with the first talk popped off,""" start="00:07:55.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and one with an extra element added to the beginning.""" start="00:07:57.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can use the heads of those lists""" start="00:08:00.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for next/previous links.""" start="00:08:02.440" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Etherpad""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Links to the next talks are also handy""" start="00:08:04.380" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""on the collaborative Etherpad documents""" start="00:08:06.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that we use for collecting questions, answers, and notes""" start="00:08:08.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""during each talk.""" start="00:08:12.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Etherpad has an API...""" start="00:08:12.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...so I can start the pads off with a template""" start="00:08:15.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""before the conference.""" start="00:08:17.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I don't want to accidentally overwrite a pad""" start="00:08:18.940" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that has been manually edited.""" start="00:08:21.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can save the timestamp of the last modification""" start="00:08:22.940" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then compare it before overwriting.""" start="00:08:25.720" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""E-mail""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Templates are also very handy when it comes to e-mail.""" start="00:08:28.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes we send e-mails one at a time,""" start="00:08:31.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when we let a speaker know""" start="00:08:33.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that we've received their proposal.""" start="00:08:35.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's mostly a matter of plugging the talk's properties""" start="00:08:36.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""into the right places in the template.""" start="00:08:39.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes we send e-mails to lots of speakers at the same time,""" start="00:08:41.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when we send them instructions for uploading their files.""" start="00:08:45.020" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Instead of sending one e-mail and Bcc-ing everyone,""" start="00:08:48.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or sending people multiple e-mails""" start="00:08:51.620" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because they have multiple talks,""" start="00:08:53.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I like to draft these as individual e-mails""" start="00:08:55.140" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to each speaker (or group of speakers,""" start="00:08:57.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""if more than one person is associated with a talk).""" start="00:08:59.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That gives me an opportunity to personalize it further.""" start="00:09:02.600" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""BigBlueButton web conferences""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Many speakers answer questions live""" start="00:09:05.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in BigBlueButton web conference rooms.""" start="00:09:08.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Setting up one room per group of speakers""" start="00:09:10.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""makes it easy to give the speakers the details""" start="00:09:12.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and associate the recorded video with the talk afterwards.""" start="00:09:15.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For EmacsConf 2023,""" start="00:09:18.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I used Spookfox to control Mozilla Firefox from Emacs""" start="00:09:20.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I could automate creating the rooms""" start="00:09:25.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and adding the URLs to the talk properties in my Org file.""" start="00:09:27.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then I can use mail merge to send each speaker""" start="00:09:30.957" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the check-in instructions for their specific room.""" start="00:09:33.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Some speakers will take questions by e-mail""" start="00:09:36.900" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""after the conference instead of attending live,""" start="00:09:39.140" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so we send them shorter instructions""" start="00:09:41.620" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""just in case they want to drop by.""" start="00:09:43.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""[Live Q&A sessions]: After the first rush of questions,""" start="00:09:45.540" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we can open it up for other people to join.""" start="00:09:47.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is handled by changing the public page""" start="00:09:50.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""from one that just refreshes in a loop""" start="00:09:53.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to one that redirects to the actual web conference room.""" start="00:09:55.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Just in case, we also""" start="00:09:58.821" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""generate static copies of those redirects""" start="00:10:00.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we can copy them if needed.""" start="00:10:02.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That way, I don't have to count on Emacs being able to""" start="00:10:04.300" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""publish them over TRAMP.""" start="00:10:06.680" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Shortcuts""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""During the conference, I'm often jumping from talk to talk.""" start="00:10:08.121" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Instead of going to the Org file""" start="00:10:11.660" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then searching for the talk,""" start="00:10:13.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I've made a little Hydra with keyboard shortcuts.""" start="00:10:14.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""One of these shortcuts lets me""" start="00:10:17.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""jump to a talk with completion""" start="00:10:19.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I can just type in part of the talk ID,""" start="00:10:20.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""title, or speaker name.""" start="00:10:24.260" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I've also defined some Embark actions""" start="00:10:26.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that I can act on a talk right from the completion menu.""" start="00:10:28.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For example, I might want to jump to the wiki page""" start="00:10:32.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""or e-mail the speaker.""" start="00:10:35.080" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Logbook""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""I can also add notes to a talk while looking at an email,""" start="00:10:36.700" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when a speaker lets me know""" start="00:10:40.100" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that their video will be late.""" start="00:10:41.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Making it easy to add a note turns Emacs into""" start="00:10:43.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""a very basic contact relationship management system, or CRM.""" start="00:10:45.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The way this works is that we have a function""" start="00:10:49.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""that lists all the email addresses associated with a talk.""" start="00:10:52.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We can then map that over the list of talks,""" start="00:10:55.460" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""look up the author of the current email,""" start="00:10:57.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""prompt the user for the talk to add the note to, and add the note.""" start="00:10:59.960" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Captions""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""On to captions.""" start="00:11:03.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We've been doing captions for the last couple of years,""" start="00:11:04.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and now we have a small army of volunteer captioners.""" start="00:11:07.240" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""They get early access to the recorded talks""" start="00:11:10.420" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and fix up misrecognized words, format keyboard shortcuts""" start="00:11:12.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to follow Emacs conventions, spell names correctly,""" start="00:11:16.160" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and do all sorts of other wonderful things.""" start="00:11:19.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""One of our evil plans with EmacsConf""" start="00:11:21.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""is to get cool stuff out of people's heads into videos""" start="00:11:24.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and also make captions so that those videos can be searched.""" start="00:11:28.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""To make that possible, we first need a backstage area""" start="00:11:32.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""where volunteers can get the files.""" start="00:11:35.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is just a simple password-protected directory""" start="00:11:36.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""with a static HTML page that lists the talks by status""" start="00:11:39.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and shows the files related to each talk.""" start="00:11:43.740" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""As a talk moves through the process, I update its TODO state""" start="00:11:46.380" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and republish this index.""" start="00:11:49.900" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Talks that are ready to be captioned show up in that section,""" start="00:11:51.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and volunteers can call dibs on the talk they're interested in.""" start="00:11:54.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""That's all done with a function that formats the information""" start="00:11:58.180" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and uses TRAMP to save the file directly to the server.""" start="00:12:00.980" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can find more details on our captioning process""" start="00:12:04.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""at emacsconf.org/captioning.""" start="00:12:06.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I like using subed to edit subtitles within Emacs.""" start="00:12:09.040" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Crontabs and playing the talks""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Let's talk about actually playing the talks.""" start="00:12:13.220" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For EmacsConf 2022, we tried using Emacs timers""" start="00:12:16.060" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to run the talks.""" start="00:12:19.560" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It turns out that you can't call TRAMP from a timer""" start="00:12:20.940" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""when you're already using TRAMP from another timer""" start="00:12:24.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""at the same time.""" start="00:12:26.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I thought about just tweaking the schedule""" start="00:12:27.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so that we always start things at different times,""" start="00:12:29.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but I figured there's probably a more elegant way to do this.""" start="00:12:31.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This year, I'm planning to experiment with using cron""" start="00:12:35.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to start talks on autopilot.""" start="00:12:37.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The shell scripts will take care of playing the videos...""" start="00:12:39.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... figuring out the appropriate Q&A...""" start="00:12:42.480" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""... and joining the web conference if needed.""" start="00:12:44.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We just need to format the information...""" start="00:12:47.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""...and install it as the track's crontab.""" start="00:12:49.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's useful to be able to switch tracks""" start="00:12:52.220" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to manual mode independently,""" start="00:12:54.080" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""just in case things go haywire.""" start="00:12:55.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Then we can start everything manually.""" start="00:12:57.900" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""I can also manually update a talk's status,""" start="00:13:00.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""like when the host tells me that it's okay to open up the Q&A.""" start="00:13:02.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The shell scripts we run from the crontab""" start="00:13:06.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""can also update the talk status themselves.""" start="00:13:08.720" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Transitions""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""Then a bunch of things automatically happen based on""" start="00:13:11.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""the talk status changes.""" start="00:13:14.320" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This uses `org-after-todo-state-change-hook`.""" start="00:13:15.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We get the talk information""" start="00:13:18.960" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and pass it to a list of functions.""" start="00:13:20.360" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Internet Relay Chat or IRC is an easy way for people""" start="00:13:22.520" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to join the conversation around EmacsConf.""" start="00:13:26.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""We announce a talk whenever it changes state.""" start="00:13:29.140" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""For example, when a talk starts,""" start="00:13:31.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""we post the URLs to the talk webpage""" start="00:13:33.600" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and the Etherpad for questions. We change the topic as well,""" start="00:13:36.040" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""so anyone can see the current talk's information""" start="00:13:39.440" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""even if they're a little late.""" start="00:13:41.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""This is easy to do with a little bit of Emacs Lisp""" start="00:13:43.180" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""because (of course!) Emacs has an IRC client.""" start="00:13:45.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""In fact, it has several.""" start="00:13:48.520" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template new="1" text="""Wrapping up""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]] + +[[!template text="""It seems like a lot of automation and Emacs Lisp,""" start="00:13:49.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""but really, all of this was just built up little by little.""" start="00:13:53.140" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""And tinkering with this is *fun*, you know?""" start="00:13:56.900" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's like always being able to ask,""" start="00:13:59.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text=""""Hey, wouldn't it be cool if..."""" start="00:14:01.260" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and then actually being able to go and do it.""" start="00:14:03.301" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Sometimes it feels like EmacsConf is an excuse""" start="00:14:05.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""for me to play with Emacs.""" start="00:14:08.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's pretty amazing what you can do""" start="00:14:10.200" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""by combining a bunch of pieces.""" start="00:14:12.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to store slightly-structured information.""" start="00:14:13.800" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to get it out again. Templates.""" start="00:14:16.720" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""TRAMP, for working with remote files""" start="00:14:18.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and running remote commands.""" start="00:14:20.680" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to talk to a web browser.""" start="00:14:21.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""A way to work with SVGs.""" start="00:14:23.840" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""An email client. A chat client.""" start="00:14:25.400" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""You can smoosh them all together""" start="00:14:27.760" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""in a way that you couldn't if they were all separate things.""" start="00:14:29.640" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The code is in the emacsconf-el repository.""" start="00:14:32.700" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""It's a bit of a tangle because it's accumulating organically""" start="00:14:36.280" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""and I haven't really had the brainspace""" start="00:14:39.120" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""to step back and clean it up.""" start="00:14:40.880" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""But if you spotted anything interesting in this presentation,""" start="00:14:42.580" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""you can go check it out and see what you can scavenge.""" start="00:14:45.920" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""The link and this presentation are available""" start="00:14:48.620" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""from this talk's webpage at emacsconf.org/2023/talks/emacsconf .""" start="00:14:51.000" video="mainVideo-emacsconf" id="subtitle"]] +[[!template text="""Let's figure out how to make Emacsconf even awesomer next year!""" start="00:14:59.120" video="mainVideo-emacsconf" id="subtitle"]] + + + +Captioner: sachac + +<a name="emacsconf-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: All right. I have unmuted.""" start="00:00:53.489" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's been a while since I've actually done an""" start="00:00:59.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actual presentation. Hi.""" start="00:01:05.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay. I'm going to deafen myself and mumble""" start="00:01:08.979" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so that I don't get distracted by backstage""" start="00:01:12.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""chatter. Hello, everyone! Okay,""" start="00:01:16.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so where are we? Questions,""" start="00:01:17.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions, questions. Okay,""" start="00:01:20.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""how easy would it be for someone else to""" start="00:01:23.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""reuse the Emacs conf strips and config to do""" start="00:01:25.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a conf of their own? Like everything else,""" start="00:01:29.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have no idea if things actually work until""" start="00:01:32.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""somebody does it for, you know,""" start="00:01:35.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to get everything to run on a computer that""" start="00:01:37.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""isn't my computer and with assumptions that""" start="00:01:40.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""aren't my assumptions.""" start="00:01:40.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, I have no idea. But optimistically,""" start="00:01:42.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have put most of the EmacsConf things,""" start="00:01:46.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like EmacsConf, the name of the conference""" start="00:01:48.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and things like that in variables.""" start="00:01:50.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if theoretically someone were to run an""" start="00:01:53.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""org mode conference or something like that,""" start="00:01:56.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it might be possible to reuse all this code.""" start="00:01:58.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We'll see. I don't know if it's going to be""" start="00:02:01.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""easy. I don't even know if it's going to be""" start="00:02:03.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""possible, but it might be fun to try.""" start="00:02:04.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What tools would I like to exist in Emacs""" start="00:02:09.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""land to help with preparing the conference""" start="00:02:11.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""next time? Well, I've already been thinking""" start="00:02:15.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about adjustments that I want to make to""" start="00:02:18.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sub-eds so that the audio synchronization""" start="00:02:21.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""issues that we sometimes have with FFmpeg can""" start="00:02:24.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""be something that I can flag and maybe fix""" start="00:02:26.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even while I'm watching a video.""" start="00:02:29.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But also as much as possible,""" start="00:02:32.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I like to leave the actual FFMPEG audio and""" start="00:02:36.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""visual tinkering with to other people like""" start="00:02:39.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo, whose patience is slightly more than""" start="00:02:41.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mine, because audio is,""" start="00:02:44.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I still don't have the patience to sit for""" start="00:02:47.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it. You can tell I talk really,""" start="00:02:48.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really quickly. I'm still trying to squeeze""" start="00:02:50.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything into however little focus time I""" start="00:02:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually have. So it would be kind of nice to""" start="00:02:56.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""use that. Emacs is already doing quite a ton""" start="00:03:00.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and stuffing more multimedia processing and""" start="00:03:04.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other fun things into it might be""" start="00:03:06.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interesting. Who knows?""" start="00:03:07.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Oh, the other thing that I would really love""" start="00:03:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to have that people always ask for is a way""" start="00:03:12.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from Emacs to interact with the Etherpad.""" start="00:03:15.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""The Etherpad API, it seems very granular.""" start="00:03:18.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like, you can set the HTML of a pad,""" start="00:03:21.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but you can't actually just append stuff to""" start="00:03:22.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it. And I was trying to get something that""" start="00:03:24.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""could take questions from IRC and""" start="00:03:26.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""automatically push them into the pad,""" start="00:03:28.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even from an ERC bot or whatever,""" start="00:03:30.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but no go. If someone were to figure out some""" start="00:03:34.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""CRDT thing where we can collaboratively edit""" start="00:03:38.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the document, that I think is the number 1""" start="00:03:41.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""request that people always have around""" start="00:03:42.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf. That would be really cool to do""" start="00:03:46.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more of the conference itself from within""" start="00:03:48.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs. I don't know if actually,""" start="00:03:53.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well, we have an org file now that launches""" start="00:03:55.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the MPV from Emacs. But if you want to have""" start="00:03:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""an ex-widget or something else watching the""" start="00:04:01.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference from within Emacs itself.""" start="00:04:03.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think that will also be really cool.""" start="00:04:05.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes. And then other fun stuff.""" start="00:04:09.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""OK, how can speakers and viewers help make""" start="00:04:12.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""preparing for next year's Emacs Conf even""" start="00:04:15.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more fun for the organizers?""" start="00:04:16.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Well, I love it when not only do the speakers""" start="00:04:20.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do all that work to prepare their talk,""" start="00:04:24.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but lately people have actually even been""" start="00:04:27.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""volunteering to caption their own talks.""" start="00:04:29.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And that's great because then they know the""" start="00:04:33.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""words that they use. And if I can show them""" start="00:04:36.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the workflow that we have so that they can do""" start="00:04:39.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it very efficiently, because there's all""" start="00:04:41.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these wonderful things that I do now with""" start="00:04:44.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Subweb Waveform and Aeneas for like the""" start="00:04:48.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""forced alignment so we can get timestamps""" start="00:04:49.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from text and all these other fun things that""" start="00:04:53.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""make getting a transcript or editing the""" start="00:04:55.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""captions fun and easy.""" start="00:04:57.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That makes it easier for not only speakers to""" start="00:05:00.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""contribute captions for their own talks,""" start="00:05:02.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but also interested volunteers who,""" start="00:05:05.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as mentioned, get early access to all the""" start="00:05:07.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talks and can watch them at leisure.""" start="00:05:09.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's, you know, nice prick there.""" start="00:05:12.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Definitely should try that.""" start="00:05:13.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I do have some sample videos of how we use""" start="00:05:19.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""subed. But of course, in the process of""" start="00:05:21.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""shoving like 30 or 40 talks,""" start="00:05:24.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""maybe 30 talks through it for EmacsConf,""" start="00:05:26.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this is like the stress test season for""" start="00:05:29.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""subed, which is great,""" start="00:05:30.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I ended up adding more features.""" start="00:05:31.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So 1 of my big to-dos afterwards is I have to""" start="00:05:36.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""document the different workflows for things""" start="00:05:38.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, okay, you've got a script.""" start="00:05:40.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You can use WDiff to get word diffs so you""" start="00:05:43.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can take the subtitles and compare them with""" start="00:05:45.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the original script and see where the""" start="00:05:47.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""misrecognized words are.""" start="00:05:48.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And that's great. Or you can use SubWeb""" start="00:05:52.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Waveform to start adjusting things.""" start="00:05:54.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Or for example, if there's a synchronization""" start="00:05:56.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""issue, I can now middle click on a subtitle""" start="00:06:01.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where I want the subtitle to actually start""" start="00:06:03.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then move all the subtitles to start at""" start="00:06:06.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that point. So it's getting to be a really""" start="00:06:09.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""elaborate tool. And I definitely need to""" start="00:06:10.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""document that and stick all the blog post""" start="00:06:15.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""links into the readme so that people can find""" start="00:06:17.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this in the future. So it's very,""" start="00:06:20.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""very nifty. And the reason why we do this is""" start="00:06:23.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because, well, personally,""" start="00:06:24.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have a hard time sitting and watching""" start="00:06:26.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""videos. I like to be able to just jump to the""" start="00:06:28.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interesting parts or watch it at 3 times""" start="00:06:31.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""speed, which MPV lets me do.""" start="00:06:33.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the text makes it a lot more searchable,""" start="00:06:36.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is fantastic. And also because,""" start="00:06:38.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, if you've got all these interesting""" start="00:06:41.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""variable names and key bindings and whatever,""" start="00:06:44.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and the automatic subtitles just don't do the""" start="00:06:47.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right thing. So it's nice that people do the""" start="00:06:49.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""captioning. So, yeah, so that's 1 thing that""" start="00:06:53.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people can help with. Captioning is always""" start="00:06:55.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""very interesting. And the other thing that""" start="00:06:57.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people can do is take the inspiration that""" start="00:07:00.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you get from EmacsConf and from the ideas""" start="00:07:02.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that you have when you're working with Emacs,""" start="00:07:04.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and suggest talks for next year's EmacsConf.""" start="00:07:07.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it doesn't have to be a super fancy,""" start="00:07:09.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""nobody else needs to go out and do a really""" start="00:07:13.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""professional-looking video.""" start="00:07:14.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Even though Howard has set the bar this you""" start="00:07:17.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""know it's pretty high you don't have to do""" start="00:07:19.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that kind of thing it can be just you in a""" start="00:07:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""screen or even just a screen and you talking""" start="00:07:24.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about this cool thing that you learned and""" start="00:07:27.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they could be a video or it could be a blog""" start="00:07:29.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""post it could be something else and that""" start="00:07:31.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""those those things are fantastic because they""" start="00:07:34.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""inspire people to see what's possible with""" start="00:07:36.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs. So that's another big thing that""" start="00:07:39.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people can do to help.""" start="00:07:40.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then there's sharing the word about it.""" start="00:07:44.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if you saw something that you really like,""" start="00:07:46.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if you write a blog post about it or a tweet""" start="00:07:48.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or a toot or whatever else you want to do,""" start="00:07:51.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you make a reaction video,""" start="00:07:52.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that helps other people discover that stuff""" start="00:07:55.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""not just today, not just next week,""" start="00:07:57.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but you know even later as they search for""" start="00:08:00.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these words that as people search for ideas""" start="00:08:04.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""using words that are not necessarily the ones""" start="00:08:07.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the video, you describing things in other""" start="00:08:10.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ways helps with the search engine""" start="00:08:11.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""optimization, you're not really,""" start="00:08:13.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's just people finding stuff,""" start="00:08:15.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is amazing. So yes,""" start="00:08:17.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""please write about the cool things that""" start="00:08:19.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you've seen and what you'd like to tell other""" start="00:08:22.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people about. Suggesting ideas for talks.""" start="00:08:25.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes. Making talks. All sorts of wonderful""" start="00:08:30.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things. OK. Could you elaborate on the""" start="00:08:35.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""workflow that goes on in your mind for when""" start="00:08:37.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""approaching these things?""" start="00:08:38.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do you start with an Emacs org solution right""" start="00:08:40.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""off the bat at this point when faced with a""" start="00:08:42.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""task? Are there some conscious steps involved""" start="00:08:44.059" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from early ideas to automation of the kind""" start="00:08:46.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you just showed? Mostly it starts with,""" start="00:08:48.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""okay, we got to do this thing.""" start="00:08:50.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I have this to-do. And sometimes,""" start="00:08:53.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like in the week before the conference,""" start="00:08:55.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have to think, okay,""" start="00:08:57.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is this a top priority thing that I can do""" start="00:09:00.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""before the conference,""" start="00:09:01.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or is it something that I can,""" start="00:09:03.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I, I, like we can still do the conference""" start="00:09:05.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""without doing so I have to just postpone it""" start="00:09:08.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""until afterwards? So some prioritization""" start="00:09:09.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""happens. But a lot of times it's like,""" start="00:09:12.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""okay, you know, like this,""" start="00:09:13.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there's a thing that I need to do here.""" start="00:09:14.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know how to figure it out,""" start="00:09:15.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""let me start an org Babble block and start""" start="00:09:18.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sketching out something,""" start="00:09:19.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, custom function or whatever else,""" start="00:09:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then say okay, you know,""" start="00:09:23.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hey, that looks kind of useful,""" start="00:09:25.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""let me see if I can generalize that,""" start="00:09:27.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then let me stick it into the library so""" start="00:09:29.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that I can find it next year.""" start="00:09:30.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And that's basically how it goes.""" start="00:09:33.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It just goes, it just like,""" start="00:09:35.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have a thing that I need to do.""" start="00:09:37.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If it's, if I'm going to do it more than""" start="00:09:40.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""once, or actually even if I'm going to do it,""" start="00:09:42.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, once I tried to automate it just so""" start="00:09:44.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that I can understand it and,""" start="00:09:46.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then I can, I can,""" start="00:09:47.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can squeeze it into like the 15 minutes I""" start="00:09:50.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually have and I can pause and I can pick""" start="00:09:54.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it up again and the code is still there and""" start="00:09:56.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""my notes are still there?""" start="00:09:57.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then every little bit of the,""" start="00:10:00.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""every little step like that builds up.""" start="00:10:03.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I can write a short function today,""" start="00:10:05.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then tomorrow when the kid was asleep,""" start="00:10:07.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can write a little bit more of that.""" start="00:10:09.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And so it just goes on from there.""" start="00:10:11.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then I just stuff that all in there.""" start="00:10:14.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""How well does this approach allow for other""" start="00:10:17.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organisers to do individual customisations to""" start="00:10:19.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""their liking while still being able to""" start="00:10:21.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""collaborate effectively?""" start="00:10:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We've actually split things up fairly neatly""" start="00:10:25.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the sense that for this year,""" start="00:10:28.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for example, most everyone else was super""" start="00:10:30.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""busy, so I did all the heavy lifting up until""" start="00:10:34.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people were available and then they jumped in""" start="00:10:37.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with the audio normalization.""" start="00:10:38.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you very much, Leo,""" start="00:10:39.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for doing all of that stuff and the hosting""" start="00:10:41.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and all the other things.""" start="00:10:42.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I tend to do most of the Emacs list""" start="00:10:45.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""fiddling with and the shell scripting and""" start="00:10:48.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stuff like that, aside from the FFmpeg""" start="00:10:49.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""incantations, which are too arcane for me to""" start="00:10:53.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even think about. And then in the course of""" start="00:10:56.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""watching me deal with like,""" start="00:10:57.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, no, this video is not playing.""" start="00:10:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then they see the commands that I'm""" start="00:11:01.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""using, like play and then,""" start="00:11:04.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, play a world,""" start="00:11:05.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is the ideas of the talk that we were""" start="00:11:08.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""having a hard time with or MPD or whatever.""" start="00:11:10.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Then the other organizers kind of just pick""" start="00:11:13.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that up by osmosis, because We didn't even""" start="00:11:15.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have time to do dry runs for training this""" start="00:11:17.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year. So it's just there's not much""" start="00:11:20.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""collaboration in the sense that I'm just""" start="00:11:22.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""basically saying, OK, these are the scripts""" start="00:11:24.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that I'm going to write for myself.""" start="00:11:25.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And you all figure out how to work with that.""" start="00:11:28.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What was the hardest problem you encountered""" start="00:11:34.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in organizing or running the conference this""" start="00:11:37.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year and how do you deal with it?""" start="00:11:38.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Oh, the constant, constant problem with""" start="00:11:40.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""e-mails. There's so many amazing ideas.""" start="00:11:43.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I want to fit into the time.""" start="00:11:45.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then afterwards, like,""" start="00:11:46.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha, do not mess with production the day""" start="00:11:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""before the conference.""" start="00:11:50.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You're going to save that for after the""" start="00:11:52.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference, right? So that's the hardest""" start="00:11:54.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""part, is just saying, OK,""" start="00:11:56.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yes, that's an idea. I'm going to put that in""" start="00:11:58.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the inbox. We're going to maybe get to that""" start="00:12:01.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""next year. But right now,""" start="00:12:03.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these are the things that I need to do in""" start="00:12:05.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""order to get the conference off the ground""" start="00:12:07.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""reasonably in a reasonable amount of time.""" start="00:12:14.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So earlier in the conference,""" start="00:12:17.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""then I can be like, OK,""" start="00:12:19.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what if we do this? What if we run everything""" start="00:12:21.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""off a crontab instead of using Emacs tramp""" start="00:12:24.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""timers? Wouldn't that be great?""" start="00:12:25.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then I can explore all those crazy ideas.""" start="00:12:28.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But then as we get closer and closer to date,""" start="00:12:30.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm like, okay, fine. I'm going to like just""" start="00:12:32.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""capture the idea and deal with it later.""" start="00:12:34.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So that's really, really hard for me.""" start="00:12:36.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Year to your growth in attendance and after""" start="00:12:39.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the conference video watching.""" start="00:12:40.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""The growth, well, first thing,""" start="00:12:46.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there is like absolute growth in the kind of""" start="00:12:51.110" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the quantity of things that people are""" start="00:12:53.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sharing. I have a blog post about this that""" start="00:12:56.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talks about a number of minutes of talks,""" start="00:12:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and it's going up. Last year,""" start="00:13:02.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we did 2 tracks because I couldn't fit""" start="00:13:03.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything in 1 day. And this year,""" start="00:13:05.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we did 2 tracks, but even then,""" start="00:13:07.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything was kind of squished,""" start="00:13:08.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I was trying to find space in the""" start="00:13:09.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""schedule. And if you make it so that next""" start="00:13:11.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year, we have to figure out 3 tracks,""" start="00:13:13.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think We have another host now,""" start="00:13:15.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so it might be doable,""" start="00:13:16.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is great. Who knows?""" start="00:13:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We'll see. And the other interesting thing""" start="00:13:23.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that I'm seeing in terms of growth is that""" start="00:13:25.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people are starting to refer to the talks""" start="00:13:27.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from previous conferences that inspired them.""" start="00:13:29.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So the evil plan is working in that it is""" start="00:13:32.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""getting people to get cool stuff out of their""" start="00:13:35.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""heads and into videos that have like""" start="00:13:37.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""searchable transcripts and that people can""" start="00:13:39.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""refer to as for inspiration and for showing""" start="00:13:41.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other people, hey, look,""" start="00:13:42.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this is what it can do.""" start="00:13:44.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So that is fantastic growth.""" start="00:13:46.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""The actual numbers, I'm intense to look at""" start="00:13:49.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the number of simultaneous viewers.""" start="00:13:51.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And every so often, it's kind of nice to go""" start="00:13:53.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""through the YouTube stats or whatever.""" start="00:13:55.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But that's not so much as a,""" start="00:13:57.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, I don't really keep that in mind as""" start="00:14:01.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""much, just because as long as people are""" start="00:14:05.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""connecting to the ideas and getting stuff out""" start="00:14:07.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there and being inspired to think around""" start="00:14:13.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more, then it's doing the thing.""" start="00:14:16.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Cognizant is working. So where are we now for""" start="00:14:21.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions? Ooh, I can actually,""" start="00:14:22.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have ERC here. I can find eventually.""" start="00:14:25.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""1 of my screens has Dev in it.""" start="00:14:28.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, here we are. What are the other""" start="00:14:30.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions? Probably, Probably an IRC.""" start="00:14:34.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Where's IRC? Dove, dove,""" start="00:14:39.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""dove. I did try to record things more slowly,""" start="00:14:45.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I tried several times,""" start="00:14:47.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I really just speak very quickly when I""" start="00:14:49.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""get excited and Emacs is very fun so it is""" start="00:14:53.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tough oh yes okay so 1 in once yes automated""" start="00:14:59.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""present workflows oh yeah okay so where are""" start="00:15:04.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we now for time? Oh look,""" start="00:15:05.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's 4.30, should we do our closing remarks""" start="00:15:07.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or like how are things going over in the""" start="00:15:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other stream? I should find out.""" start="00:15:11.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I've been keeping a close eye on the""" start="00:15:14.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other 1, but yeah, I believe that-""" start="00:15:16.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Yay, look at that, good timing.""" start="00:15:19.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, I have managed to zoom through the""" start="00:15:22.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions and we can switch over to the""" start="00:15:26.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""closing remarks how do we do this yes okay""" start="00:15:31.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""okay we're gonna oh wait people okay people""" start="00:15:35.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""who wanted to ask questions how do you want""" start="00:15:37.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to do this? Because there are a lot of people""" start="00:15:39.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in this 1 here too. You want to go to the""" start="00:15:42.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other 1? 0 no, they aren't done yet.""" start="00:15:48.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sorry, I forgot to turn on the con tab""" start="00:15:51.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because of course I got excited.""" start="00:15:52.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, so Jacob is still answering questions,""" start="00:15:54.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which means I get to still answer questions.""" start="00:15:56.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Now I'll try to be quiet and let people in""" start="00:15:59.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the BBB room speak up if we want to.""" start="00:16:01.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay that means""" start="00:16:12.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: are going to hear.""" start="00:16:13.585" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Some more""" start="00:16:13.715" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 2]: people in the chat ideas I had on the Emacs""" start="00:16:15.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conferences you could have like a little""" start="00:16:17.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs starter config just for like the Emacs""" start="00:16:21.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference where you have emms playlist and""" start="00:16:26.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""IRC help cheer function to help get you into""" start="00:16:29.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""IRC into ERC and then the to-do states that I""" start="00:16:35.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""was talking about before.""" start="00:16:36.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So you can say, I'm watching this 1,""" start="00:16:40.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I want to re-watch this 1,""" start="00:16:41.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I'm going to skip it because I'm watching""" start="00:16:42.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""something else. I used the HyperBowl package""" start="00:16:52.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to go straight to the web pages to all the""" start="00:16:55.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""either pads but you can also have some quick""" start="00:16:59.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""functions to go into a CRDT buffer hosted""" start="00:17:04.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""buffer, where all the org mode Etherpad""" start="00:17:07.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""documents would be. And then that would get""" start="00:17:14.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everybody using Emacs,""" start="00:17:15.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then they could all be chatting with each""" start="00:17:17.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other with CRDT, with controlling Emacs.""" start="00:17:23.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know how the sub stuff,""" start="00:17:25.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know if you can get the sub stuff in""" start="00:17:27.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there working, but yeah,""" start="00:17:29.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It could be a good way of getting it all""" start="00:17:32.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""wrapped up together. And also,""" start="00:17:34.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Mkron, if you ever looked at that versus""" start="00:17:38.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Kron, Mkron is configured in Elisp.""" start="00:17:40.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Then you can also write some custom functions""" start="00:17:43.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the middle of your Kron.""" start="00:17:44.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So maybe you could make some like conditional""" start="00:17:46.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things where you can start or stop it.""" start="00:17:48.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And like 1 of the differences is if your""" start="00:17:56.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""computer reboots, it can start up and say,""" start="00:17:58.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, I'm supposed to run this cron job at this""" start="00:18:01.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time and then just Do the correct thing""" start="00:18:04.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""rather than losing the state Randomly because""" start="00:18:08.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""your computer lost power""" start="00:18:10.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Thanks for those recommendations I will add""" start="00:18:15.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mcron to my list of things to check out.""" start="00:18:17.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And yeah, we finally remembered to publish""" start="00:18:23.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all those schedules as org,""" start="00:18:25.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I decided to just spam all the time zones""" start="00:18:27.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with them, which was fantastic.""" start="00:18:28.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And other people have mentioned that this is""" start="00:18:30.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""useful. We get to figure out how to use this""" start="00:18:32.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to teach people more about what you can do""" start="00:18:35.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with org. As you mentioned,""" start="00:18:36.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""encouraging them to tag the stuff with things""" start="00:18:40.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that they want to attend gives us the ability""" start="00:18:43.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to set up an agenda view for them that has""" start="00:18:45.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the talks that are tagged with those tags.""" start="00:18:47.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: So I""" start="00:18:48.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: was like, okay, let's,""" start="00:18:49.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""let's teach org mode and lisp in the process""" start="00:18:53.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of doing things. Okay,""" start="00:18:58.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there was a question about any chance of an""" start="00:19:00.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in person EmacsConf again someday.""" start="00:19:02.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I was actually at the very first EMAX""" start="00:19:05.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Conf, which was 2013 and organized in London""" start="00:19:11.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to take advantage of the fact that I had a""" start="00:19:12.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""business shift there. It was fantastic being""" start="00:19:15.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in a room with 100 other people who are all""" start="00:19:18.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really interested in Emacs,""" start="00:19:19.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I'm not traveling like any time for the""" start="00:19:23.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""foreseeable future, so if other people are""" start="00:19:25.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interested in organizing something like that,""" start="00:19:27.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I am totally happy to spread the word.""" start="00:19:29.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It doesn't fit with my current lifestyle,""" start="00:19:31.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it might fit somebody's.""" start="00:19:32.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know. We're still just here.""" start="00:19:37.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I like the virtual conference.""" start="00:19:38.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I really like the fact that we can bring""" start="00:19:41.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""together people from all over the world.""" start="00:19:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can take a look at my schedule with all the""" start="00:19:46.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time constraints. Okay,""" start="00:19:47.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I need to put this person in the morning""" start="00:19:49.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because they're in Australia and I need to""" start="00:19:50.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""put this person in the afternoon because""" start="00:19:52.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they're from Vancouver or from somewhere else""" start="00:19:56.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the Pacific time zone.""" start="00:19:58.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's just this breadth of people.""" start="00:20:01.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But the other thing that I would love for""" start="00:20:04.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people to start thinking about is if we could""" start="00:20:06.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have a virtual conference in other time""" start="00:20:08.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""zones, so that's easier for people in Asia""" start="00:20:11.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Pacific or Europe to attend.""" start="00:20:12.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And as we're getting the hang of this,""" start="00:20:16.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this crontab-based thing,""" start="00:20:17.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think we might almost be at the point where""" start="00:20:20.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can set it up to run even when I'm""" start="00:20:22.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sleeping. And then other people can figure""" start="00:20:24.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out, you know, the exception handling,""" start="00:20:26.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, you know, this talk needs to be""" start="00:20:27.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""restarted. Okay, just play it again and scrub""" start="00:20:30.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""around to find the right part,""" start="00:20:31.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which means we could have replays,""" start="00:20:34.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or we can have like the Asia Pacific""" start="00:20:37.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Alternate Event that we had the other time""" start="00:20:39.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where some speakers came back online and did""" start="00:20:45.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""another Q&A session just for that kind of""" start="00:20:48.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""event. So those are other cool,""" start="00:20:51.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""fun things that would love to be,""" start="00:20:52.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would be great. Satellite events,""" start="00:20:57.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""someone mentioned in the etherpad.""" start="00:20:59.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Some people have been organizing these,""" start="00:21:03.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which are great. Basically a bunch of people""" start="00:21:05.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""get together in a room or 2 rooms now because""" start="00:21:07.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of the tracks and watch Emacs Conf together.""" start="00:21:10.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if you have a physical meetup or if you'd""" start="00:21:12.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like to start 1, It's basically,""" start="00:21:15.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, do this, maybe have stickers if you""" start="00:21:17.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have stickers. You know,""" start="00:21:19.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's just have everyone come over and hang""" start="00:21:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out and meet people. I don't know.""" start="00:21:24.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's a thing. Specifically how to do it,""" start="00:21:27.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have no idea how to organize these things.""" start="00:21:29.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But Alain does. So talk to him.""" start="00:21:32.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 2]: Another way of adding multiple tracks is""" start="00:21:35.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""changing it to doing it like 2 times a year,""" start="00:21:37.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in max confidence.""" start="00:21:39.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, yeah, people have mentioned something""" start="00:21:44.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like that. Or the fact that org often has""" start="00:21:50.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like a full day of talks by itself,""" start="00:21:51.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and actually a little bit more than a day""" start="00:21:53.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""now, because I've been squeezing things into""" start="00:21:55.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other tracks. There has been some potential""" start="00:21:58.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interest in having an org conf.""" start="00:22:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It could be a thing. And I'd love to see""" start="00:22:03.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""also, we'd love to experiment with other""" start="00:22:05.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""formats. So there could be a bug hunting""" start="00:22:08.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""session or let's use the breakout rooms to""" start="00:22:13.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""split up into little mentoring groups and see""" start="00:22:15.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""how that works. So lots of things that we can""" start="00:22:18.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do. They've actually finished over in the Gen""" start="00:22:21.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""track so I don't know if people want to very""" start="00:22:24.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""quickly ask questions here or if we go there.""" start="00:22:26.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo has come over here instead so okay he's""" start="00:22:31.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""joining over here on the other side.""" start="00:22:32.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, hello.""" start="00:22:35.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I""" start="00:22:38.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: have 1 thing to add. Yeah,""" start="00:22:43.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: No, no, no, I was just about to say I am not""" start="00:22:46.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hosting anymore. You 2 do a wonderful job,""" start="00:22:48.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I'm happy to just watch.""" start="00:22:49.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: go ahead. Cool. Yeah, I was going to add 1""" start="00:22:53.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""quick note about any potential suggestions or""" start="00:22:56.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""recommendations for hosting Emacs on""" start="00:22:58.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""satellites. Is that, I mean,""" start="00:23:00.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""given that we are an event centered around""" start="00:23:01.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs, and Emacs is backed by the Free""" start="00:23:07.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Software Foundation, if you do reach out to""" start="00:23:09.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""them, they're usually pretty helpful in terms""" start="00:23:11.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of sending goodies and stickers and such.""" start="00:23:14.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So yeah, if you give them a heads up and""" start="00:23:16.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""reach out to them in advance,""" start="00:23:17.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you might well end up with a whole bunch of""" start="00:23:20.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""swag on your hands that you could give out""" start="00:23:22.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""during the satellite. So that's the thing.""" start="00:23:24.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: Well, I just wanted to note it felt kind of""" start="00:23:35.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even smoother. I mean,""" start="00:23:37.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you guys always run a nice conference,""" start="00:23:39.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it felt smoother this year than ever""" start="00:23:43.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""before, which listening to your talk,""" start="00:23:45.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha, All the automation that you're doing""" start="00:23:48.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is pretty incredible. So I think it's paying""" start="00:23:52.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""off.""" start="00:23:52.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Yay! You know, it is very amusing to hear the""" start="00:23:58.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""host say, okay, you know,""" start="00:23:59.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but we've got to wrap up in the next 30""" start="00:24:00.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""seconds because Sasha's contact is going to""" start="00:24:02.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""go yoink!""" start="00:24:03.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: I have a person I work with who keeps the""" start="00:24:12.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""trains running on time shall we say and like""" start="00:24:15.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""cuts off every meeting like the second that""" start="00:24:18.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's supposed to end while somebody's in""" start="00:24:21.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mid-sentence and I hope we don't get to that""" start="00:24:24.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point here.""" start="00:24:25.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: So do we have any more,""" start="00:24:34.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: oh sorry I'm reverting to the hosting,""" start="00:24:36.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do we have any more questions for MaxConf?""" start="00:24:37.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Although maybe we want to switch to the other""" start="00:24:39.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""room so that we don't struggle too much to""" start="00:24:41.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""find... Organize the stuff on BBB afterwards.""" start="00:24:44.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, the recording. Well,""" start="00:24:46.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this is a way to make sure the recording gets""" start="00:24:48.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""online. But we could do that too.""" start="00:24:54.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know. What do y'all think?""" start="00:24:55.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: I'm personally fine. If we want to stay here""" start="00:25:00.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right now, the development track is currently""" start="00:25:02.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""streaming this BBB room.""" start="00:25:05.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So are we on Jen. So we're going to leave it""" start="00:25:08.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at is and move into closing remarks if we""" start="00:25:10.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""want.""" start="00:25:10.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, yeah, just, I guess,""" start="00:25:14.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""make sure that every 1 of the organizers are""" start="00:25:17.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here. I see Flo here. Let's see,""" start="00:25:20.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Corbyn, are you here? Can you maybe speak""" start="00:25:23.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here on BBB?""" start="00:25:24.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: We'll give some time for Corbyn to figure it""" start="00:25:32.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out. He did figure it out eventually""" start="00:25:33.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yesterday, so surely today will go""" start="00:25:36.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""swimmingly.""" start="00:25:36.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Right. We're getting everything ready,""" start="00:25:47.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""folks.""" start="00:25:47.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. So while we sort out Corwin,""" start="00:25:57.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can someone tell him on mumble,""" start="00:25:58.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess? Because I'm not sure if he's...""" start="00:26:00.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Anyway. I also want to say that in the Emacs""" start="00:26:05.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference channel, people have been""" start="00:26:06.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mentioning that the remote stuff has been""" start="00:26:08.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""working for them. And I really do like the""" start="00:26:10.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""way that this means we can have all the""" start="00:26:12.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""videos, you know, all prepared,""" start="00:26:13.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they're captioned, you know,""" start="00:26:16.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We can send them to people,""" start="00:26:17.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we can post them on the website afterwards.""" start="00:26:19.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We can bring all these people together who""" start="00:26:21.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""might not be able to convince their companies""" start="00:26:23.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to fly them somewhere for an Emacs""" start="00:26:25.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference. And also I can do this kind of""" start="00:26:29.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""prep while having my now seven-year-old still""" start="00:26:32.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""be able to wander by and whatever.""" start="00:26:34.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Travelling is really tough.""" start="00:26:36.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, this is fine. This is cool.""" start="00:26:39.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I like this. We'll keep doing it.""" start="00:26:40.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: It's definitely playing into the low-cost""" start="00:26:44.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference. To do it online,""" start="00:26:46.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So many people can just access it very""" start="00:26:48.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""easily. All right, so we've messaged Colwyn.""" start="00:26:53.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess we can get started with Dalim.""" start="00:26:55.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It should maybe take a minute or 2 to join""" start="00:26:57.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""us. Should I get started with the Final words""" start="00:27:01.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of the day? All right,""" start="00:27:04.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""cool. All right, folks,""" start="00:27:05.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we made it. We are at the end of the second""" start="00:27:08.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""day of EmacsConf, the second of 2 days.""" start="00:27:10.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the first thing I want to say is first,""" start="00:27:12.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thank you so much for joining us for this new""" start="00:27:15.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""edition. It's personally my fourth year doing""" start="00:27:19.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the EmacsConf, but if you go to emacsconf-org""" start="00:27:22.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and you see the different sessions,""" start="00:27:24.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you will realize that the first 1 was in""" start="00:27:27.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""2013, which happens to be 10 years ago.""" start="00:27:29.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we are obviously very excited about all of""" start="00:27:33.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this and we'll tell you perhaps a little more""" start="00:27:35.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about what has changed over the last 10""" start="00:27:38.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""years. As usual, you know the pre-recorded""" start="00:27:41.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talks are available right now on the talk""" start="00:27:44.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""page, at least for all those which were""" start="00:27:46.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""pre-recorded. All the ones which happened on""" start="00:27:48.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the Google button, it will take us a little""" start="00:27:50.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bit of time to figure out how to,""" start="00:27:52.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well, when to put them available.""" start="00:27:54.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We need to do subtitles and all this jazzy""" start="00:27:56.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stuff. And we'll also upload them to YouTube""" start="00:27:59.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and other places once we check the audio,""" start="00:28:01.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""especially for the Q&As.""" start="00:28:02.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We need to clean up some of the audios and""" start="00:28:05.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""make sure that we do not publish any personal""" start="00:28:08.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stuff. All the live talks and Q&As will do""" start="00:28:13.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this in the weeks to come.""" start="00:28:14.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Usually, it takes us about 1 to 2 months to""" start="00:28:16.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""try to get everything out,""" start="00:28:17.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but if it takes longer,""" start="00:28:18.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's fine. Eventually,""" start="00:28:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything will be there.""" start="00:28:20.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""The 1 thing we can say is that by EmacsConf""" start="00:28:23.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""2024, when it comes around,""" start="00:28:26.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything should have been uploaded at some""" start="00:28:28.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point. So that's a wide window.""" start="00:28:30.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So again, and as usual,""" start="00:28:34.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""feel free to spread the word about EmacsConf""" start="00:28:35.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because, you know, we've been doing this for""" start="00:28:38.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a while and every year more people show up to""" start="00:28:42.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these events and more people watch the videos""" start="00:28:43.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on YouTube and it's wonderful to see,""" start="00:28:46.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, our main goal which is to get cool""" start="00:28:49.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ideas out of the head of people,""" start="00:28:51.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""shared and viewed by so many people.""" start="00:28:53.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's always amazing. Also,""" start="00:28:56.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I would like to ask you personally,""" start="00:28:58.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what did you like about this conference?""" start="00:28:59.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Or what do you like, what do you feel was""" start="00:29:01.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""better than last year,""" start="00:29:02.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because the feedback is very useful to us.""" start="00:29:05.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We'd also like to know if you've got any""" start="00:29:07.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ideas for making things even better.""" start="00:29:08.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And we've got a general conference discussion""" start="00:29:11.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""slash notes slash community message board,""" start="00:29:13.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is pad.emaxconf.org""" start="00:29:14.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""slash 2023. And you can also just mention""" start="00:29:19.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""them. You know, we might open this room for""" start="00:29:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people to join us and chat,""" start="00:29:24.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""although Flowy and myself,""" start="00:29:25.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""your up team, needs to go to bed.""" start="00:29:27.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So please be mindful of this.""" start="00:29:28.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you ask a very interesting question,""" start="00:29:29.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We will both have to make sacrifices to stay""" start="00:29:32.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a while longer because you're too damn""" start="00:29:34.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interesting. Now we'd like to move into""" start="00:29:38.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thanking all the people who make EmacsConf""" start="00:29:41.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""possible. And obviously,""" start="00:29:42.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""first, we have to thank all the speakers,""" start="00:29:45.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all the volunteers, the participants,""" start="00:29:46.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and to all those other people in our lives""" start="00:29:49.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""who make it possible through time and""" start="00:29:51.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""support, thank you so much for allowing us to""" start="00:29:53.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""run EmacsCount. It wouldn't happen without""" start="00:29:55.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you, and without us, I suppose,""" start="00:29:57.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because we are included in this.""" start="00:29:58.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""This year's conference hosts are myself,""" start="00:30:01.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo Vivier, Amine Bendali,""" start="00:30:03.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and joining our team of hosts for the first""" start="00:30:05.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time this year, Flobby Coder.""" start="00:30:07.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you so much, Flobby.""" start="00:30:08.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You did a wonderful job.""" start="00:30:09.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's right there. No, dammit.""" start="00:30:11.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""No, I can't. I can never remember if BBB is""" start="00:30:15.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""flipping stuff, so either 1 of those""" start="00:30:17.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""directions. The streams this year,""" start="00:30:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as last year, were managed by Sasha Schwa,""" start="00:30:21.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""obviously. And the check-ins by Flobby Coder,""" start="00:30:24.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I'm in with Miscellaneous running around""" start="00:30:27.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""by Corwin Brust, who will be joining us""" start="00:30:30.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""momentarily. Apparently,""" start="00:30:32.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all his USB failed, so he will be with us as""" start="00:30:34.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Roost. Rhymes with Roost.""" start="00:30:38.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do I have audio now? Alright,""" start="00:30:41.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll go to work on my camera.""" start="00:30:42.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Hi. Hello?""" start="00:30:43.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: soon as he can. It's Lovely.""" start="00:30:45.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, I'll keep going.""" start="00:30:46.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I also need to thank, well,""" start="00:30:49.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""need, no, I want to thank all the captioning""" start="00:30:51.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""volunteers, the captioners as we call them.""" start="00:30:53.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You've got Daniel Molina,""" start="00:30:54.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Bala Ramadoui, Durai, sorry,""" start="00:30:57.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Bhavin Gandhi, Amin Zayed,""" start="00:30:59.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yoni Rapkin, who presented 1 of the talk""" start="00:31:02.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""earlier, Daniel Alejandro Tapia,""" start="00:31:04.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Hannah Miller, Ken Huang,""" start="00:31:06.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Jean-Christophe Ellary,""" start="00:31:07.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and James Howell. Also thanking""" start="00:31:10.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Jean-Christophe Ellary,""" start="00:31:11.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Colwyn, Quiliro, Kern,""" start="00:31:13.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and Amin Bendali for helping with the early""" start="00:31:15.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""acceptance process. Sasha,""" start="00:31:18.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do I read this 1? It's weird to think myself.""" start="00:31:21.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm gonna pat myself on the back,""" start="00:31:22.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess. Go on, Sasha.""" start="00:31:24.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll do it. I'll do it.""" start="00:31:26.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's fine. Thanks to myself for fiddling with""" start="00:31:29.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the audio to get things nicely synced,""" start="00:31:30.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And thanks to myself again and other people,""" start="00:31:34.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we kept the mailing list free from spam.""" start="00:31:36.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Because I'm not sure what happened since May,""" start="00:31:39.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but we've been receiving about 3 to 4 spam""" start="00:31:41.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""emails. And it just happened all of a sudden,""" start="00:31:44.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I was really weirded out by this process.""" start="00:31:46.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Where was I? OK, thanks to Andrew Ducurty for""" start="00:31:51.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""helping with whisper processing.""" start="00:31:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thanks to Ashki Ghekwad for design""" start="00:31:55.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""contribution. Thanks to Yoshin,""" start="00:31:57.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""our grand changro for all the music that""" start="00:31:59.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we've been using for the last 3 years at this""" start="00:32:01.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point, I think. Also thanks to Rye for the""" start="00:32:04.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""server that we're using for OBS streaming and""" start="00:32:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for processing videos.""" start="00:32:07.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And also thanks to the free software""" start="00:32:10.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""foundation for obviously Emacs itself,""" start="00:32:12.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the mailing list that we use,""" start="00:32:14.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and the media.emacsconf-org""" start="00:32:15.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""server where all of the presentations are""" start="00:32:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""currently hosted. We'd also like to thank""" start="00:32:22.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""BigBlueButton, Etherpad,""" start="00:32:23.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""IceCast, OBS, The Lounge,""" start="00:32:25.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Libre.chat, FFmpeg, OpenAI,""" start="00:32:28.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Whisper, the E-N-E-S force alignment tool,""" start="00:32:31.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Site Transfer, SubD, and contributors to all""" start="00:32:34.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of the tools and services we used in the""" start="00:32:36.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""making of this conference.""" start="00:32:37.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And obviously, all of them are free,""" start="00:32:39.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as Sasha obviously told you,""" start="00:32:41.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and as we will be telling you again for many""" start="00:32:44.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""years to come. We'd also like again to thank""" start="00:32:47.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everyone for attending the conference and""" start="00:32:49.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""making EmacsConf what it is.""" start="00:32:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And for those who were on the general track,""" start="00:32:54.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know Sasha did it in parallel to the last""" start="00:32:56.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talk we had today. She did a wonderful talk""" start="00:32:58.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on how EmacsConf is actually run.""" start="00:33:01.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So there's her talk, there's also an entire""" start="00:33:05.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""page on our wiki about the infrastructure""" start="00:33:07.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that we use. So if you're interested,""" start="00:33:09.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""especially in running an event of your own,""" start="00:33:11.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you've got as much information as you want,""" start="00:33:14.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and as Sacha probably told you,""" start="00:33:15.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we are available for sharing the knowledge""" start="00:33:17.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and enabling your dreams of making a""" start="00:33:20.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference. Amint, do you want to take it""" start="00:33:24.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""over with the fiscal sponsorship""" start="00:33:25.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, sure. Let's see.""" start="00:33:29.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Can you please scroll down a little bit?""" start="00:33:30.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Whoever is kindly sharing the screen.""" start="00:33:33.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: announcements? Okay. Oh,""" start="00:33:34.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I was scrolling on my end.""" start="00:33:36.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sorry.""" start="00:33:36.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Thanks, Sasha. Yeah, so kind of super excited""" start="00:33:41.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to finally get into this.""" start="00:33:43.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And this is something that we've been kind of""" start="00:33:45.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hoping to get worked out for a long time""" start="00:33:46.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually and it's finally here.""" start="00:33:48.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So people might have already seen this but as""" start="00:33:52.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of this last Thursday we're actually fiscally""" start="00:33:57.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sponsored by the Free Software Foundation.""" start="00:33:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we joined their Working Together for Free""" start="00:34:03.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Software program. And DFSF published the""" start="00:34:07.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""announcement on their website.""" start="00:34:08.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You're welcome to go and check it out there.""" start="00:34:11.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I just want to quickly get into a little""" start="00:34:14.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bit about what it means and some of the""" start="00:34:17.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""benefits, I guess. So as part of this working""" start="00:34:21.719" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""together for a free software fund,""" start="00:34:23.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the FSF provides fiscal sponsorship for a""" start="00:34:26.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""number of important free software and new""" start="00:34:29.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""technical projects, such as the new tool""" start="00:34:30.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""chain and Replicant, which is a free fork of""" start="00:34:33.679" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Android. And starting this year,""" start="00:34:36.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf has joined the program as well.""" start="00:34:38.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And as a fiscal sponsor,""" start="00:34:40.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""DFSF can assist us by providing services""" start="00:34:43.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""required by a legal entity,""" start="00:34:46.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like signing contracts and receiving and""" start="00:34:49.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""processing payments. So to provide some""" start="00:34:53.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""context, eMAXConf is and always has been an""" start="00:34:56.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""independent initiative organized by a very""" start="00:34:58.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""small number of people,""" start="00:34:59.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a small team of people without any corporate""" start="00:35:02.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sponsors. And that's important in part""" start="00:35:05.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because I believe part of our message is that""" start="00:35:08.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we want to showcase that everybody can do""" start="00:35:11.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this and organize a conference like this no""" start="00:35:14.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""matter how small your team is and how modest""" start="00:35:17.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""your resources are, which we will actually""" start="00:35:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""get into a little bit later in the closing""" start="00:35:21.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""remarks. But yeah, so now having the FSF as""" start="00:35:25.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""our fiscal sponsor, we're in a better""" start="00:35:27.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""position to accept donations as 1 potential""" start="00:35:30.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""way to contribute or help the conference.""" start="00:35:33.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And just to clarify, we're currently not""" start="00:35:36.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""struggling at all to cover these costs of the""" start="00:35:39.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""servers and such, which we will get into""" start="00:35:41.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""again. But this is just 1 extra avenue if""" start="00:35:44.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people are feeling generous and would like to""" start="00:35:46.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""help, it's much appreciated.""" start="00:35:47.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And yeah, so having a 501c3 nonprofit like""" start="00:35:54.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the FSF, as a fiscal sponsor,""" start="00:35:57.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""many donors will receive tax benefits that""" start="00:36:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they otherwise wouldn't receive if they were""" start="00:36:02.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to like donate to like individuals running a""" start="00:36:04.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""project directly. And also donors can know""" start="00:36:07.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that, you know, the funds that they're""" start="00:36:08.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""donating are being handled by an accountable""" start="00:36:10.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""institution. And also importantly,""" start="00:36:14.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""when donating through the FSF,""" start="00:36:16.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Let's see, text changing.""" start="00:36:19.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, yeah. People can donate without having""" start="00:36:23.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to run any non-free JavaScript,""" start="00:36:24.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is nice. Because unfortunately,""" start="00:36:27.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""usually these days on the web when you do""" start="00:36:29.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""want to buy something or spend money,""" start="00:36:30.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you have to run non-free JavaScript,""" start="00:36:31.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which isn't the case when donating through""" start="00:36:35.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the FSF. Yeah, so we just joined,""" start="00:36:37.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as I said, on Thursday,""" start="00:36:39.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and we've already received our very first""" start="00:36:43.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""donation, so we'd like to extend our thanks""" start="00:36:45.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and gratitude to Scott Ranby,""" start="00:36:46.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""who is actually our first ever kind donor.""" start="00:36:49.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""They agreed to be thanked publicly.""" start="00:36:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So thank you, Scott. And yeah,""" start="00:36:55.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so this is a recent development.""" start="00:36:57.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And we plan to add much more information and""" start="00:36:59.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""details about this whole situation to the""" start="00:37:01.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""wiki, including links to the announcements,""" start="00:37:04.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some more information about the program,""" start="00:37:06.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and our donation page of course,""" start="00:37:08.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the new future. And in the meantime I'm""" start="00:37:12.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""also happy to help answer any questions as""" start="00:37:15.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""best as I can, So feel free to ping me on IRC""" start="00:37:17.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or just email me at bandalia.guinard.org.""" start="00:37:19.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Which gives me a chance to jump in and just""" start="00:37:26.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point out 1 question that we know people have""" start="00:37:29.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is just about how much of the money goes to""" start="00:37:32.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""FSF when you make a contribution through the""" start="00:37:35.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""fund toward EmacsConf?""" start="00:37:36.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, exactly. Yeah, and the answer to that""" start="00:37:40.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is that it's 10%, which is for supporting the""" start="00:37:44.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""operation of the Working Together program and""" start="00:37:46.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""also the shared GNU infrastructure,""" start="00:37:48.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which we as EmacsConf use and depend on,""" start="00:37:52.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""along with several hundred GNU packages.""" start="00:37:54.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, yeah, and it covers things like""" start="00:37:59.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""transaction costs that the FSF's payment""" start="00:38:03.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""processor charges?""" start="00:38:04.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: And then again I'll come back to say this is""" start="00:38:10.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a real fair price. I have some experience""" start="00:38:12.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with working with payment processing and""" start="00:38:15.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things like this and like 10% that's a that's""" start="00:38:19.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""something that you see in Bigger businesses""" start="00:38:22.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that have a model around making money on that""" start="00:38:25.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Transaction so to be able to do that as a""" start="00:38:29.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""nonprofit. We're taking advantage of a really""" start="00:38:31.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""awesome thing there.""" start="00:38:32.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, exactly. And yeah,""" start="00:38:35.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just for a quick plug,""" start="00:38:36.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the FSF is actually doing an end of year""" start="00:38:38.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""fundraiser right now. So if you want to go""" start="00:38:41.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""donate to them, or if you donate to us,""" start="00:38:44.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a part of it will go to the FSF to support""" start="00:38:47.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""their work on free software,""" start="00:38:51.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""helping grow the movement,""" start="00:38:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and spread the word about it.""" start="00:38:56.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, thank you. And I guess now is a good time""" start="00:39:02.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for me to pass the baton to the next""" start="00:39:05.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organizer who wants to talk about some of the""" start="00:39:08.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""specs of the servers that we use right now.""" start="00:39:11.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: We actually don't have to go about this in""" start="00:39:14.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""detail. I just put it in there in case people""" start="00:39:16.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""were curious about how much it takes to run""" start="00:39:19.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""something like this. Not a lot.""" start="00:39:20.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's just really, you know,""" start="00:39:22.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""2 days of computing is not that expensive in""" start="00:39:26.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""today's world, and all the rest is just""" start="00:39:29.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""volunteer time and a heck of a lot of Emacs""" start="00:39:32.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""lists as previously discussed in our""" start="00:39:34.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""presentation. So, we'll just skip through""" start="00:39:41.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that instead of reading all of it.""" start="00:39:42.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Unless people are specifically curious,""" start="00:39:43.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you can ask questions afterwards.""" start="00:39:44.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But yes, happy birthday,""" start="00:39:46.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf, and here's another wonderful 10""" start="00:39:49.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""years.""" start="00:39:49.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: All right, I think we are at the end of the""" start="00:39:56.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""closing remarks. Have I forgotten anything?""" start="00:39:58.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We haven't had Flowy yet,""" start="00:40:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I believe. Sorry for putting you on the spot""" start="00:40:03.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""again.""" start="00:40:03.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: I guess I have nothing really to say besides""" start="00:40:07.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what you have already said.""" start="00:40:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So thank everybody to make a presentation,""" start="00:40:12.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to do anything here. Thanks for all of you""" start="00:40:15.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that I could be a part of it.""" start="00:40:16.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have to admit it also.""" start="00:40:17.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So thank you all. And yeah,""" start="00:40:21.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""nothing to say probably.""" start="00:40:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: And I also want to send the thanks to Flowy""" start="00:40:25.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for, you know, stepping in.""" start="00:40:27.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We kind of like throw this on you like at the""" start="00:40:29.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""last second, but Flowy actually stepped in""" start="00:40:31.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and hosted graciously a couple of the talks""" start="00:40:33.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on the Dev track today.""" start="00:40:34.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, which I think went very well.""" start="00:40:36.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So congrats and thank you.""" start="00:40:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: Thank you.""" start="00:40:39.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Speaking of which we were not monsters.""" start="00:40:41.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We kindly asked Floey yesterday because""" start="00:40:43.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything was going so well.""" start="00:40:44.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And now we can say it,""" start="00:40:45.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, I can say things are going well.""" start="00:40:46.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Usually it's a bad thing when you're doing a""" start="00:40:48.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""broadcast to say things are going well right""" start="00:40:50.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""now because it tends to backfires at some""" start="00:40:53.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Hours of notice, hours of notice.""" start="00:40:56.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That, that's planning.""" start="00:40:58.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: point. But yesterday- So hours of notice,""" start="00:41:02.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Flowy didn't sleep all that much because we""" start="00:41:04.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tasked him with hosting,""" start="00:41:06.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so he was turning in his bed all night""" start="00:41:08.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thinking, oh, I'm going to host MaxCons.""" start="00:41:09.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But Flowy, you did a wonderful job and I am""" start="00:41:13.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so glad that not only you were able to join""" start="00:41:15.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""us again this year, but that also you were""" start="00:41:17.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""able to host. Because last year,""" start="00:41:19.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""had we asked you to host,""" start="00:41:20.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you would have said no.""" start="00:41:21.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""First time we asked you this year was yes,""" start="00:41:25.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but give me some time to think about it.""" start="00:41:27.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: Next year it is yes completely.""" start="00:41:30.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: If we've done a good job,""" start="00:41:32.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it will be yes directly.""" start="00:41:33.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""All right, so since we are at the end of the""" start="00:41:38.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thankings and I did say europe team needs to""" start="00:41:41.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""go to bed in about 12 minutes that leaves us""" start="00:41:43.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about 12 minutes to try to answer as many""" start="00:41:45.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""points as you'd like to raise.""" start="00:41:47.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha, I think the Q&A room is still open""" start="00:41:50.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because we are technically still in the Emacs""" start="00:41:52.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference room currently.""" start="00:41:53.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, if you... We're going to put the link""" start="00:41:56.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""again if you need to find it.""" start="00:41:57.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Otherwise, scroll up and find the 1 on there.""" start="00:41:59.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: I think I can change the redirect.""" start="00:42:04.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Maybe. I will go figure this out.""" start="00:42:07.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Keep talking in the background.""" start="00:42:08.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Right. So, whilst we figure this out in the""" start="00:42:12.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""background, it would be nice if you could""" start="00:42:13.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""join us and ask questions,""" start="00:42:14.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""either by dropping them.""" start="00:42:15.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I see plenty of people have already left some""" start="00:42:18.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""comments. We have 2 places,""" start="00:42:19.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right now it's more about a chitchatting""" start="00:42:21.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about the end of the conference.""" start="00:42:23.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you've got general feedback,""" start="00:42:24.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we've mentioned it at the top,""" start="00:42:26.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but if you want to write your general""" start="00:42:28.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""feedback here, it will find its way at some""" start="00:42:30.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point in the years of the relevant people who""" start="00:42:32.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can make things change.""" start="00:42:33.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So don't worry too much about where you put""" start="00:42:35.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""your feedback, it'll be fine.""" start="00:42:37.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But now, how about we start reading some of""" start="00:42:40.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the notes that people have said or questions""" start="00:42:42.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that""" start="00:42:43.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: have been asked. So here's 1 for Amin.""" start="00:42:47.094" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do you have any stats on how many people""" start="00:42:48.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""watched for an IRC and BBB over the 2 days?""" start="00:42:52.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, yeah, so I guess for IceCast,""" start="00:42:58.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which I can answer more readily,""" start="00:43:00.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think yesterday we were averaging around""" start="00:43:03.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""240, 250 concurrent viewers at a time.""" start="00:43:08.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And today, so today it varied.""" start="00:43:12.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think the maximum was again like around 200""" start="00:43:16.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to 20-ish with the average being more around""" start="00:43:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""180, 190 viewers. We've had a lot of hits to""" start="00:43:24.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the actual web pages for the Emacs Conf Wiki""" start="00:43:28.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or the pad, which are all being served on 1""" start="00:43:31.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""server. I pulled some numbers.""" start="00:43:34.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm not sure if they're correct.""" start="00:43:36.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'm like a little bit hesitant to discuss""" start="00:43:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""them. Safe to say they're easily in the tens""" start="00:43:41.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of thousands, maybe in the hundreds of""" start="00:43:44.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thousands of total visits over the past,""" start="00:43:47.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Maybe the pad makes a lot of small requests.""" start="00:43:52.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: I guess, 48 hours. Right,""" start="00:43:53.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""okay. So, yeah, that's why I'm hesitant to""" start="00:43:57.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""say. But yeah, easily in the thousands or""" start="00:43:59.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: You know""" start="00:44:01.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: who you are anyway, the crowd,""" start="00:44:02.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know how many you are,""" start="00:44:04.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you do not need exact numbers""" start="00:44:05.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: tens of thousands. Yeah,""" start="00:44:08.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so I don't have the exact numbers but I guess""" start="00:44:11.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's always kind of fun to maybe try to pull""" start="00:44:13.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some numbers and look at it that way but you""" start="00:44:15.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""know of course we all know that what we do,""" start="00:44:18.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""every single person counts.""" start="00:44:19.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I don't know, trying to look at turning""" start="00:44:24.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people into abstract numbers isn't,""" start="00:44:27.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know, inspiring to me very much,""" start="00:44:30.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it's cool. So.""" start="00:44:31.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: All right. So how about we go into the""" start="00:44:36.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions. So Sasha is now in the viewport""" start="00:44:37.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where we can see some questions.""" start="00:44:39.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So how about we take some of them.""" start="00:44:41.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can read them or if anyone of the""" start="00:44:43.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organizers wants to do this,""" start="00:44:45.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""feel free, especially those who haven't""" start="00:44:46.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talked to a whole lot this year.""" start="00:44:48.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Cohen, do you want to try it?""" start="00:44:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I didn't make my motive clear.""" start="00:44:54.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I did and I'm done. I took the first""" start="00:44:59.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""question, I picked the bottom question off""" start="00:45:01.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the list because I knew exactly who it was""" start="00:45:02.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""going for. The person who wants to answer or""" start="00:45:05.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""direct the next question is welcome.""" start="00:45:07.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sorry, I could have given a little better""" start="00:45:10.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stage direction there.""" start="00:45:11.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm not prepared to answer how many emaxers""" start="00:45:13.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""are from Nordic countries other than to say""" start="00:45:16.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""definitely yes and several.""" start="00:45:17.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I haven't looked close enough at the""" start="00:45:21.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""suggestion yet.""" start="00:45:22.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Right, okay. I can take the question about""" start="00:45:27.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the BBB limitations. So it's the second 1,""" start="00:45:30.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the red 1. Small suggestion,""" start="00:45:31.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""likely out of your control,""" start="00:45:33.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but anyway, the blue button seems to work""" start="00:45:36.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""very well, but it would be a bit more""" start="00:45:38.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""watchable if the webcam frames were lined up""" start="00:45:40.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""vertically on 1 side, because it would allow""" start="00:45:42.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the screen share frames to be larger and""" start="00:45:44.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would make much better use of the viewable""" start="00:45:47.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""space. Maybe worth a bug report to upstream.""" start="00:45:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I agree, BBB has been really good.""" start="00:45:53.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Amine, did you want to say something?""" start="00:45:54.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I'm going""" start="00:45:55.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: to continue and then I'll add something at""" start="00:45:56.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the end.""" start="00:45:56.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Okay, sure. So BBB has been really good for""" start="00:45:59.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""us. It allows us to have many parallel rooms""" start="00:46:04.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which are all recording service side at the""" start="00:46:07.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""same time. And it's wonderful for us because""" start="00:46:09.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we can gather. At some point,""" start="00:46:11.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think last year, we had 4 concurrent talks""" start="00:46:13.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""being recorded because people were just so""" start="00:46:15.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interested in what was going on in rooms.""" start="00:46:17.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And you know, we only,""" start="00:46:19.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like this year, the co-organizers,""" start="00:46:21.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's the 5 people you see in a room""" start="00:46:23.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""currently. And if we had all of us to be in a""" start="00:46:26.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""separate room, having to record on the""" start="00:46:28.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""machine, it wouldn't work.""" start="00:46:29.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we are able to demultiply the amount of""" start="00:46:32.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""content that we produce thanks to BBB,""" start="00:46:33.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but sadly, we are also quite limited by the""" start="00:46:37.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interface of BBB. Another problem that is""" start="00:46:39.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""dear to me is that audio tends to be fairly""" start="00:46:43.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bad at some points depending on the speakers""" start="00:46:46.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because BBB has really funky audio correction""" start="00:46:50.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stuff going in the background,""" start="00:46:51.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and sometimes it works,""" start="00:46:52.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sometimes it doesn't work,""" start="00:46:53.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and especially on my machine,""" start="00:46:55.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the specs are above in the document if you're""" start="00:46:58.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interested, but BBB and OBS do not play well""" start="00:47:02.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at all. You might have heard me speaking with""" start="00:47:04.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some clicks in my voice at some point.""" start="00:47:06.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's another problem of BBB.""" start="00:47:07.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Anyway, I mean, you wanted to add something""" start="00:47:09.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as well.""" start="00:47:09.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, yeah, I kind of empathize and also""" start="00:47:14.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""emphasize the problems with audio on BBB""" start="00:47:17.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sometimes, but about the specific suggestion""" start="00:47:19.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here of like lighting things up at least""" start="00:47:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""visually, I think that's like much more""" start="00:47:24.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""doable even if you don't open a bug upstream.""" start="00:47:26.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I believe the Free Software Foundation for""" start="00:47:30.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""their LibrePlanet conference,""" start="00:47:31.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""either last year or the year before,""" start="00:47:33.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they had some custom, like clients signed""" start="00:47:36.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""into browser, custom CSS,""" start="00:47:38.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where it would do exactly something like""" start="00:47:40.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that. It would like enlarge the shared screen""" start="00:47:44.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on the 1 side and then stack up all of the""" start="00:47:46.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""webcam feeds on 1 side.""" start="00:47:48.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we might be able to use something like""" start="00:47:50.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that.""" start="00:47:50.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: So I'll tack on to that.""" start="00:47:53.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And now I feel like a heel as soon as I""" start="00:47:56.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""opened my mouth, because I think I almost get""" start="00:47:59.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the sense Floyd wants to jump in here and""" start="00:48:01.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're all talking, everyone except Sasha who""" start="00:48:03.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually wrote OBS, you know,""" start="00:48:06.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the OBS WebSocket plugin that is probably the""" start="00:48:10.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""answer to all the different questions""" start="00:48:12.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everyone is bringing up.""" start="00:48:13.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I guess I'll leave my input at that And""" start="00:48:15.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Chloe, did you have anything to say,""" start="00:48:16.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or can we pick on Sasha?""" start="00:48:17.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: Nothing to say.""" start="00:48:20.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: I need to update the OBS WebSocket plugin for""" start="00:48:25.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the protocol change, because I think the""" start="00:48:27.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""protocol change was from 4 to 5.""" start="00:48:29.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's 1 of those things that I haven't gotten""" start="00:48:32.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool. But""" start="00:48:35.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: around to. yeah, so we'll try to solve it in""" start="00:48:37.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""CSS. So if I can tinker with the CSS or if""" start="00:48:41.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""somebody else would like to volunteer to move""" start="00:48:44.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things around, then that would be fantastic""" start="00:48:45.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because front-end should be things.""" start="00:48:48.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Okay, oh, what order of magnitude hours do""" start="00:48:53.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you each of you think you devote to the""" start="00:48:55.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference yearly? I have I expected someone""" start="00:48:58.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would ask this question.""" start="00:48:59.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I have I have my the past 11 years of time""" start="00:49:07.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""analysis. This is my Emacs category,""" start="00:49:11.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so it also includes Emacs news.""" start="00:49:12.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So this is my Emacs hours by month and year.""" start="00:49:15.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So you can see last year,""" start="00:49:17.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it spiked up a lot. But this year,""" start="00:49:21.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it has taken less time.""" start="00:49:23.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So last month, it was about 93 hours.""" start="00:49:26.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the month before that was just about 87""" start="00:49:29.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hours of prep. And this actually includes""" start="00:49:31.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things like captioning and,""" start="00:49:33.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and coordination. And then you can see a""" start="00:49:36.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""little bit of time here like the EMAX news""" start="00:49:38.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and and harvesting q&a and adding chapter""" start="00:49:42.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""index indices and things like that.""" start="00:49:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I, I like it, it's it's my form of fun.""" start="00:49:47.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And Otherwise, I'm mostly just,""" start="00:49:50.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, helping the kiddo go to play dates""" start="00:49:52.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and carrying things around.""" start="00:49:54.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And, you know, so this is the stuff that I do""" start="00:49:57.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to keep my brain happy.""" start="00:49:58.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And if you're wondering,""" start="00:50:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""okay, well, do you sleep?""" start="00:50:01.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's the next question I expected people""" start="00:50:03.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ask. The answer is yes,""" start="00:50:04.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we still actually do manage to sleep,""" start="00:50:06.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or at least I do. Less so now that I have a""" start="00:50:09.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""kid, this is like 2016,""" start="00:50:10.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""had a kiddo, and then suddenly much less""" start="00:50:13.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sleep, but still a reasonable amount of""" start="00:50:14.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sleep. So Emacs stuff happens,""" start="00:50:16.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can still sleep, and it's a lot of fun.""" start="00:50:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Now that's data for you folks.""" start="00:50:23.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, we can't top that at all.""" start="00:50:26.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: It's a blog post also,""" start="00:50:30.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah.""" start="00:50:30.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Especially, you start like this,""" start="00:50:33.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""how do you expect all of us to say anything""" start="00:50:36.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""after this? Whatever we say is not going to""" start="00:50:38.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""be backed up by data, it's not going to be as""" start="00:50:40.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""many hours, and it's not going to be as""" start="00:50:42.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""qualitative in general.""" start="00:50:43.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can remark on something because for me it's""" start="00:50:53.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""my fourth year helping to organize EmacsConf""" start="00:50:56.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and there's a definite change this year.""" start="00:50:59.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I did spend, usually I get into EmacsConf""" start="00:51:02.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mode in late September when I start worrying""" start="00:51:05.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about the CFP, the call for proposal is""" start="00:51:07.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""finishing, and then we need to start running""" start="00:51:09.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""after speakers to secure the proposals to""" start="00:51:12.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""make sure, oh, can you do this?""" start="00:51:13.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Can you do maybe a 10-minute format instead""" start="00:51:16.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of a 20-minute format,""" start="00:51:17.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, all this jazzy stuff.""" start="00:51:18.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And usually it kind of looks like Sasha for""" start="00:51:21.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""me in terms of involvement,""" start="00:51:22.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or at least it did for the previous year.""" start="00:51:24.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But this year, now that I've been gainfully""" start="00:51:28.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""employed as a software developer,""" start="00:51:30.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I found it much harder to find the time to""" start="00:51:33.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""invest into MaxComp. But 1 of the things that""" start="00:51:36.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""allowed me to still stay efficient at my day""" start="00:51:39.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""job is the fact that I knew that Sasha and""" start="00:51:42.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all the work that we did in previous years""" start="00:51:43.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would come to help us organize this year's""" start="00:51:46.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference. And I'm not kidding,""" start="00:51:48.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this year, I've been keeping an eye,""" start="00:51:49.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""obviously, and we've been chatting with all""" start="00:51:51.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the organizers, but it's mostly been Sasha""" start="00:51:53.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""holding the fort from the end of the CFP in""" start="00:51:56.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""September to right about end of November.""" start="00:52:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'll use the opportunity,""" start="00:52:02.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as well my fellow co-organizers will,""" start="00:52:04.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to thank you Sasha for putting so much time""" start="00:52:07.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and energy into this. Not only Sasha from""" start="00:52:09.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this year, but also Sasha from last year,""" start="00:52:11.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and last year, and last year.""" start="00:52:12.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I will not be able to give you a figure""" start="00:52:19.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of how much time it takes.""" start="00:52:20.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can tell you that the 2 days of Emacs Con""" start="00:52:22.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""are a bloody marathon because we cannot share""" start="00:52:28.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""our screens with you, but Sasha has given you""" start="00:52:31.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a little bit of pointers about,""" start="00:52:32.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, how much stuff we need to monitor.""" start="00:52:34.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha just switches constantly between""" start="00:52:36.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""workspaces. I just put everything on 1""" start="00:52:38.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""workspace and my screen looks absolutely""" start="00:52:41.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""mental. And then I wonder why my microphone""" start="00:52:44.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is clipping on BVB, I suppose.""" start="00:52:46.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""All right, that's all for me.""" start="00:52:47.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Anyone wants to say anything about how much""" start="00:52:48.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time it takes? Sasha, please.""" start="00:52:49.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: I have a nice setup this year because I""" start="00:52:52.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually have a Matthew Lent donated a""" start="00:52:55.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""computer to me that can handle the big""" start="00:52:57.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""monitor and I'm stealing my husband's big""" start="00:53:00.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""monitor over there. See,""" start="00:53:01.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So this is my setup today.""" start="00:53:02.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's got like conference stuff on my laptop""" start="00:53:05.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then just IOC on the other big screen and""" start="00:53:08.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the 480p so I can see,""" start="00:53:10.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can make sure it doesn't fall down.""" start="00:53:12.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes, so I have a nice setup today.""" start="00:53:14.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Anyone wants to comment about how much time""" start="00:53:22.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it takes for them to organize the MaxCon for""" start="00:53:24.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""2, you know, including everything,""" start="00:53:25.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""be it the brainstorming,""" start="00:53:26.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the answering volunteers and stuff like this?""" start="00:53:28.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Or we can move to another question,""" start="00:53:31.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of course.""" start="00:53:31.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: I mean, I know for myself,""" start="00:53:34.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I kind of dropped the ball this year,""" start="00:53:36.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""somewhat unintentionally or unintentionally.""" start="00:53:38.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Well, yeah, I didn't have any other choice,""" start="00:53:41.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""basically, at least in like September through""" start="00:53:44.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like early November or mid November.""" start="00:53:46.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I think like, it sort of differs,""" start="00:53:51.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess, from year to year.""" start="00:53:52.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sometimes life happens,""" start="00:53:53.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and no matter how much you would love to put""" start="00:53:57.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a ton of time into something,""" start="00:53:59.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you just can't. And maybe next year you can""" start="00:54:01.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do a lot more. So I'm optimistic I'll be able""" start="00:54:04.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to put in much more time into things for""" start="00:54:07.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf next year, but that's just me.""" start="00:54:09.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: I just want to say something before Robin""" start="00:54:12.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""drops in. Sasha, go please first.""" start="00:54:13.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: And I think people shouldn't like feel bad""" start="00:54:18.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about having those. I think designing""" start="00:54:20.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference systems or processes so that they""" start="00:54:24.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can take advantage of little pockets of time""" start="00:54:26.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is the way to go. I love the fact that we now""" start="00:54:30.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have a system where hosts can show up on the""" start="00:54:33.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""day of and just rock it,""" start="00:54:35.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? So this is great.""" start="00:54:36.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It is good that we can get by with less time""" start="00:54:41.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""throughout the process and just take""" start="00:54:43.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""advantage of whatever time people have.""" start="00:54:45.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Whether it's, you know,""" start="00:54:46.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they've got 2 hours, they want to caption a""" start="00:54:49.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talk, that sort of stuff is already totally""" start="00:54:51.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""awesome.""" start="00:54:52.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: And yeah, you both, thank you.""" start="00:54:57.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, you both stole my Thunder and then put""" start="00:55:00.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a quarterback in me. I couldn't agree more""" start="00:55:03.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with everything you said.""" start="00:55:04.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's something that just typifies what is""" start="00:55:09.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""amazing about this conference,""" start="00:55:10.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? It's a kind of accessibility,""" start="00:55:12.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""isn't it? Having some work I can give you""" start="00:55:17.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that helps you give back to your community""" start="00:55:19.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that is at your level,""" start="00:55:21.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that fits your time budget,""" start="00:55:23.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that is something that you're willing to go""" start="00:55:26.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""care about because it intersects,""" start="00:55:28.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, the world you live in in some""" start="00:55:31.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""practical way and therefore you can make time""" start="00:55:34.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for it. We all live in a lot of different""" start="00:55:37.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""trenches and making them intersect is 1 of""" start="00:55:40.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the things Emacs does in a technical way""" start="00:55:42.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: and""" start="00:55:43.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: through this conference at least in a very""" start="00:55:47.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""community way. Okay, and it brings me back""" start="00:55:51.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""also on the OBS front.""" start="00:55:52.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think that's what really excited me""" start="00:55:54.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""too. When I think about the potential that's""" start="00:55:56.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out there and getting a bunch of people""" start="00:55:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""looking at the work you've already done with""" start="00:56:01.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""OBS WebSocket and thinking about,""" start="00:56:03.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, oh, we want more timers that count""" start="00:56:06.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things down and we want each organizer to be""" start="00:56:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""able to have a little palette of them,""" start="00:56:10.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some of which are gonna be handed to you by""" start="00:56:12.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the conference director and some of which you""" start="00:56:14.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can add yourself because they help you and""" start="00:56:16.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's right. And, you know,""" start="00:56:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have, you know, keeping things really fast""" start="00:56:21.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and loose so we can make the artistic""" start="00:56:24.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""decisions on the fly that make our conference""" start="00:56:26.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what it is, but then making,""" start="00:56:30.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, a simple automated tool chain that""" start="00:56:33.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""anyone can learn and that we know how to""" start="00:56:36.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""execute the steps of manually.""" start="00:56:37.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's the actual design pattern that you've""" start="00:56:41.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""implemented here that's working so well.""" start="00:56:42.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So the""" start="00:56:47.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: 1 thing I wanted to ask about Amin saying,""" start="00:56:50.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, I've dropped the ball this year.""" start="00:56:51.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Amin's, just to be clear with everyone,""" start="00:56:53.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Amin's definition of dropping the ball is""" start="00:56:55.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""securing a sponsorship with the FSF.""" start="00:56:56.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So that's dropping the ball for you.""" start="00:56:58.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Well attending a weekly meeting,""" start="00:57:02.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We take 1 week off a month where we""" start="00:57:04.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""coordinate infrastructure issues between this""" start="00:57:08.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and other FSF supported projects using quote""" start="00:57:13.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""unquote GNU infrastructure.""" start="00:57:14.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's kind of a, GNU is really an umbrella""" start="00:57:16.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""term once you get kind of close to it.""" start="00:57:19.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know, it's like GNU is all of the""" start="00:57:22.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""volunteers helping with this vision we have""" start="00:57:25.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of user rights.""" start="00:57:25.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: 1 last thing I wanted to add about how much""" start="00:57:31.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time we spend on this.""" start="00:57:32.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's just the fact that we've experimented""" start="00:57:33.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""over the 4 years I've been part of this.""" start="00:57:36.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know, the first year we had so many""" start="00:57:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""meetings because we thought this would be the""" start="00:57:40.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""way to know 1 another and this would be the""" start="00:57:42.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""way to create qualitative notes.""" start="00:57:44.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And we've come back to this.""" start="00:57:46.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: That is what I saw. I can't help but""" start="00:57:48.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interrupt you again. This is all I do.""" start="00:57:49.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo This is why I keep off the microphone""" start="00:57:52.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""until the last 20 minutes of the conference""" start="00:57:54.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""once everybody already wants to hang up Then""" start="00:57:56.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I know you'll be honest with me But I have to""" start="00:57:58.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""say when I looked at that table of data all I""" start="00:58:01.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""saw was 200 hours of Sasha's life that she""" start="00:58:05.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""spent talking to the, you know,""" start="00:58:06.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all many of us were involved.""" start="00:58:08.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's not just the 4 or 5 of us that,""" start="00:58:10.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, that have done this last 2 years""" start="00:58:13.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""convention, right? It's,""" start="00:58:14.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, there's been many people that have""" start="00:58:17.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""come in, shared wise thoughts,""" start="00:58:19.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""helping us form the, I don't know,""" start="00:58:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ethos or all of the things that we're""" start="00:58:24.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""carrying forward into 2024.""" start="00:58:26.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sorry, Leo.""" start="00:58:31.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: No, no,""" start="00:58:32.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: you're fine, You're fine.""" start="00:58:33.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, you pretty much continued with what I""" start="00:58:35.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""was going to talk about.""" start="00:58:37.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'm looking at the time and I've already""" start="00:58:41.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""extended by 5 minutes the amount of time I""" start="00:58:44.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""was supposed to stay and Flowy is looking at""" start="00:58:46.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""me with very teary eyes because he's thinking""" start="00:58:50.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about the meeting he's going to have at 9am""" start="00:58:51.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tomorrow, as will I by the way.""" start="00:58:53.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, don't you have to""" start="00:58:54.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: be commuting like right now Flowy?""" start="00:58:56.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean aren't you supposed to be...""" start="00:58:58.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I hope you get to sleep before work.""" start="00:59:01.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you so much for your awesome work this""" start="00:59:04.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year.""" start="00:59:04.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: I mean, I didn't do so much at the Emojis""" start="00:59:07.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Conference, so I'm just here like from""" start="00:59:09.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Friday. At first, I was looking at the""" start="00:59:13.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""website, which talks we're having,""" start="00:59:14.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So it's all fine. So maybe next year or the""" start="00:59:17.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""coming year, I can do a little bit more""" start="00:59:19.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""privacy.""" start="00:59:19.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: A little more, like again,""" start="00:59:23.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like with Amin, Flowy's definition of doing,""" start="00:59:25.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""not having done much is hosting 1 of many of""" start="00:59:30.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the Dev talks. So you could be kind of""" start="00:59:34.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""worried about it. All right,""" start="00:59:35.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""folks, considering the question that we have""" start="00:59:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right now, we still see people adding""" start="00:59:40.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""questions, but I think we are all pretty""" start="00:59:42.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tired and we need to get on with the rest of""" start="00:59:44.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""our weekends or nights.""" start="00:59:46.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So do I go into parting words now everyone?""" start="00:59:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Are we okay with this?""" start="00:59:50.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll take this for a yes.""" start="00:59:55.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll ask Sasha, yeah?""" start="00:59:56.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh I think I basically have until the kiddo""" start="01:00:00.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yells at me to come for dinner so I can hang""" start="01:00:03.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out with people after.""" start="01:00:04.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and do the wrapping up.""" start="01:00:09.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: But I""" start="01:00:09.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: All right, splendid. Go ahead know,""" start="01:00:10.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right, I'll do the wrapping up for the""" start="01:00:12.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""perhaps the stream. We might leave it up""" start="01:00:13.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""because there's no impetus for us to close""" start="01:00:16.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it. But at least to officially close while""" start="01:00:20.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're still there, EmacsConf 2023,""" start="01:00:22.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I will have again to thank everyone,""" start="01:00:25.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all the speakers, all my co-organizers for""" start="01:00:28.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""making this possible. You've seen all the""" start="01:00:31.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""care that we put into it,""" start="01:00:32.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and we are glad every year that all this work""" start="01:00:34.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is doing something in terms of community""" start="01:00:37.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""building, in terms of leading more people to""" start="01:00:41.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""join us every year as speakers,""" start="01:00:42.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or just join us as a user of Emacs.""" start="01:00:45.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's always a pleasure to organize the""" start="01:00:49.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference, to host it,""" start="01:00:51.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and to work with everyone in the room""" start="01:00:53.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""currently. Corwin and I are constantly joking""" start="01:00:56.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""when we are backstage making jokes.""" start="01:00:59.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think it's Corwin we said last year during""" start="01:01:03.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the closing remarks that there was no other""" start="01:01:06.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""place they'd rather be than in the backstage.""" start="01:01:09.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And for me, even though many things have""" start="01:01:12.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""changed in my life over the last year,""" start="01:01:15.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""many good things have happened,""" start="01:01:16.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's good to come back to Emacs Cons as this""" start="01:01:19.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""milestone and say, oh yeah,""" start="01:01:22.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm exactly where I want to be,""" start="01:01:23.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with the people I want to be with,""" start="01:01:25.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I see myself and I cannot wait to see""" start="01:01:29.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""myself again in the situation next year.""" start="01:01:30.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So thank you so much everyone.""" start="01:01:32.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you want to join us,""" start="01:01:34.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ask questions, we'll still be here for a""" start="01:01:36.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""while. Floey might drop out,""" start="01:01:37.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I might drop out, Sasha might drop out,""" start="01:01:39.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but we'll be here to answer as many questions""" start="01:01:41.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as you want for as long as we can.""" start="01:01:43.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Bye bye everyone and let's get started with""" start="01:01:46.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the after show now.""" start="01:01:46.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Bye Leo, bye Chloe! I'll drop out eventually""" start="01:01:51.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""when the kiddo yells at me.""" start="01:01:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I can't tell you how much fun this is,""" start="01:01:56.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah. The way to remember what I said,""" start="01:01:58.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo, it's 100% true. Oh man,""" start="01:02:00.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""turning off your lights,""" start="01:02:01.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm doing it. I'm doing it too.""" start="01:02:02.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sorry y'all. Oh, yeah,""" start="01:02:04.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bye-bye lights""" start="01:02:05.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, that's every year that's how we finish""" start="01:02:10.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we just turn off the the big lights that we""" start="01:02:12.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have in our faces all the day especially the""" start="01:02:14.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hosts""" start="01:02:14.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: and Tell me if there's too much back chatter""" start="01:02:19.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: get off my headphones,""" start="01:02:22.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""too, so I can""" start="01:02:24.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: when I hear you in the room.""" start="01:02:25.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Can I hear you now? Yeah.""" start="01:02:28.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Is it feeding back pretty bad?""" start="01:02:31.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Hello? there is some echo.""" start="01:02:34.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, there is some echo.""" start="01:02:37.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I think Okay. Fine. I can live with my""" start="01:02:41.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""headset a little longer.""" start="01:02:42.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I give 1 ear a break at a time.""" start="01:02:44.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Thanks for your sacrifice.""" start="01:02:47.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh, well, you know, it's a small,""" start="01:02:50.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""small, small price to pay to get to smooth""" start="01:02:53.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with y'all. Yeah, I was just looking at that""" start="01:02:56.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""chart and I was thinking about all of those""" start="01:02:58.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""meetings that we had like 18 months we were""" start="01:03:01.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just on this death march to organize this and""" start="01:03:05.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's just such an amazing accomplishment that""" start="01:03:09.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you you have here Sasha like I'm sorry to""" start="01:03:11.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""pick on you personally but the work that you""" start="01:03:14.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""put in keep being able to keep it the whole""" start="01:03:16.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""technical project in your mind,""" start="01:03:18.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all the way down to presenting it at this""" start="01:03:21.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year's conference and like kind of spoon""" start="01:03:24.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""feeding it to people that want to run off in""" start="01:03:26.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""their own damn direction and then handing""" start="01:03:27.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""them an org is the 1 that people keep bugging""" start="01:03:31.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""us about. So if you're looking for a project,""" start="01:03:33.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here it is. Just really well done.""" start="01:03:37.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I no longer feel like we wasted a lot of time""" start="01:03:43.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there. I mean, you remember I enjoyed so much""" start="01:03:46.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all of our check ins and all of that stuff.""" start="01:03:48.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But we had so many ideas,""" start="01:03:51.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you can imagine that I wondered,""" start="01:03:53.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, I wondered if we should have had""" start="01:03:56.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more focused meetings and all that.""" start="01:03:58.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I was glad when we stopped having like""" start="01:04:01.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""weekly meetings, because you know what I mean""" start="01:04:04.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""To keep this much power in the room once a""" start="01:04:06.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""week, it feels creepy.""" start="01:04:08.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""This much intellectual power.""" start="01:04:10.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Anyway, that's it. I think that's it for me.""" start="01:04:18.525" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, and I'll say, I mean,""" start="01:04:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can't obviously speak for Sash or anyone""" start="01:04:22.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""else. Yeah, the regular meetings were a""" start="01:04:24.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""little bit intense than we had the year""" start="01:04:26.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""before, but I'm kind of also super glad that""" start="01:04:29.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we did do them. And, you know,""" start="01:04:31.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in a way, it did help us sort of connect and""" start="01:04:34.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""get to know each other much more regularly or""" start="01:04:38.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""much more which is great and I see thumbs up""" start="01:04:41.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from Leo and Corwin so yeah happy we did""" start="01:04:44.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""them. Might want to have some kind of""" start="01:04:49.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually irregular ones every once in a while""" start="01:04:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if we have to decide on something.""" start="01:04:53.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But if like this year,""" start="01:04:55.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything can be worked out pretty much ad""" start="01:04:57.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hoc, whenever needs be,""" start="01:04:58.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like over asynchronous communications.""" start="01:05:00.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I see Sasha nodding very excitedly.""" start="01:05:03.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""This also works. So yeah.""" start="01:05:07.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I also see some questions coming in here""" start="01:05:10.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in BBB. If other folks want to join,""" start="01:05:14.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""please feel free to do that as well.""" start="01:05:16.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, I don't think we have an issue tracker""" start="01:05:18.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right now, but our whole website is a wiki.""" start="01:05:22.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if you wanna like create a new page or""" start="01:05:24.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there might be a page,""" start="01:05:26.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know. You can of course go in and""" start="01:05:28.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""edit it to your heart's content.""" start="01:05:29.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah. Hilarious, I couldn't,""" start="01:05:36.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like I almost managed to type that as fast as""" start="01:05:39.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you could say it, you know.""" start="01:05:40.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's fine. I get the same answer in the""" start="01:05:43.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""chat. Yep. Our website's a wiki and we""" start="01:05:46.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""definitely use ideas here.""" start="01:05:48.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you want to implement them or you know""" start="01:05:50.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""document them enough that even Corwin can""" start="01:05:53.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""code it then you know I'll do that.""" start="01:05:55.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Also I'll go through all the etherpads at""" start="01:05:58.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some point to harvest them and I think I have""" start="01:06:00.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah I have an Emacs list function that does""" start="01:06:02.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this for me. So that I can go through that""" start="01:06:05.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thing and include that in our organizers""" start="01:06:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""notebooks, lessons learned and ideas for next""" start="01:06:09.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year.""" start="01:06:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah.""" start="01:06:11.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, because something that you know,""" start="01:06:15.010" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We were talking about the different models""" start="01:06:16.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""between having many, many meetings and how it""" start="01:06:18.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""paid off eventually. The thing is,""" start="01:06:20.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this year we had no meetings.""" start="01:06:22.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We met Friday morning on Mumble and we were""" start="01:06:27.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""ready to go. We did chat things up a little""" start="01:06:29.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bit on ISE, obviously,""" start="01:06:30.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but no meeting this year.""" start="01:06:31.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'm tempted to say that,""" start="01:06:33.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yes, we could have off-hand meetings,""" start="01:06:34.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I think it's mostly because we want to""" start="01:06:36.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""see 1 another, not because we need""" start="01:06:38.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""necessarily for those meetings to prepare""" start="01:06:40.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs cons. But what I wanted to say as well""" start="01:06:45.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is that I think it's a testament to the bets""" start="01:06:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that Sasha took last year to automatize a lot""" start="01:06:52.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of things. I mean, we'd already been""" start="01:06:54.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""automatizing a lot of stuff,""" start="01:06:55.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like writing scripts for every single thing""" start="01:06:58.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in ESPire, but last year we made a big bet to""" start="01:07:02.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""say, what if we had OBS in the cloud?""" start="01:07:04.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What if we had a streaming platform that was""" start="01:07:06.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""running on a machine? And this is what""" start="01:07:08.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""allowed us to very smoothly have 2 tracks,""" start="01:07:11.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the general track and the dev track.""" start="01:07:13.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think the beauty of this system is""" start="01:07:16.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that, obviously, because we get more and more""" start="01:07:19.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""speakers submitting talks,""" start="01:07:20.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we are starting to think maybe we actually""" start="01:07:22.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""need a third track or something and no 1 is""" start="01:07:26.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stressed in the room when Sasha says this.""" start="01:07:28.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know, there's not the reaction that's""" start="01:07:31.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, oh no it's gonna be tough,""" start="01:07:32.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're gonna need more hosts,""" start="01:07:33.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organizers, it's just a calm...""" start="01:07:34.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Now, point of order, Now Flowy is stressed""" start="01:07:37.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""when Sasha says this.""" start="01:07:39.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: That was just a-""" start="01:07:44.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: I didn't know, Colin, we could put you in the""" start="01:07:46.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""spot next year. You'd be like,""" start="01:07:47.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, hey, Colin, what do you feel about""" start="01:07:49.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hosting?""" start="01:07:49.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: You know, I'm happy to do it.""" start="01:07:53.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I feel, I mean, just to jump in there and""" start="01:07:56.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""say, yes, exactly. No,""" start="01:07:59.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there's no concern on the part of the""" start="01:08:01.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organizer committee that we could expand""" start="01:08:03.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this. If you said we needed to expand to 4""" start="01:08:06.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tracks, I think we would gulp and consider""" start="01:08:08.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it, you know, from there,""" start="01:08:10.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it gets a little crazy,""" start="01:08:11.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but strictly because there aren't that many""" start="01:08:13.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people that we know want to commit.""" start="01:08:16.399" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What did we see there?""" start="01:08:18.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""80 hours of potential work that,""" start="01:08:20.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, that could go into organizing next""" start="01:08:23.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year's conference if you find that it's a""" start="01:08:25.439" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""rabbit hole for you and being a streamer""" start="01:08:26.979" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""means you want to read every email and""" start="01:08:28.979" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""respond to every, as Sasha has done this last""" start="01:08:31.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year, right? So when I look at her numbers""" start="01:08:34.439" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for total participation,""" start="01:08:35.359" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's really a high watermark.""" start="01:08:38.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha really took care of this convention,""" start="01:08:43.439" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, like a producer might.""" start="01:08:46.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the fact that what used to take 200 hours""" start="01:08:52.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""before, I mean, I can't harp enough on the""" start="01:08:56.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""story that that's telling you,""" start="01:08:57.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? And as I think about it with a project""" start="01:09:00.399" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""manager hat on, right?""" start="01:09:01.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm saying, okay, well,""" start="01:09:02.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's, you know, that work can potentially""" start="01:09:07.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""be amplified to many thousands of hours of""" start="01:09:09.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""work, considering the automation and the""" start="01:09:11.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""potential for bringing people in.""" start="01:09:13.279" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if you thought about it as a money-making""" start="01:09:14.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thing, If we were trying to make money by""" start="01:09:16.319" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""having these conventions,""" start="01:09:16.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you would think we have a very profitable""" start="01:09:19.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""business here because we can amplify the""" start="01:09:23.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talent that walks in the door really""" start="01:09:25.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""effectively, if that makes sense,""" start="01:09:28.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""through the tools and the training.""" start="01:09:29.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: So we should clarify that if anyone wants to""" start="01:09:33.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""volunteer as a host or just check in,""" start="01:09:35.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""let's just talk host. It's really just a""" start="01:09:38.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""matter of showing up, making sure your BVB""" start="01:09:40.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""works so you can talk.""" start="01:09:42.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you want to share your webcam,""" start="01:09:43.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you can. You can skip it if you don't want""" start="01:09:44.899" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to. You can share the screen with the pad.""" start="01:09:46.359" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then you just sit there and you chat with""" start="01:09:48.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a speaker and you read the questions off the""" start="01:09:51.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""pad in case they don't read the questions off""" start="01:09:53.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""themselves. So it can be a very low effort,""" start="01:09:56.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""low stress way to get into it and just there""" start="01:09:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""kind of helping the speaker have somebody to""" start="01:10:02.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talk to. It doesn't have to take 80 hours.""" start="01:10:05.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It can take 2 hours and that's cool.""" start="01:10:08.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: And the same, and that's just like the""" start="01:10:10.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""transcription task. Yeah,""" start="01:10:11.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sorry, I probably missed the lead there,""" start="01:10:13.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? Every individual part of this is""" start="01:10:16.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really easy. So it's an open-ended commitment""" start="01:10:19.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to come and kind of meet a part of the""" start="01:10:22.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""committee, a part of the community,""" start="01:10:24.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? To come in and say,""" start="01:10:27.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""maybe you're really excited about org,""" start="01:10:29.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you could review talks and just review the""" start="01:10:33.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""org ones. There's not an obligation that says""" start="01:10:35.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you're going to look at every talk that's""" start="01:10:37.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""submitted, right? Share your thoughts on the""" start="01:10:40.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talks that you have a chance to review the""" start="01:10:42.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""proposals. That's the submissions review""" start="01:10:44.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""part, right? So there's a way to help with""" start="01:10:48.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""almost any appetite for I'd like a little""" start="01:10:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""extra work in the Emacs department here like""" start="01:10:54.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if you want to feel like you're part of the""" start="01:10:56.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""team this this team is really easy to get""" start="01:10:59.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: think that's""" start="01:11:02.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: involved with. I I mean,""" start="01:11:03.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""please. Go ahead,""" start="01:11:04.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: No, no, please. I've talked enough.""" start="01:11:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: sort of the... Leo. Well,""" start="01:11:08.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't get tired of hearing you talk,""" start="01:11:10.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but yeah, I was going to say,""" start="01:11:13.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, I feel like that's the general message""" start="01:11:16.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here is that we're all just a bunch of people""" start="01:11:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""who are interested in this.""" start="01:11:21.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And of course, being humans,""" start="01:11:24.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""each of us have different kinds of lives and""" start="01:11:26.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""different kinds of availabilities and""" start="01:11:27.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""different kinds of interests.""" start="01:11:28.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And there is something for everybody,""" start="01:11:29.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""both in terms of the kinds of tasks that you""" start="01:11:34.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""need doing, but also in terms of the amount""" start="01:11:37.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of time that you want or are able to put in.""" start="01:11:39.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So yes, if you do think this is something""" start="01:11:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that you might be interested in helping with""" start="01:11:46.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for future additions and such,""" start="01:11:47.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or even some of the post-conference work that""" start="01:11:51.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""needs doing after this year.""" start="01:11:52.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Please reach out there's something for""" start="01:11:55.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everybody and I would love to have""" start="01:11:57.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: you. I can confirm there was an easy access""" start="01:12:03.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so I came here last year just doing some""" start="01:12:06.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""checking in and the process of getting,""" start="01:12:08.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's called a trained in was really,""" start="01:12:10.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really short. There was a lot of""" start="01:12:12.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""documentation how to do something.""" start="01:12:13.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, there's a pad that gets sent and what""" start="01:12:17.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to do, when to do, and what to ask is like""" start="01:12:20.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really incredible. So thank you for that.""" start="01:12:22.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Just come here, write an email,""" start="01:12:26.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""join us. It's really, really cool.""" start="01:12:28.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's a great experience to be honest.""" start="01:12:30.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Thank you. And while Sasha is speaking about""" start="01:12:35.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the update of the wiki,""" start="01:12:36.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh Coleman did you want to say something?""" start="01:12:38.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: No I was just I was just gonna embarrass""" start="01:12:41.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Floey Coder further but you go ahead.""" start="01:12:44.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I was just gonna say I think you're pretty""" start="01:12:51.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""quick, you're pretty quick,""" start="01:12:52.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you took to it really quickly or you show""" start="01:12:55.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just kind of a reflexive calm.""" start="01:12:57.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like you know how to not talk over people.""" start="01:12:59.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You're already better at it than I am.""" start="01:13:01.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Now, you know, I think,""" start="01:13:06.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah, I hope you're enjoying the new stuff""" start="01:13:09.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that you're starting to take on because you""" start="01:13:10.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""seem to be doing great with it.""" start="01:13:12.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And yeah, I hope you're not sitting there""" start="01:13:14.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thinking that you're taking,""" start="01:13:15.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, that you're coming on,""" start="01:13:17.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that you're not taking on enough""" start="01:13:19.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""responsibility or anything like that,""" start="01:13:21.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or I don't know, maybe.""" start="01:13:23.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I picked up like a little undercurrent of""" start="01:13:26.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, I don't do that much,""" start="01:13:28.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I hope you don't feel that way because I""" start="01:13:31.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just enjoyed really having your help the last""" start="01:13:33.719" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""couple of years. Thank you very much.""" start="01:13:38.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, that's how they get you,""" start="01:13:47.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, they just tell you,""" start="01:13:48.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, could you do check-ins?""" start="01:13:49.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like I showed up for 4 years ago saying,""" start="01:13:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, I'd like to help and look at me now.""" start="01:13:54.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think I did I host on the first year?""" start="01:13:56.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm pretty sure I did.""" start="01:13:57.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like it took 2 months basically of onboarding""" start="01:14:00.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to convince me to do some of the hosting and""" start="01:14:02.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""back then oh it was so tough for us to do the""" start="01:14:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hosting because we didn't have all the fancy""" start="01:14:08.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""setup we have this year and we were""" start="01:14:10.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""struggling with OBS with bid rates with""" start="01:14:13.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sharing scenes I'm glad we are where we are""" start="01:14:18.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""today, where I don't have to worry as much""" start="01:14:20.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about this. But it's also nice,""" start="01:14:21.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's also 1 thing, we do have a culture of""" start="01:14:24.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""documentation as Sasha exemplified,""" start="01:14:25.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and like Flo mentioned,""" start="01:14:28.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""documentation on the roles.""" start="01:14:29.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes, We did do this to help people join us.""" start="01:14:33.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But really, I'm the host of General,""" start="01:14:39.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it could be just anyone else because we""" start="01:14:41.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have so much documentation on how to do""" start="01:14:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things. Obviously, when a co-organizer is""" start="01:14:46.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""doing a role, we tend to have an eye on how""" start="01:14:48.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the infrastructure is going.""" start="01:14:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But really, if you want to join us,""" start="01:14:51.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we will make sure that the jobs that you""" start="01:14:54.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have, first, you like them and it's something""" start="01:14:57.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that interests you, and we will also make""" start="01:14:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sure that on our end, everything goes well""" start="01:15:04.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for you. Like we'll be monitoring the streams""" start="01:15:06.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and every time we have a new person join us,""" start="01:15:08.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it is as much energy and mental availability""" start="01:15:13.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to invest into, oh, maybe we could do this.""" start="01:15:17.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Oh, 0, we have a fire going out because the""" start="01:15:19.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""speaker hasn't checked in yet.""" start="01:15:21.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So it's all about sharing expertise,""" start="01:15:24.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's all about making people level up in""" start="01:15:27.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""terms of skills that are really useful.""" start="01:15:28.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I will attribute a lot of my success in""" start="01:15:34.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""public speaking to the work I do with""" start="01:15:35.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf, and I'm sure plenty of people""" start="01:15:38.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would gain from joining us and learning these""" start="01:15:43.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""skills. All right, It's about 30 minutes past""" start="01:15:47.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the official time. Do we want to go a little""" start="01:15:49.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""longer? Are we still available to go?""" start="01:15:51.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""All right, well, let's keep going.""" start="01:15:55.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't see any more people joining us on the""" start="01:16:00.443" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: We have Bob,""" start="01:16:00.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Blue Button. who was 1 of the speakers today""" start="01:16:01.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the room. Bob, do you want to maybe unmute""" start="01:16:03.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yourself and ask us some questions?""" start="01:16:05.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Or just thank us. I mean,""" start="01:16:08.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm just begging for something.""" start="01:16:09.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I know you've been very helpful.""" start="01:16:10.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: Yes. How are you? No, I've really had fun.""" start="01:16:15.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""No, I'm exhausted. I'm exhausted for you,""" start="01:16:18.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think. So I learned something.""" start="01:16:22.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Everybody wants to record their videos,""" start="01:16:25.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which of course, is great,""" start="01:16:26.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then you have the subtitles and""" start="01:16:28.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everything. But I saved a lot of time by""" start="01:16:31.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""doing it live this year and not going in and""" start="01:16:35.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tweaking and doing all the editing and""" start="01:16:38.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""spending all the time that we do.""" start="01:16:39.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it was kind of fun to do it that way too.""" start="01:16:42.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So just a little note there.""" start="01:16:44.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I look forward to seeing 1 of my talks""" start="01:16:48.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""subtitled someday. So no,""" start="01:16:53.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I love what you do. It's fun.""" start="01:16:55.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I've only seen part of Sasha's talk,""" start="01:16:57.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so I'll go and review that about how you're""" start="01:17:00.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""automating all this. You know,""" start="01:17:03.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's a little sad for me personally that of""" start="01:17:06.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""course, Org gets all the attention,""" start="01:17:09.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but you know, we're exposing hyperbole more""" start="01:17:14.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""now and There's definitely a growing interest""" start="01:17:16.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on Reddit and you know,""" start="01:17:18.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think it's kind of like EmacsConf.""" start="01:17:20.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Give it a few years. We went away for a long""" start="01:17:23.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time and then we came back.""" start="01:17:24.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We'll start to see it permeate the Emacs""" start="01:17:30.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""first. But I was thinking that,""" start="01:17:33.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, I think people who like Emacs and""" start="01:17:36.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""stuff, they read things online,""" start="01:17:38.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they come to this conference,""" start="01:17:40.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but we're always hearing about,""" start="01:17:43.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well, the next generation.""" start="01:17:44.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We have to deal with that.""" start="01:17:47.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think a lot of people get exposed to""" start="01:17:50.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs in college. Now a professor turns them""" start="01:17:52.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on to it and makes them use it,""" start="01:17:55.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then they go out into the real world,""" start="01:17:57.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and there's no encouragement anymore,""" start="01:17:59.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and they just drop it.""" start="01:18:01.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And with all of what you're putting together""" start="01:18:05.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here, it seems like if there was some reach""" start="01:18:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""out to universities and college students,""" start="01:18:14.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know, we might get a whole new big crowd""" start="01:18:18.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of people coming in. You know,""" start="01:18:22.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just as I think OREG has really attracted a""" start="01:18:25.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""lot of people in the sciences,""" start="01:18:26.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""since that's what it was originally developed""" start="01:18:30.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for. So just a thought,""" start="01:18:32.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, maybe if you get any volunteers who""" start="01:18:35.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""can help in the reach out or just,""" start="01:18:38.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, sending things around to""" start="01:18:40.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""universities that might really extend who""" start="01:18:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""gets exposed to this stuff.""" start="01:18:45.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think that's a great and very""" start="01:18:49.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interesting idea. And it sort of touches on a""" start="01:18:51.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""couple of different things.""" start="01:18:52.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sort of like you mentioned,""" start="01:18:53.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well, with org, it sort of really drew into""" start="01:18:56.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sciences, folks. It would be interesting to""" start="01:19:00.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""see other parts of Emacs doing that for other""" start="01:19:03.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""kinds of communities, but also specifically,""" start="01:19:05.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess, for colleges and universities.""" start="01:19:08.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, it would be cool if we had local groups""" start="01:19:14.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or local meetups, because so far right now,""" start="01:19:17.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think the most common ones are like by city""" start="01:19:20.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like for example a Toronto Emacs meetup or""" start="01:19:22.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""something like that yeah if you could maybe""" start="01:19:25.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""encourage or help foster a university level""" start="01:19:28.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""type of thing you know University of blah""" start="01:19:32.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""blah Emacs group or something like that and""" start="01:19:35.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know seeing what their needs would be or""" start="01:19:39.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""trying to think also what features of Emacs""" start="01:19:42.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""would be very useful in an academic slash""" start="01:19:46.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""educational setting. Yeah,""" start="01:19:48.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""lots of food for thought there.""" start="01:19:50.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So thank you for mentioning this.""" start="01:19:52.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: Sure. And I guess, yeah,""" start="01:20:02.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""OBS is coming up here.""" start="01:20:04.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I worked with that a bit,""" start="01:20:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yes, last year. You know,""" start="01:20:08.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""another powerful piece of software with a""" start="01:20:12.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sort of, I think, a weak user interface,""" start="01:20:15.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, for the newbies coming along on it.""" start="01:20:20.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And maybe, you know, if there's,""" start="01:20:23.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if that's kind of what people use,""" start="01:20:25.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""figuring out or putting some information in""" start="01:20:29.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the wiki about how to do that,""" start="01:20:32.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, work with it or...""" start="01:20:34.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Oh, good idea.""" start="01:20:36.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I can comment. It is definitely the""" start="01:20:43.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""preeminent streamer software out there,""" start="01:20:46.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well beyond the free software community.""" start="01:20:49.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's used by most streamers on Twitch and""" start="01:20:54.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other like commercial for-profit things but""" start="01:20:59.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of course those companies are making money""" start="01:21:01.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""off people trying to give money to the""" start="01:21:04.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""streamers. Those streamers aren't getting any""" start="01:21:07.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""software help. So actually most of them are""" start="01:21:10.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""dependent for their income on free software""" start="01:21:13.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like OBS and OBS in specific or by some kind""" start="01:21:18.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of forked brand name is the primary tool.""" start="01:21:23.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: If I'm not mistaken I believe Stefan has""" start="01:21:28.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""joined us right now in the room.""" start="01:21:29.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm putting you on the spot,""" start="01:21:33.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if you want to stay muted you can.""" start="01:21:34.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Oh, you have unmuted yourself.""" start="01:21:35.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: I managed to click the unmute button.""" start="01:21:38.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes, I'm here. How are you guys doing?""" start="01:21:41.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Doing good, surviving here.""" start="01:21:43.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Congratulations.""" start="01:21:44.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Late in your time.""" start="01:21:45.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Really amazing work organizing the""" start="01:21:50.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference. I really have to congratulate""" start="01:21:51.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everyone. So I just hopped on here to sort of""" start="01:21:56.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""say that I'm extremely impressed.""" start="01:21:58.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think this is an example to follow for""" start="01:22:04.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other conferences and for Emacs in general.""" start="01:22:07.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think we need more of this community-type""" start="01:22:09.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""organizing and just getting people interested""" start="01:22:12.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and involved on all kinds of levels can only""" start="01:22:15.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""help Emacs. Because we are in this for the""" start="01:22:20.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""long haul. That's it.""" start="01:22:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh, what a great point.""" start="01:22:25.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If I can comment, that's 1 of the things that""" start="01:22:28.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""drew me to trying to contribute to free""" start="01:22:30.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""software when I was a kid,""" start="01:22:32.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like we're talking now 30 plus years ago,""" start="01:22:35.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the idea like, and I recognized it from""" start="01:22:38.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Stallman's initial manifestos on the topic,""" start="01:22:42.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? He was clearly in this for the long""" start="01:22:45.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""haul. Like I am building the library of""" start="01:22:47.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Alexandria here and like linking the work""" start="01:22:50.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that we're trying to do to community that I""" start="01:22:52.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""don't know how you could touch my heart you""" start="01:22:54.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""know more surely because that's that's""" start="01:22:57.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""exactly what we want to do not necessarily""" start="01:22:59.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""any given talk or comment but the idea that""" start="01:23:03.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have to get together and share our ideas""" start="01:23:07.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and the place that we do that has to be just""" start="01:23:10.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""has to be a buffet and not a crucible.""" start="01:23:14.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: And look, we're standing on the shoulders of""" start="01:23:17.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""giants, really, when we're looking at Emacs""" start="01:23:19.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and sort of what we have achieved.""" start="01:23:21.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the galaxy of talent that exists in the""" start="01:23:24.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs community is also like truly""" start="01:23:27.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""impressive, I think. So There's a lot of work""" start="01:23:30.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to be done, but we've also achieved some""" start="01:23:34.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""pretty impressive things so far.""" start="01:23:37.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So let's just keep at it.""" start="01:23:38.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm sure we'll have a fantastic future for""" start="01:23:43.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs.""" start="01:23:44.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: You know, I'm kind of interested in what""" start="01:23:52.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Stefan's here. You know,""" start="01:23:56.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just the common tropes that go around.""" start="01:24:00.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I just hear it so much on the net,""" start="01:24:05.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, is Emacs still alive?""" start="01:24:07.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do people still use it?""" start="01:24:09.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know, and of course,""" start="01:24:11.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's like you have an older piece of software""" start="01:24:13.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that started so long ago,""" start="01:24:15.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people don't realize that it's still up,""" start="01:24:17.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it's also because of the trends,""" start="01:24:20.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? You know, we've got the electron-based""" start="01:24:22.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""development and Visual Studio is slick out of""" start="01:24:28.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the box. So what's in the core Emacs""" start="01:24:32.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""developers realm, obviously you guys are""" start="01:24:36.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""taking this longer term perspective,""" start="01:24:38.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which makes sense, but what do you think""" start="01:24:44.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about this issue, the shorter term and how to""" start="01:24:48.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""alleviate those concerns that some people""" start="01:24:52.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""represent?""" start="01:24:52.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Of course, yes. I mean,""" start="01:24:54.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this is something that,""" start="01:24:55.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, clearly people are discussing and as""" start="01:24:59.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you say, It's almost like a trope at this""" start="01:25:01.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""point. And it's been discussed on EmacsDevil,""" start="01:25:04.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what can we do to promote Emacs more and to""" start="01:25:07.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what extent should we care about that?""" start="01:25:10.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I mean, my reply to that is usually just,""" start="01:25:15.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the rumors of my death are very accurate.""" start="01:25:19.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think this is true also for Emacs.""" start="01:25:24.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we are very much here.""" start="01:25:29.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think what has happened also is reflective""" start="01:25:31.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of basically that there are just more""" start="01:25:34.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""programmers on the planet,""" start="01:25:36.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: And we""" start="01:25:38.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: right? haven't been able to sort of catch""" start="01:25:39.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that segment as it's been growing,""" start="01:25:41.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but also we have more Emacs users I think""" start="01:25:44.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""today than probably ever before.""" start="01:25:47.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We have more packages,""" start="01:25:48.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have more stuff going on.""" start="01:25:50.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I think it's a challenge as well,""" start="01:25:55.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like to what extent do we wanna be like a""" start="01:25:58.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""niche and to what extent do we wanna be the""" start="01:26:00.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""text editor for programmers.""" start="01:26:03.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think there's a tension there because""" start="01:26:06.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we want to stay true to what Emacs is and to""" start="01:26:09.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""its sort of core values of what makes Emacs""" start="01:26:12.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""great, but can we still make some changes to""" start="01:26:16.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sort of stay relevant.""" start="01:26:18.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think that's a huge win.""" start="01:26:21.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And clearly these discussions are going on on""" start="01:26:24.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the Emacs level and in the minds of core""" start="01:26:26.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""developers, I think, every day.""" start="01:26:29.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Even though, I mean, most of our work is just""" start="01:26:32.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""trying to keep adding new features,""" start="01:26:35.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""make sure that we have that sort of core""" start="01:26:38.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""infrastructure in place,""" start="01:26:40.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is part of the reason why I gave the""" start="01:26:42.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talk I did yesterday, to invite more people""" start="01:26:44.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to come on board. Because I see a lot of""" start="01:26:46.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people have opinions about Emacs,""" start="01:26:48.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is amazing, and we need more of that.""" start="01:26:50.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I think, let's say,""" start="01:26:54.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""patches speak louder than words.""" start="01:26:56.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Software. And it's definitely true in Emacs""" start="01:27:01.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""development.""" start="01:27:01.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I want to just piggyback on,""" start="01:27:04.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like attack the premise of the question a""" start="01:27:06.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""little bit, right? Remember that we are sort""" start="01:27:09.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of in a trench warfare with commercial""" start="01:27:11.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interests that are dependent on dominating""" start="01:27:15.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""software ecosystems in order to exploit users""" start="01:27:20.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for money. Like that is a necessary thing to""" start="01:27:24.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a lot of people's business model.""" start="01:27:26.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And so we live in a world where software is""" start="01:27:30.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more than tools. It is clothing.""" start="01:27:32.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And so when I put on my Mac and I put on my""" start="01:27:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""UI skin, I'm not just choosing whether I like""" start="01:27:42.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sliders or radio buttons or check boxes or""" start="01:27:46.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the other UI mechanics that give that""" start="01:27:49.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""heuristic and make it make me think it's easy""" start="01:27:53.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to use, easy to learn to use,""" start="01:27:55.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? I'm also choosing a whole line of""" start="01:27:59.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""implementation detail that I'm being actively""" start="01:28:02.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""trained not to try to understand by,""" start="01:28:06.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, kind of the dark side of the force""" start="01:28:08.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""over here. So when I think about,""" start="01:28:11.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, make Emacs more like Toaster,""" start="01:28:14.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: you know,""" start="01:28:18.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I, 1 of my responses is every time that""" start="01:28:21.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""question asks, you know,""" start="01:28:22.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""an angel grows, gets asked,""" start="01:28:24.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""an angel grows its wings.""" start="01:28:25.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""A developer submits a patch,""" start="01:28:27.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a bug gets opened that we can,""" start="01:28:30.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, with enough information to actually""" start="01:28:31.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do something about it,""" start="01:28:33.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the ecosystem gets better,""" start="01:28:34.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? Whether a new user comes or not,""" start="01:28:38.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like somebody's actually asking a question""" start="01:28:40.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's going to lead them someday to pick a""" start="01:28:42.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""better tool.""" start="01:28:43.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Yeah, it's true. I mean,""" start="01:28:47.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have powerful enemies and they are not""" start="01:28:50.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""working for us. And when they are working on""" start="01:28:52.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""improving VS code, you can't be under any""" start="01:28:54.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""illusion that they are doing that in the""" start="01:28:56.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interest of the users.""" start="01:28:57.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""They're doing that in their interest of the""" start="01:28:59.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""corporate owners. So this is the reality that""" start="01:29:02.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have to face and Emacs is just not like""" start="01:29:04.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that. And this is of course part of the""" start="01:29:07.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""reason why it's so important that we continue""" start="01:29:09.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this work for the future of being able to do""" start="01:29:14.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""computing in a free way and in a way that is""" start="01:29:17.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually, you know, supports the types of""" start="01:29:20.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""workflows that we know and love.""" start="01:29:21.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Something that I'd like to add to this is""" start="01:29:26.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that, you know, you've mentioned we need more""" start="01:29:29.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""programmers in the world.""" start="01:29:30.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And in light of what we're doing with""" start="01:29:33.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""EmacsConf, perhaps we need more people to be""" start="01:29:35.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at EmacsConf talking, not necessarily""" start="01:29:36.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""programmers, but just people apprehending""" start="01:29:38.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs and talking about it.""" start="01:29:40.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It feels like we've got different missions""" start="01:29:42.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that we're trying to accomplish with this.""" start="01:29:44.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We are... Okay, you...""" start="01:29:45.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Go ahead, Colin.""" start="01:29:47.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I can't leave that alone.""" start="01:29:49.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I almost came in there on the previous point.""" start="01:29:52.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yeah, I actually Completely agree with that""" start="01:29:55.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Leo. That's something that and I mean to be""" start="01:29:58.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""fair. I owe a good I owe dev al a good email""" start="01:30:02.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on this topic, but we desperately need more""" start="01:30:05.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""project managers, more solutions architect,""" start="01:30:07.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more business process analysts,""" start="01:30:10.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more systems analysts,""" start="01:30:12.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more, you know, and the best tech,""" start="01:30:15.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, some of the best threads start with""" start="01:30:17.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""quite a bit of an analytical work done on the""" start="01:30:23.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""part of an engineer who's come along.""" start="01:30:24.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But actually, Larry Wall has this quote,""" start="01:30:29.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? Where he says, consider 3 solutions""" start="01:30:31.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and build 1. And I think we struggle with""" start="01:30:34.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that as a community because getting a patch""" start="01:30:36.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is a lot of work and a lot to ask for""" start="01:30:39.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""somebody. So asking 3 people to submit a""" start="01:30:42.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""patch means you're saying no to a lot of""" start="01:30:45.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""blood, sweat and tears on the part of like 2""" start="01:30:47.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people, maybe 2 teams of people.""" start="01:30:48.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: And 1 thing I think is a big expansion is""" start="01:30:55.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""usability and user experience design.""" start="01:31:02.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think, and not in the sense like,""" start="01:31:05.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, CUA mode or,""" start="01:31:08.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, people don't realize that Emacs key""" start="01:31:12.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bindings are actually ergonomic,""" start="01:31:13.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but more, you know, like for myself,""" start="01:31:16.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I did a lot of work in sort of bringing out""" start="01:31:20.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs features and did a lot of things""" start="01:31:24.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""creating this info doc,""" start="01:31:26.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, which is sort of like Space Max or""" start="01:31:28.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""something in the old days.""" start="01:31:30.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But the process, yeah,""" start="01:31:33.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""kept a lot of that from ever making it into""" start="01:31:38.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""CoreDMX and, you know,""" start="01:31:40.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just a lack of time on my part to follow up.""" start="01:31:44.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But if you had somebody,""" start="01:31:46.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, who sort of coalesced all the""" start="01:31:51.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""technical work on like,""" start="01:31:52.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""here's how we can put it together and make it""" start="01:31:56.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""more accessible, I've seen that go a long way""" start="01:32:01.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in certain environments.""" start="01:32:02.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I imagine, you know,""" start="01:32:06.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's just not the experience of,""" start="01:32:08.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, most people on the core team.""" start="01:32:11.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Yeah, for sure. I mean,""" start="01:32:14.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We don't have, I mean,""" start="01:32:16.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're mostly a bunch, we're a bunch of""" start="01:32:18.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""programmers. That's what we are,""" start="01:32:20.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? We don't have graphical signers or any""" start="01:32:22.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of the stuff that you're talking about.""" start="01:32:24.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we don't have really any UX experts on""" start="01:32:28.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""board. So perhaps that would be welcome.""" start="01:32:30.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But then again, how do you even fit the EMAX""" start="01:32:35.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""paradigm into what is typically taught and""" start="01:32:38.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""discussed in UX? I mean,""" start="01:32:40.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""maybe there is a way. I'm sure there are""" start="01:32:43.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""general principles and a lot that we could""" start="01:32:45.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""learn, But then there is also like this,""" start="01:32:47.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have to stay true to what Emacs is to some""" start="01:32:52.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""extent and what does that look like""" start="01:32:53.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""concretely. There are discussions to be had""" start="01:32:56.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for sure, but we would definitely benefit""" start="01:32:58.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from that type of specific input.""" start="01:33:02.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Well, I""" start="01:33:04.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: mean, like a simple example today is I looked""" start="01:33:06.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at the conference guidelines I always stay in""" start="01:33:09.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""dark mode and it said well use light mode for""" start="01:33:13.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""your presentation so okay I'll switch to""" start="01:33:16.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""light mode let me load a theme so I go into""" start="01:33:19.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""all the default themes and,""" start="01:33:21.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, start going through the light ones""" start="01:33:23.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then I check all the faces and,""" start="01:33:28.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, there are at least 3 to 5 faces""" start="01:33:31.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that have nearly invisible text as a result""" start="01:33:35.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of the background highlighting on them.""" start="01:33:38.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I'm like, you know,""" start="01:33:40.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so there's low hanging fruit like that where""" start="01:33:43.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people would deal with the structure of the""" start="01:33:46.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""menus, the actual faces,""" start="01:33:49.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the themes, that don't have to do anything""" start="01:33:53.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""affecting core Emacs except make the""" start="01:33:57.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""presentation much better.""" start="01:33:59.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Yeah, definitely. If people want to send such""" start="01:34:03.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""polishing patches for various aspects,""" start="01:34:06.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I spent some time making a new help screen.""" start="01:34:09.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know if you noticed,""" start="01:34:10.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know how many people press Control H,""" start="01:34:12.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Control H on their keyboards,""" start="01:34:14.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But it's like with new sections and it's""" start="01:34:17.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sorted a little bit better.""" start="01:34:18.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It didn't take much. I mean,""" start="01:34:20.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it took a time obviously,""" start="01:34:21.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but it's not like it required some fantastic""" start="01:34:23.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""technical knowledge or deep expertise in""" start="01:34:28.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs Lisp to do that.""" start="01:34:29.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's Basically anyone can do stuff like that.""" start="01:34:31.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So definitely if you're interested in doing""" start="01:34:34.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that type of work, start discussing with us.""" start="01:34:37.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Let's talk about what we can do and get doing""" start="01:34:41.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it, really.""" start="01:34:41.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, this is exactly in line with your""" start="01:34:44.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""presentation from yesterday,""" start="01:34:45.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Stefan, as well, because you were just""" start="01:34:47.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""inviting people who are not contributing to""" start="01:34:50.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the core of Emacs to do so.""" start="01:34:51.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You were talking to package developer on""" start="01:34:53.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""MailPub, but you were also talking just about""" start="01:34:55.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the average Joe or Jane just doing their own""" start="01:34:58.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things or encountering a problem.""" start="01:34:59.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Now, yes, we talked about,""" start="01:35:01.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, you need to build master and all this,""" start="01:35:02.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but at the end of the day,""" start="01:35:03.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""low-hanging fruits like the ones Bob just""" start="01:35:06.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""described. If everyone does this at the end,""" start="01:35:09.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you end up with something that is extremely""" start="01:35:11.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""polished. Perhaps you do not need to have a""" start="01:35:13.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""UX specialist to tell you that,""" start="01:35:14.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""oh, those 2 colors are actually very close to""" start="01:35:18.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""1 another. I think it's kind of a discussion""" start="01:35:21.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about same defaults as well that you had""" start="01:35:23.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yesterday. Ultimately,""" start="01:35:25.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we do not need... Yes,""" start="01:35:27.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we need more programmers in the world.""" start="01:35:28.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We want more people to use Emacs.""" start="01:35:30.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But you don't know. Like,""" start="01:35:33.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is it going to be someone in computer science""" start="01:35:36.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's going to be the next giant on whose""" start="01:35:38.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""shoulders we're going to stand?""" start="01:35:39.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: computer science? Is it going to be someone""" start="01:35:41.003" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in computer science that's going to be the""" start="01:35:41.066" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""next giant""" start="01:35:41.082" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: on whose shoulders we're going to stand?""" start="01:35:41.137" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Is it someone who did not""" start="01:35:41.184" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Is it someone who did not study study""" start="01:35:41.192" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""computer science? Is it going to be someone""" start="01:35:42.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""who did something completely different?""" start="01:35:44.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We do not know the prototypical user of""" start="01:35:46.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs. We have some idea about the fact that""" start="01:35:49.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""they might be using you know,""" start="01:35:51.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs for their programming,""" start="01:35:52.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but more and more, and as is evidenced by the""" start="01:35:55.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""talks we received with EmacsConf,""" start="01:35:56.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's just people doing writing or taking""" start="01:36:01.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""notes for their classes.""" start="01:36:01.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So it's really interesting to see how and to""" start="01:36:06.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""explore for us how we can give back to the""" start="01:36:09.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""core of Emacs in a way that is mutually""" start="01:36:11.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""constructive because again,""" start="01:36:12.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to go back to the philosophy or the political""" start="01:36:14.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""agenda that we have is for more people to use""" start="01:36:17.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""software that is not the liberties.""" start="01:36:19.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Exactly.""" start="01:36:20.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: So right. Yeah. I mean,""" start="01:36:24.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that's a good spot for me to come right back""" start="01:36:25.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in. And that's exactly where I do.""" start="01:36:27.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Right. Because that's that's what it's all""" start="01:36:30.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about. In the In terms of a tool user,""" start="01:36:33.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, the evolution of using tools as,""" start="01:36:36.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, these creatures have fought,""" start="01:36:38.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs is fire. Emacs is the ability to learn""" start="01:36:42.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""languages, the ability to manipulate other""" start="01:36:45.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tools. I mean, it's almost like,""" start="01:36:48.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, God Emperor of Dune level,""" start="01:36:50.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, some Frank Herbert type of powers""" start="01:36:53.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that you have over your computer and you are""" start="01:36:56.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""not required to understand how all those""" start="01:36:58.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things work. So from a support standpoint""" start="01:37:02.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that puts us in a challenging position,""" start="01:37:04.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? I spend a lot of time on Pound Emacs""" start="01:37:06.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and the questions that go by there,""" start="01:37:07.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I feel bad for people that feel like they""" start="01:37:09.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have to answer every question that goes by in""" start="01:37:12.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the channel because no 1 could.""" start="01:37:14.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""No 1 can give an intelligent answer to the,""" start="01:37:16.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, everything from,""" start="01:37:18.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Hey, how do I change my default font on this""" start="01:37:21.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""operating system? You've never heard of to,""" start="01:37:23.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, how do you know this list code?""" start="01:37:26.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's 40 lines long doesn't work.""" start="01:37:28.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I think it was a recent change that was""" start="01:37:30.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""made to the P case macro.""" start="01:37:31.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Do you agree? Right? And as deep as that,""" start="01:37:39.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""well is, if you turn it 90 degrees,""" start="01:37:42.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the Emacs is that kind of tool to the""" start="01:37:45.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""operating system level.""" start="01:37:46.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's letting me walk across to other systems,""" start="01:37:48.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""multi-hop, become the super user,""" start="01:37:51.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? And, you know, the just the power,""" start="01:37:55.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the amplification of power there,""" start="01:37:57.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's like the lever combined with the magnet,""" start="01:38:02.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""etc, etc. I mean, just,""" start="01:38:08.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah, I don't know. So I guess where we kind""" start="01:38:14.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of jump off, where that gets stuck,""" start="01:38:16.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right, is trying to change something like the""" start="01:38:18.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""defaults in the user experience.""" start="01:38:19.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I imagine, you know,""" start="01:38:22.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we don't get 1 great idea about user""" start="01:38:26.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""experience, we'll get 3,""" start="01:38:28.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? And then Once again,""" start="01:38:30.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we have to send our brave developers off to""" start="01:38:32.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""build 1 to 3 patches, some of which won't see""" start="01:38:36.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the light of day. I think that's where the""" start="01:38:41.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""breakthrough is needed.""" start="01:38:41.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Another evolution in the packaging thought,""" start="01:38:46.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or maybe it's not packaging.""" start="01:38:48.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Maybe it's the compilation step.""" start="01:38:50.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Maybe it's the distribution step.""" start="01:38:52.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Maybe we want the Debians of the world to""" start="01:38:56.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""deliver Emacs as 2 different pieces now.""" start="01:38:59.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And there's a UX piece that we want you to""" start="01:39:03.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""package each 1 that you package,""" start="01:39:05.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""each 1 per window manager that you support or""" start="01:39:09.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at the intersection of each window manager""" start="01:39:11.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and display manager you port.""" start="01:39:12.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And the other one's just the server and you""" start="01:39:15.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""don't even have to package that if I'm only""" start="01:39:17.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""offering the CLI or there's a you know like""" start="01:39:19.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm making all this up and I can't code a""" start="01:39:21.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""single thing like what I just said,""" start="01:39:23.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I think that there's a technical""" start="01:39:26.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""opportunity. Pretty high level for technical""" start="01:39:31.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there of just thinking about a way to accept""" start="01:39:35.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""contributions of experience with maybe a""" start="01:39:40.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""little less rigor and a little less ground""" start="01:39:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""into the marble.""" start="01:39:44.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: Yeah it makes me think of somebody at work""" start="01:39:50.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just brought up pair programming and he's in""" start="01:39:54.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""love with it. He wants to pair up and do it,""" start="01:39:58.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which is not true of all programmers.""" start="01:40:01.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But I said, okay, so you spearhead that.""" start="01:40:05.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If we, I think it is a very high barrier to""" start="01:40:10.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""get your patches in because of course they""" start="01:40:13.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""need to meet the quality standard of Emacs.""" start="01:40:15.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So if people who are doing day-to-day""" start="01:40:20.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""understand that process and can do it well,""" start="01:40:24.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""could work with some of the people who can't""" start="01:40:28.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""quite contribute at that level,""" start="01:40:30.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but have ideas that are on the level that""" start="01:40:35.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""should go in, pairing them up could really""" start="01:40:39.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""move a lot of that forward.""" start="01:40:41.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like Lars, I don't know what his,""" start="01:40:46.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I get the feeling maybe he's retired.""" start="01:40:50.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So, you know, maybe he has some time,""" start="01:40:54.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, and he's really good at going back""" start="01:40:58.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in and saying, you know,""" start="01:41:00.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these areas haven't gotten attention in a""" start="01:41:02.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""while, so I'm going to go kill some bugs and""" start="01:41:05.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""look at them and fix them up.""" start="01:41:08.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I would think he would be good to do that""" start="01:41:13.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with someone. But you know,""" start="01:41:15.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Again, I've got years of code that would just""" start="01:41:22.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""require somebody to work through it to update""" start="01:41:25.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to the latest code base and diff against it.""" start="01:41:28.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But it does things like,""" start="01:41:30.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, like if anybody used RMAIL anymore,""" start="01:41:32.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I made the summary mode of RMAIL exactly""" start="01:41:36.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""compatible key-wise with the main buffer,""" start="01:41:40.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""which it never was, and fixed a number of""" start="01:41:43.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other features. Dured made operations""" start="01:41:46.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""reversible, where you mark something and you""" start="01:41:49.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""unmark it, and you can go up and down.""" start="01:41:51.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And there are all these little""" start="01:41:53.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""incompatibilities that kind of add up across""" start="01:41:56.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time, and they never seem to get addressed.""" start="01:42:00.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We could just fix them and people would start""" start="01:42:06.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to say, oh, this is smoother and they are""" start="01:42:09.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""getting more of that experience because it""" start="01:42:12.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""feels like the systems maybe 80,""" start="01:42:15.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""85% of the way there in a lot of thoughtful""" start="01:42:20.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""design. But that last 15% could be the""" start="01:42:26.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""difference between an iPhone and an Android""" start="01:42:29.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""phone of usability-wise.""" start="01:42:32.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So that's a thought. That's a""" start="01:42:38.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: brilliant idea, and it probably can be""" start="01:42:41.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""applied far wider than emacs.""" start="01:42:42.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's something that that FSF should""" start="01:42:46.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""consider suggesting across,""" start="01:42:48.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, GNU packages,""" start="01:42:49.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for example, like a matchmaking project seems""" start="01:42:54.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like something that FSF community teams""" start="01:42:56.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""should think about. Yeah,""" start="01:43:04.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I was going""" start="01:43:04.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: That's so... to say also,""" start="01:43:04.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I noticed that the name Debian came up a""" start="01:43:08.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""while ago and now we were talking about""" start="01:43:09.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""programming and such and Mentoring maybe and""" start="01:43:14.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Debian has this service or part of their site""" start="01:43:17.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or community called Mentors.""" start="01:43:19.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""They have a website, mentors.debian.net,""" start="01:43:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where the idea is that people who want to get""" start="01:43:26.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""into contributing to Debian,""" start="01:43:28.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for example, to package things,""" start="01:43:29.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but obviously don't have upload rights right""" start="01:43:33.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""away. This is where they can go to,""" start="01:43:35.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and this is separate from their mailing list""" start="01:43:38.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or bug trackers. They can basically build""" start="01:43:42.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""their changed packages and upload them here,""" start="01:43:44.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and then Debian developers who have commit or""" start="01:43:48.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""upload rights to the Debian archive can go""" start="01:43:51.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and review and give them feedback or ask them""" start="01:43:55.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to change something or if it's good,""" start="01:43:57.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""then just easily upload the package right""" start="01:44:01.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""from there. And I wonder if it might make""" start="01:44:04.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sense to have something kind of like that in""" start="01:44:07.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like the context of Emacs or the GNU project""" start="01:44:10.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as a whole, where we have like some kind of""" start="01:44:13.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""a, like loosely defined mentoring thing,""" start="01:44:15.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""where we could pair up people who are more""" start="01:44:18.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""experienced, who, for example,""" start="01:44:20.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""have commit rights in the Emacs core""" start="01:44:22.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""repository to match them up with someone who""" start="01:44:27.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is just making your very first patches or""" start="01:44:29.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""contributions to Emacs or whatever other GNU""" start="01:44:31.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""package. Just some food for thought,""" start="01:44:34.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: Yeah, sounds good.""" start="01:44:38.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: I guess. Yeah, and then I guess 1 feature of""" start="01:44:44.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""such a system which would be nice is that it,""" start="01:44:47.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""at least in terms of, you know,""" start="01:44:49.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the mentors that Debbie and that,""" start="01:44:50.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that it has a web UI, which,""" start="01:44:52.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""is nice because mailing lists might be""" start="01:44:56.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""intimidating for someone who is just getting""" start="01:44:58.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""started, like in these communities.""" start="01:44:59.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Or, you know, just making patches like that,""" start="01:45:03.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or just have a series of concrete""" start="01:45:05.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""instructions. Like with mentors at""" start="01:45:08.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Devian.net, I feel like you can't go wrong in""" start="01:45:11.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""terms of finding the steps of figuring out""" start="01:45:13.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""what you need to do to put together some""" start="01:45:16.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""change. Which I think the same idea could""" start="01:45:19.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""apply to Emacs, for example,""" start="01:45:20.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""as well.""" start="01:45:20.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: I think this is a good point about lowering""" start="01:45:24.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""barriers, and how email is a barrier to""" start="01:45:27.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people. I mean, so on the 1 hand,""" start="01:45:28.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you have us guys on Emacs level,""" start="01:45:31.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're very used to the email workflow.""" start="01:45:32.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like we're not just using it for fun.""" start="01:45:35.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You know what I mean? Like this is a""" start="01:45:37.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""workhorse. It really is.""" start="01:45:38.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's tried, it's battled,""" start="01:45:41.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""tested. It has some quirks,""" start="01:45:42.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but we know them extremely well on the other""" start="01:45:45.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hand. So, but still we want more people""" start="01:45:48.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""involved, right? And we realized that,""" start="01:45:50.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, times are changing as well.""" start="01:45:52.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And people are more used to doing stuff from""" start="01:45:54.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the web browser, perhaps.""" start="01:45:55.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we do want to move to a forge,""" start="01:46:00.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""or at least start looking into that.""" start="01:46:01.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But there are some obstacles.""" start="01:46:03.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we are looking for volunteers to do that""" start="01:46:06.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""work. I'm not just saying it,""" start="01:46:07.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like we are very serious.""" start="01:46:08.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm very seriously asking people in the""" start="01:46:11.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""community to consider,""" start="01:46:12.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hey, could you dedicate some time?""" start="01:46:14.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, it will take some dedication for sure""" start="01:46:18.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it will take some time and it will take some""" start="01:46:20.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""describe probably even you know Be prepared""" start="01:46:23.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to be frustrated at times right,""" start="01:46:24.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but if you're serious about doing that type""" start="01:46:26.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of work, okay now""" start="01:46:28.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I believe you Well, I'm just I'm just teasing""" start="01:46:32.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but but but yes exactly any I mean it's it's""" start="01:46:35.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""not even a joke right Any serious undertaking""" start="01:46:38.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""having to do with any free software project,""" start="01:46:41.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just because we are open to the entire world""" start="01:46:45.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and we pride ourselves on trying to take""" start="01:46:47.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""seriously all input. And if it's a logical""" start="01:46:50.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""argument, then we'll go ahead and take the""" start="01:46:51.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""time to combat with you,""" start="01:46:53.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even though the maintainer has 300 other""" start="01:46:54.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things to do. Like, man,""" start="01:46:57.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this""" start="01:46:58.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: is just the way it is,""" start="01:47:00.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right? It just, It's not like Emacs is way""" start="01:47:02.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""harder to change than any other project of""" start="01:47:06.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""its longevity and size.""" start="01:47:08.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's just these things take time.""" start="01:47:10.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Try getting a change into Debian.""" start="01:47:13.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's an uphill battle.""" start="01:47:15.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't even know where to start with that.""" start="01:47:16.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""That's huge, right? And I have tremendous""" start="01:47:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""respect for the people doing that type of""" start="01:47:21.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""work because it takes dedication,""" start="01:47:22.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it takes effort. So we really need someone to""" start="01:47:26.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""step up from the community,""" start="01:47:27.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I think, to be a champion for something like""" start="01:47:29.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this and work together with us on Emacs Devil""" start="01:47:33.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and off Emacs Devil, probably with me and Eli""" start="01:47:37.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and perhaps some other people that could be""" start="01:47:40.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in the mail thread, and we could coordinate""" start="01:47:41.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this type of work. I would be super excited""" start="01:47:44.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""if someone wanted to get the ball rolling.""" start="01:47:46.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can't do everything.""" start="01:47:48.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I wish I could. Like, I thought about it.""" start="01:47:51.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Should I just put everything to the side and""" start="01:47:52.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do this? But then, I mean,""" start="01:47:53.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there are some, there are other""" start="01:47:54.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""responsibilities as well.""" start="01:47:56.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So we need someone to step up.""" start="01:47:57.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We need help here.""" start="01:47:58.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: you're gonna speak. I was totally gonna pick""" start="01:48:03.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""on you. Go ahead.""" start="01:48:04.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so. Oh, good, Thanks,""" start="01:48:05.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah, I was just gonna say,""" start="01:48:06.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yeah, I echo Stefan's sentiments.""" start="01:48:08.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And that, yeah, in terms of like maybe""" start="01:48:11.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""experimenting with a different Forge or a""" start="01:48:14.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""better Forge and like,""" start="01:48:15.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, supplementing Savannah.""" start="01:48:16.124" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And supplementing Savannah.""" start="01:48:16.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I actually did some initial work a couple of""" start="01:48:20.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""months ago to get a SourceFed instance""" start="01:48:23.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""installed for the new project.""" start="01:48:24.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I've done some work on and off,""" start="01:48:28.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but then life happens,""" start="01:48:29.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""especially from September onwards.""" start="01:48:32.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But even from earlier in the year,""" start="01:48:35.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the project has been semi-dormant,""" start="01:48:36.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I have been meaning to get to that.""" start="01:48:38.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'm like 1 such person who's interested in""" start="01:48:42.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that type of work and driving it forward and""" start="01:48:44.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I would love you know if anyone's and anyone""" start="01:48:47.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""else has the kind of time and energy and the""" start="01:48:50.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interest to help with something like that.""" start="01:48:52.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Yes, please reach out to all of us,""" start="01:48:55.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""to Emacs core developers,""" start="01:48:56.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of course, and to myself.""" start="01:48:58.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""This is something that could be very useful,""" start="01:49:01.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""not just for GNU Emacs and Emacs developers,""" start="01:49:04.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but also for any other GNU package as well.""" start="01:49:09.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So yeah, that's 1 area of potential""" start="01:49:13.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""contribution and 1 thing that we sort of,""" start="01:49:15.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess, regularly meet with the FSF""" start="01:49:17.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""sysadmins to discuss these kinds of projects""" start="01:49:20.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and things as Corwin would know.""" start="01:49:22.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, that's kind of, I mean,""" start="01:49:24.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you knew exactly where I was going to,""" start="01:49:26.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and I'm glad that you volunteered yourself""" start="01:49:27.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""personally because that's the best choice.""" start="01:49:30.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""If you're hearing this and you're thinking,""" start="01:49:32.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, maybe I should do some sysop stuff,""" start="01:49:35.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""literally reach out to Amin.""" start="01:49:38.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And because it's complicated,""" start="01:49:41.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there are a lot of projects to volunteer for.""" start="01:49:43.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""They're all very worthy.""" start="01:49:44.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And it's sort of political to figure out what""" start="01:49:48.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we're gonna try to change for whom first to""" start="01:49:52.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""demonstrate we can do all the things we wanna""" start="01:49:55.940" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""do to make it better without losing all the""" start="01:49:58.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things that are important about how it is""" start="01:50:00.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""today. And we'll do it in a measured way like""" start="01:50:04.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everybody's just like room full of rocking""" start="01:50:06.500" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""chairs everybody's got a long tail it's a""" start="01:50:09.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hard project but you will do something that""" start="01:50:12.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just a lot like as a Savannah hacker which I""" start="01:50:15.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""am with Amin So that's how I know about his""" start="01:50:17.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""work on that project. We worked together on""" start="01:50:20.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the Savannah Forge. I'm aware of his work""" start="01:50:22.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""piloting SourceHut recently and just with a""" start="01:50:26.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""working group there to look at the next""" start="01:50:29.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""generation of forges for GNU.""" start="01:50:30.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs of course as a GNU package could go do""" start="01:50:34.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""its own thing. FFS would most likely give""" start="01:50:36.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""cash to go do its own thing,""" start="01:50:38.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even if it didn't like it.""" start="01:50:39.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We know, you know, as a,""" start="01:50:41.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like if I put on, I'm not FSF,""" start="01:50:42.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but if I put on that hat,""" start="01:50:44.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I imagine that we must know.""" start="01:50:45.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs is a flagship thing that people in the""" start="01:50:50.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""real world depend on. If I get this ancient""" start="01:50:52.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""computer, I get a working Linux distribution""" start="01:50:55.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and Emacs. Maybe it's not Microsoft Word as a""" start="01:50:59.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""word processor, but you guys,""" start="01:51:00.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you can learn a language on it for sure,""" start="01:51:03.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know And you can do your homework on it""" start="01:51:05.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and you know It's it makes your you can edit""" start="01:51:08.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""things and then you can edit your system""" start="01:51:10.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""files and teach yourself how to manage a GNU""" start="01:51:13.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""system and you can You know so Emacs is""" start="01:51:17.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""really powerful as a practical tool.""" start="01:51:19.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Like I keep coming back to that point when I""" start="01:51:21.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""think about Emacs, like I really put it as""" start="01:51:25.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, it's an important tool on the like""" start="01:51:27.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""humans inventing tools level just because it""" start="01:51:31.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""lets me make this editor into whatever I need""" start="01:51:35.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it to be to get my actual work done.""" start="01:51:37.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Whether that's getting the length,""" start="01:51:39.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""maybe that's making the font big enough that""" start="01:51:41.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can see it, or making it easy enough to""" start="01:51:43.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""change from this font to that font,""" start="01:51:44.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""changing the background colors,""" start="01:51:45.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like your basic vision,""" start="01:51:47.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""accessibility issues, right?""" start="01:51:49.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""All, you know, solved,""" start="01:51:52.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can bake that customization in and I can""" start="01:51:55.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""pretty much depend on,""" start="01:51:56.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""no matter what we change in Emacs,""" start="01:51:57.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm gonna accept the new version,""" start="01:51:59.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""it's gonna be on the next computer I get,""" start="01:52:01.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm going to install the package and my""" start="01:52:03.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""configuration that sets all that up will be""" start="01:52:05.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""there for me. Right? It's like back to""" start="01:52:10.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Stefan's point, what, 6 and a half hours ago,""" start="01:52:13.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, you know, 20 minutes ago about""" start="01:52:16.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""just... Oh gosh, I lost it.""" start="01:52:23.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Boy, I really thought I had handed that""" start="01:52:27.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""neatly back to you.""" start="01:52:29.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: No problem, Yeah, I think we're in general in""" start="01:52:36.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""agreement.""" start="01:52:36.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: If we are now in the realm of Concord,""" start="01:52:41.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""of harmony, and the realm of midnight in""" start="01:52:44.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Europe, Should we bring this discussion to a""" start="01:52:47.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""close or we could go all night,""" start="01:52:49.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""but I'll need to explain to my employer why""" start="01:52:51.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""my eyes are barely open tomorrow.""" start="01:52:52.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think that's probably a good idea.""" start="01:52:56.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I see some folks starting to slowly sign off.""" start="01:52:59.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, also, you know, Leo,""" start="01:53:02.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you could leave and just miss out.""" start="01:53:04.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What?""" start="01:53:05.460" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Hey, Sasha, can I say something like what an""" start="01:53:13.620" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""amazing job with everything you're doing in""" start="01:53:15.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the community over the years?""" start="01:53:16.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm so impressed with Emacs News.""" start="01:53:18.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What a great resource to stay up to date in""" start="01:53:22.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Emacs. Just really hats off to you for a""" start="01:53:24.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""whole lot.""" start="01:53:25.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Thank you""" start="01:53:26.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: very much. It actually turned out to be quite""" start="01:53:29.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""timely that John Wheatley had suggested it""" start="01:53:31.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""back when he was maintainer because when I""" start="01:53:35.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""had the kiddo, I suddenly had 0 time to""" start="01:53:36.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""actually write new things.""" start="01:53:38.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But reading things is fine.""" start="01:53:39.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I can just speed read all the Reddit things""" start="01:53:41.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and put the links together.""" start="01:53:43.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So I'm very glad that Emacs news is helpful.""" start="01:53:45.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: it really is, yeah.""" start="01:53:49.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: It is, So, okay, now let's try to go for our""" start="01:53:55.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""closing thoughts here while Leo's still here.""" start="01:54:00.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And then if we wanna keep rolling,""" start="01:54:01.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""even after Leo drops, we won't tell him,""" start="01:54:04.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we'll tell him we're stuck.""" start="01:54:06.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: I guess that was a beacon to me to perhaps go""" start="01:54:12.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""for the second close of the day I've already""" start="01:54:14.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""done it I can do it again But I will prove""" start="01:54:18.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Sasha wrong this time.""" start="01:54:19.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I will miss out if need be because really,""" start="01:54:21.020" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I have been very impressed with the sleep""" start="01:54:24.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""record that you had and I am very envious""" start="01:54:28.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""right now of your past ability to sleep more""" start="01:54:32.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""than 9 hours per night.""" start="01:54:33.160" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""And I wish I would be able to go back to""" start="01:54:35.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""this. But anyway, folks,""" start="01:54:37.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm going to drop out.""" start="01:54:38.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""People might hang out for a little while""" start="01:54:40.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""longer. Bear in mind that Sasha might get""" start="01:54:42.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""called at any point to go take care of Kido.""" start="01:54:44.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""So this might wrap up very fast afterwards.""" start="01:54:47.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""But at any rate, it was my pleasure to be the""" start="01:54:49.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""host today. Stefan, thank you for joining.""" start="01:54:51.420" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Bob, thank you for joining and interacting""" start="01:54:53.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""with us and making this a little more""" start="01:54:56.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""interactive and more plural than just the""" start="01:54:58.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""co-organizers. And on that note,""" start="01:55:01.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I will be leaving. So have a wonderful night,""" start="01:55:03.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everyone. And we'll see you next year for the""" start="01:55:05.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""next edition, potentially.""" start="01:55:06.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Thank you, Leo. You're my hero.""" start="01:55:09.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I take everything I said on mumble back.""" start="01:55:11.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""You're amazing.""" start="01:55:12.280" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: bye everyone.""" start="01:55:14.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, Thank you all.""" start="01:55:16.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Take care. Bye. I will""" start="01:55:17.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: also say bye bye. I also need to go to bed.""" start="01:55:20.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you all for this cool conference and""" start="01:55:22.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hopefully we're here through the year and at""" start="01:55:24.920" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""least in 1 year.""" start="01:55:25.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: You've probably made the rest of the rest of""" start="01:55:30.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the victorious. You really stepped up.""" start="01:55:34.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: your contributions.""" start="01:55:38.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Thanks so much for Yeah,""" start="01:55:38.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: thanks so much for being a part of it,""" start="01:55:40.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""specifically you, Floey,""" start="01:55:41.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and just everyone. Thank you all.""" start="01:55:43.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 6]: Have a nice day or night and we'll hear each""" start="01:55:48.180" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""other. Bye!""" start="01:55:48.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 1]: See you. Okay, well,""" start="01:55:51.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Thanks, Zen. I'll go next.""" start="01:55:51.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm the next newest, I think.""" start="01:55:53.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Well, I want to say also,""" start="01:55:59.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you know, Bob and Stefan,""" start="01:56:01.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""thank you so much for jumping in and""" start="01:56:03.660" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""participating in the closing remarks.""" start="01:56:04.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I too think it's a lot of,""" start="01:56:06.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, it's fun to just,""" start="01:56:08.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like, share the buzz after the convention.""" start="01:56:10.760" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We've got all these millions of ideas and""" start="01:56:13.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""then to have a group, a little group think""" start="01:56:16.120" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about what we're walking away from that with.""" start="01:56:18.960" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""What is the temperature of the fire in your""" start="01:56:22.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""belly? And it's just...""" start="01:56:24.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I mean, this is 1 of the highlights of my""" start="01:56:28.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""year in a way that it's just...""" start="01:56:30.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't think other people...""" start="01:56:31.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't think I dare explain it to other""" start="01:56:33.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""people. I think my wife understands and I""" start="01:56:35.880" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""will do. So thank you very much for this""" start="01:56:40.600" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference and the opportunity to participate""" start="01:56:42.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""in it. You know, just the conversation,""" start="01:56:45.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""how vibrant the chat is on IRC,""" start="01:56:48.540" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""how the variety of talks,""" start="01:56:52.080" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""some of the talks that look like television""" start="01:56:54.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""content to me and others that look a lot like""" start="01:56:59.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""my talk. And working through your slides and""" start="01:57:03.840" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""doing it live and you know I appreciate that""" start="01:57:06.100" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""we make a place for all those levels and and""" start="01:57:10.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""show people how to improve our craft as well.""" start="01:57:12.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm not actually dropping or going anywhere.""" start="01:57:26.140" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll continue to talk about eMAX until I get""" start="01:57:29.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""the dinner time bell. I've probably got an""" start="01:57:30.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hour here. I'll tell you what will happen""" start="01:57:40.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""though is I'm guaranteed to light a""" start="01:57:42.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""cigarette. You can already see me kind of""" start="01:57:43.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""hovering about my room because I'm trying to""" start="01:57:45.860" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""avoid like smoking on camera.""" start="01:57:47.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know where that came from.""" start="01:57:49.300" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm giving it up in approximately 5 seconds.""" start="01:57:52.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Yeah I'm gonna hop off.""" start="01:57:58.980" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It's possibly right here.""" start="01:58:00.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'll work tomorrow.""" start="01:58:02.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I took the next 2 days off.""" start="01:58:06.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I'm actually going camping,""" start="01:58:07.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Stefan. I know I've learned that this""" start="01:58:11.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""conference leaves me completely emotionally""" start="01:58:12.800" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""exhausted. I just like,""" start="01:58:16.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I don't know, I watch all,""" start="01:58:18.700" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I feel like I just connect with all the,""" start="01:58:20.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""like it's this time where I connect with all""" start="01:58:23.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""these people that spend as much time thinking""" start="01:58:25.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""about Emacs as I do.""" start="01:58:26.580" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, so maybe we should wrap up before""" start="01:58:31.480" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you have like, you know,""" start="01:58:32.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that overflow error and just...""" start="01:58:35.380" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: In buster thrill, okay.""" start="01:58:38.000" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you""" start="01:58:41.720" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 0]: so much, everyone. Let us actually wrap up""" start="01:58:45.200" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""then. Everyone can find the recordings if you""" start="01:58:47.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""want to keep the conversation going.""" start="01:58:48.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""There are meetups, there are people's blog""" start="01:58:51.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""posts and video channels and mailing lists""" start="01:58:54.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""and all those other things.""" start="01:58:55.320" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I often I list a lot of meetups in Emacs news""" start="01:58:58.820" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""so that's another great way to stay connected""" start="01:59:00.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""through the year and we hope to see everybody""" start="01:59:02.560" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""next year at EmacsConf 2024.""" start="01:59:04.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Thanks Sasha for the send off and goodbye to""" start="01:59:11.260" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""everyone. Oh Sasha I think you were muted but""" start="01:59:16.740" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""yes I was still there I assume that's what""" start="01:59:18.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""you just said. I lied.""" start="01:59:21.220" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I was staying around like Corwin was.""" start="01:59:23.680" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I just said goodbye, but then I wait in the""" start="01:59:25.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""bushes, waiting for the ambush.""" start="01:59:26.520" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: Well I'm personally surprised,""" start="01:59:29.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""speaking for myself. I wouldn't have guessed""" start="01:59:32.780" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""that would happen. All right,""" start="01:59:36.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: The perfect moment. well,""" start="01:59:36.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""I guess that's a wrap then.""" start="01:59:37.360" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Thank you, everyone, and see you next year.""" start="01:59:39.060" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: I thought we were clear like 10 minutes ago.""" start="01:59:43.440" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""Are we not? We are, right?""" start="01:59:45.340" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""We're definitely clear.""" start="01:59:47.400" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 5]: OK, I'm""" start="01:59:48.040" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 3]: hanging up now. Good night.""" start="01:59:49.240" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""It was wonderful to meet you.""" start="01:59:50.640" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 7]: Take care Corwin""" start="01:59:51.900" video="qanda-emacsconf" id="subtitle"]] +[[!template text="""[Speaker 4]: Bye Stefan. Bye. Bye all""" start="01:59:56.520" video="qanda-emacsconf" id="subtitle"]] + +Questions or comments? Please e-mail [sacha@sachachua.com](mailto:sacha@sachachua.com?subject=Comment%20for%20EmacsConf%202023%20emacsconf%3A%20EmacsConf.org%3A%20How%20we%20use%20Org%20Mode%20and%20TRAMP%20to%20organize%20and%20run%20a%20multi-track%20conference) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/emacsconf-before.md b/2023/info/emacsconf-before.md new file mode 100644 index 00000000..817bc045 --- /dev/null +++ b/2023/info/emacsconf-before.md @@ -0,0 +1,37 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 16-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="emacsconf-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/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" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsconf-mainVideo" data=""" +00:00.000 Intro +00:16.580 Reasons +01:09.400 Information +02:09.160 Properties +03:53.120 Timezones +04:29.720 Scheduling +05:41.780 Templates +06:48.400 Wiki +08:04.380 Etherpad +08:28.200 E-mail +09:05.920 BigBlueButton web conferences +10:08.121 Shortcuts +10:36.700 Logbook +11:03.680 Captions +12:13.220 Crontabs and playing the talks +13:11.280 Transitions +13:49.880 Wrapping up + +"""]]<div></div>Duration: 15:05 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/eX2dXG3xMtUHuuBz4fssGT">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="emacsconf-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsconf-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus"></audio></div><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/emacsconf-nav.md b/2023/info/emacsconf-nav.md new file mode 100644 index 00000000..a633568d --- /dev/null +++ b/2023/info/emacsconf-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a> +Next by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/emacsen-after.md b/2023/info/emacsen-after.md new file mode 100644 index 00000000..d45b44d7 --- /dev/null +++ b/2023/info/emacsen-after.md @@ -0,0 +1,1671 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="emacsen-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""Hello, my name is Fermin.""" start="00:00:00.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Today, I'm going to talk about the Emacsen family,""" start="00:00:03.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the design of an Emacs, and the importance of Lisp.""" start="00:00:06.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So we're going to talk about Lisp.""" start="00:00:11.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I want to start from the end.""" start="00:00:13.520" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Why Lisp matters""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""The first question I want to ask is""" start="00:00:17.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""why I think Lisp matters.""" start="00:00:19.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""When I'm talking about Lisp here,""" start="00:00:21.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'm talking about the idea of Lisp,""" start="00:00:22.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so the family of languages that are Lisp.""" start="00:00:27.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""But given that there's no formal specification of Lisp,""" start="00:00:30.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so the opinion might vary. I will expect that Lisp,""" start="00:00:34.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""most of the Lisp have these kind of features.""" start="00:00:40.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""The first one is homoiconic:""" start="00:00:44.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the code is data, basically.""" start="00:00:46.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""They also have a REPL: read-eval-print loop.""" start="00:00:49.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""That is very powerful and can help in development.""" start="00:00:52.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Also, I think a good Lisp""" start="00:00:57.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""should have a powerful macro system.""" start="00:01:00.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'm good with compile-time macros,""" start="00:01:03.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but read-time is also interesting.""" start="00:01:05.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""There's a lot of Lisp that you can choose.""" start="00:01:07.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""There's the main three ones, of course,""" start="00:01:10.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""with Scheme, Common Lisp, and Clojure.""" start="00:01:12.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Scheme by Guile, Common Lisp by Common Lisp,""" start="00:01:13.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and Clojure by Clojure or ClojureScript.""" start="00:01:19.675" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Why Emacs Lisp was chosen""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""So let's talk about Emacs Lisp.""" start="00:01:26.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I didn't mention Emacs Lisp.""" start="00:01:28.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'm going to talk about why Emacs Lisp""" start="00:01:29.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""was chosen for an Emacs editor.""" start="00:01:32.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We're going to explore this kind of design of the Emacs.""" start="00:01:35.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And Emacs Lisp is the main language of it. Why?""" start="00:01:39.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Given that there were a few alternatives at the time,""" start="00:01:42.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""why Emacs Lisp was chosen?""" start="00:01:44.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So RMS, Richard Stallman, needed a Lisp,""" start="00:01:48.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and there wasn't one available at the time.""" start="00:01:51.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Keep in mind, this was the early 80s.""" start="00:01:54.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Stallman was writing at that point the GCC, I think,""" start="00:01:57.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and he was writing the core components""" start="00:02:03.241" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of what is going to become GNU.""" start="00:02:07.975" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""He needed an editor. He wanted Lisp. He wanted Emacs.""" start="00:02:10.441" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So he wrote Emacs Lisp. So at that time,""" start="00:02:15.500" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the functionality was more important than "perfection."""" start="00:02:20.281" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""What I mean [by] "perfection" is: we programmers""" start="00:02:24.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""sometimes like to make everything good""" start="00:02:26.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""or very, very good when sometimes, indeed,""" start="00:02:33.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""it's more important that it works""" start="00:02:36.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""to do the task that it should.""" start="00:02:39.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it's not a bad language.""" start="00:02:42.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's not that bad. At that time, it was mostly nice.""" start="00:02:44.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Today, it's good enough, I think.""" start="00:02:50.240" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Other "Emacsen"""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""He wasn't the first one, the GNU Emacs,""" start="00:02:54.841" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""nor the only one, of course.""" start="00:02:59.461" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""There were others: Hemlock, Zmacs, and Climacs...""" start="00:03:02.541" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Two of them, I think, were written in Common Lisp,""" start="00:03:06.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and Zmacs was written in a Lisp from a Lisp machine,""" start="00:03:08.981" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so it was an implementation of Emacs.""" start="00:03:14.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Not GNU Emacs, but the original idea""" start="00:03:16.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of Emacs for a Lisp machine.""" start="00:03:19.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So Hemlock was written in Common Lisp,""" start="00:03:22.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but it's no longer used and no longer developed,""" start="00:03:23.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""as far as I know. And Climacs, it was developed,""" start="00:03:26.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but it was abandoned, I think.""" start="00:03:29.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So three of them failed for different reasons.""" start="00:03:31.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Zmacs was because of the Lisp machine market crash,""" start="00:03:33.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and yeah, it also failed.""" start="00:03:37.880" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Why not Common Lisp?""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""So Emacs got alone. And in the 90s, interesting to explore,""" start="00:03:38.581" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""some people suggest that why""" start="00:03:44.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""now that we have a standard Lisp, right,""" start="00:03:46.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""because Common Lisp was standardized in '94,""" start="00:03:49.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""why don't we change Emacs Lisp to Common Lisp?""" start="00:03:52.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""These are the other reasons I think are important,""" start="00:03:56.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""because that's why Stallman didn't choose Common Lisp.""" start="00:03:59.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""But I think the main one""" start="00:04:01.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that I didn't write here""" start="00:04:02.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""is that Stallman wasn't a big fan of Common Lisp,""" start="00:04:03.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and he was at the time the main developer""" start="00:04:09.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and maintainer, of course, for Emacs.""" start="00:04:12.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So he chose not to move to Common Lisp.""" start="00:04:14.041" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""But other reasons may be why...""" start="00:04:16.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Because he had a late and painful standardization.""" start="00:04:18.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Keep in mind, the first book that Guy Steele wrote""" start="00:04:22.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""was in 1984. The standardization finished in 19--""" start="00:04:28.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""sorry, in 1984 was the first book""" start="00:04:32.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and the standardization finished in 1994.""" start="00:04:38.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So, like, 10 years of difference from one to the other.""" start="00:04:44.421" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""10 years of a lot of talk, a lot of money,""" start="00:04:48.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and a lot of pain probably.""" start="00:04:51.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""The Lisp usage declined in the 90s""" start="00:04:56.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""due to the AI winter.""" start="00:04:59.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We all know about the Lisp machine market crash.""" start="00:05:00.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And the failure of commercial Lisp machine was""" start="00:05:03.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""inevitable at that point.""" start="00:05:08.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So all the potential Emacs friends died.""" start="00:05:12.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And also a lot of Emacs Lisp was already available.""" start="00:05:17.161" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Emacs was already an amateur utility.""" start="00:05:21.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Unix won the war of the operating system, as we know,""" start="00:05:24.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and Emacs Lisp was available in Unix,""" start="00:05:29.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""or in GNU/Linux, as we know,""" start="00:05:33.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is the most successful implementation of Unix.""" start="00:05:36.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Sorry, BSD. Okay.""" start="00:05:40.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So Emacs won by being the "better" alternative.""" start="00:05:44.208" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'm quoting "better" here because""" start="00:05:48.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I think Emacs does have a better design""" start="00:05:50.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and, well, it was the one that survived, right?""" start="00:05:53.700" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Which is the more important thing for a software or,""" start="00:05:56.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""you know... So Emacs won by being free,""" start="00:06:00.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""also in price, which I think the Lisp machine wasn't.""" start="00:06:05.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So that was also very good. It was included.""" start="00:06:08.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It had, and it still has, of course,""" start="00:06:11.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""a nice collection of packages""" start="00:06:14.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that improve the standard functionality.""" start="00:06:15.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It was easy to extend because of the nature of Lisp.""" start="00:06:20.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it has a very good integration with GNU/Linux,""" start="00:06:23.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of course. It was created to write it.""" start="00:06:26.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It makes sense that it's very good""" start="00:06:29.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""for a system administration perspective.""" start="00:06:31.080" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Common Lisp is still not dead or is always dead""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""But I think Common Lisp is not dead yet.""" start="00:06:39.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Or some people say that it's always dead,""" start="00:06:43.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so you cannot kill the something that is always dead.""" start="00:06:45.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So I don't always code in C,""" start="00:06:48.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but when I do, it's Lisp. I'm not a big fan of C""" start="00:06:50.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""for a lot of things, but yeah.""" start="00:06:54.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Why I think Common Lisp is still relevant""" start="00:06:58.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and can be used for all kind of application,""" start="00:07:02.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""both commercially and non-commercially.""" start="00:07:05.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""The first one is the main implementation""" start="00:07:09.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of Common Lisp, which is called SBCL, which is awesome.""" start="00:07:11.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's fast. It's a very good extension.""" start="00:07:16.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Basically, it's the reference one today.""" start="00:07:19.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""The namespaces of common Lisp,""" start="00:07:21.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I really like the implementation.""" start="00:07:25.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Some people don't like it. It's a matter of taste.""" start="00:07:26.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""But I think it's really good.""" start="00:07:28.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I have a timeless standard. So it was standardized""" start="00:07:29.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""in the 90s, as I said.""" start="00:07:32.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it doesn't really need a new standard.""" start="00:07:35.980" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Some people say it does need, but I don't think so.""" start="00:07:38.881" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Also it does have macro readers,""" start="00:07:44.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which I think is a very nice feature of Common Lisp""" start="00:07:46.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that other Lisp doesn't seem to have,""" start="00:07:49.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""or a lot of them don't: in my mind, Emacs Lisp and Clojure.""" start="00:07:51.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Also, it's image-based development,""" start="00:07:56.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is also quite unique to Common Lisp.""" start="00:07:58.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I don't know all the Lisp that does have this.""" start="00:08:00.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Basically, you develop a REPL""" start="00:08:04.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and then you dump the entire REPL into an image.""" start="00:08:05.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Java would be like a core dump.""" start="00:08:10.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And you create an executable.""" start="00:08:12.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Which at the time, I guess in the 90s,""" start="00:08:14.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""was a huge one, right?""" start="00:08:17.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Because you have the entire language, and the REPL,""" start="00:08:18.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and the code. But today are like 20 MB,""" start="00:08:20.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which in today's standard is nothing.""" start="00:08:23.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""There's pictures in your phone larger than 20 MB.""" start="00:08:26.600" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Lem is a nice Emacsen implementation""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""So there's a new Emacs in town--well, Emacs, not Emacs,""" start="00:08:30.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Which is Lem. I think it's a very good Emacs implementation.""" start="00:08:39.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""What I mean by "Emacs" here is not a clone of GNU Emacs,""" start="00:08:43.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but an Emacs-inspired editor with similar characteristics,""" start="00:08:46.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and written in a Lisp,""" start="00:08:51.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is why I said that Lisp was very important.""" start="00:08:53.520" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Why not just use GNU Emacs?""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""So first, I'm going to address the elephant in the room,""" start="00:08:58.260" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and the question that maybe most""" start="00:09:01.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of you are now thinking.""" start="00:09:05.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Why not just use GNU Emacs? It's the project.""" start="00:09:06.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's the main one, right? Why choose another one?""" start="00:09:12.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So Lem is relatively new, 2018.""" start="00:09:15.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it can explore different ideas.""" start="00:09:18.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It was developed by Sasaki-san.""" start="00:09:20.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Basically, it was mostly a one-month project,""" start="00:09:21.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but we are getting there. I'm not the maintainer.""" start="00:09:26.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'm a developer of Lem. So given that it's""" start="00:09:31.941" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""relatively new, it can explore different ideas.""" start="00:09:36.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You're not bound to a community or backwards compatibility.""" start="00:09:39.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You can explore different ideas,""" start="00:09:43.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and I think that's always nice.""" start="00:09:45.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Having multiple options creates competition,""" start="00:09:46.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which benefits the community. So Emacs and Vim,""" start="00:09:49.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the competition between the two""" start="00:09:52.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""always create nice packages like evil or, you know...""" start="00:09:54.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's really good to have some kind of a competition,""" start="00:09:59.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""healthy competition.""" start="00:10:03.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it doesn't share any code base with GNU Emacs.""" start="00:10:06.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I want to clarify this because some people think that""" start="00:10:08.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Lem is kind of a, you know, Spacemacs or Doom.""" start="00:10:12.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""No, it doesn't share any code.""" start="00:10:16.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It has zero Emacs. So that's it.""" start="00:10:19.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Getting this out of the way.""" start="00:10:27.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Why I think Lem is interesting.""" start="00:10:29.200" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Why Lem""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""I'm going to show why Lem.""" start="00:10:31.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Why? You can try Lem, and maybe you like it.""" start="00:10:32.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""First thing, these are the features""" start="00:10:37.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that I really like from it.""" start="00:10:41.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Can be different from person to person,""" start="00:10:42.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but I think these are the main ideas""" start="00:10:45.575" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""it brings to the table and are really interesting.""" start="00:10:48.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I want to say that Lem is not a research project.""" start="00:10:50.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's not like some people did that""" start="00:10:53.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and it's still in development. No, no.""" start="00:10:55.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is a usable product that can be used""" start="00:10:57.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""to [do] day-to-day programming""" start="00:11:00.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""in a very good experience.""" start="00:11:02.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is not like--I want to clarify this""" start="00:11:04.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""because some people bring some exploratory projects.""" start="00:11:06.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is not that one. This is finished.""" start="00:11:08.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Well, finished in the way that you can use it.""" start="00:11:10.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's not, you know, have everything in place.""" start="00:11:14.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So let's continue.""" start="00:11:17.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's written 100% in Common Lisp.""" start="00:11:20.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I say this because Emacs is not""" start="00:11:22.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""100% in Emacs Lisp.""" start="00:11:23.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You have to modify the C code,""" start="00:11:26.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I think, well, if you... You don't have to,""" start="00:11:28.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but if you want to change the internals, you do.""" start="00:11:31.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I think that given that Lem does not care""" start="00:11:34.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""about the implementation of the language itself--""" start="00:11:38.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so for example, Lem doesn't have to deal with""" start="00:11:41.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""how Common Lisp works, it just used the language, right?""" start="00:11:44.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's on top of the language.""" start="00:11:48.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You can say that. Emacs Lisp is Emacs and Emacs Lisp,""" start="00:11:50.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so you have to, you have both in the same place,""" start="00:11:53.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is, well, it's a double-edged sword, right?""" start="00:11:56.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Then you have the both--similar to Emacs--""" start="00:12:00.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""you have ncurses and SDL2 frontends.""" start="00:12:03.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""One is terminal-based and the other is graphical""" start="00:12:05.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""using the SDL2 library,""" start="00:12:08.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which you can do a lot of crazy things.""" start="00:12:10.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Of course, it's meant to program games and stuff,""" start="00:12:13.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but Lem uses, and it works fairly well.""" start="00:12:16.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You can program games if you want.""" start="00:12:19.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Not that you need to or anything, but we have Tetris.""" start="00:12:21.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So there's that.""" start="00:12:27.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Also, separate front-end interface.""" start="00:12:29.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So like I said, you have two, but you can create more.""" start="00:12:31.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""In the past, had an electron one,""" start="00:12:34.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but it got abandoned for obvious reasons, I think. Sorry.""" start="00:12:36.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This idea is taken from Neovim that had a lot of frontends.""" start="00:12:41.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""In fact, we don't have that many,""" start="00:12:45.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but not that many people we have two.""" start="00:12:48.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""That works fairly well.""" start="00:12:49.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We have superb development experience thanks to SLIME.""" start="00:12:51.675" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So we have Micro,""" start="00:12:56.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is a SLIME version for Lem, basically.""" start="00:13:01.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""SLIME is awesome and Micro is also awesome.""" start="00:13:04.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We have a very strong development experience""" start="00:13:09.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that we don't have for a Lisp,""" start="00:13:12.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which I think is very important.""" start="00:13:15.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""If you want someone to develop packages or to use your tool,""" start="00:13:17.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""your Emacs at least,""" start="00:13:20.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""you need to have a very good development experience,""" start="00:13:22.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which enhance the extensions for the editor.""" start="00:13:28.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So we have also Vim-like integration.""" start="00:13:34.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This for me was mostly mandatory""" start="00:13:36.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""because I'm an evil-mode user, and I think it's really good.""" start="00:13:39.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Because evil-mode is very good and the VMode,""" start="00:13:44.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which it's called, even though it's more like Vim mode,""" start="00:13:49.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""it's called VMode. It's written by""" start="00:13:51.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Fukamachi-san and it's really good.""" start="00:13:54.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So yeah, that's the thing that I think Lem brings to""" start="00:13:59.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the table and that's really interesting.""" start="00:14:01.960" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Similarities and differences""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""So I'm going to do a small demo of Lem, a Emacs example.""" start="00:14:03.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""First, the similarities,""" start="00:14:10.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the nomenclature is very similar: modes, buffers,""" start="00:14:11.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""commands... The commands are very similar in nature.""" start="00:14:14.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It was written with GNU Emacs in mind""" start="00:14:17.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""to mimic a lot of things.""" start="00:14:20.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I think GNU Emacs is the best Emacs implementation""" start="00:14:24.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""in that way. So why not just take what is working, right?""" start="00:14:29.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I have similar command,""" start="00:14:33.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but flexible to add other default ones.""" start="00:14:35.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's not like Emacs that you have Emacs commands.""" start="00:14:39.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Lem has Emacs command by default,""" start="00:14:42.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but you can easily change that""" start="00:14:45.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""with other default ones, right?""" start="00:14:47.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's like, you can think of it like a major mode, right?""" start="00:14:49.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Well, more like a global mode,""" start="00:14:52.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""sorry. That's a global mode of Emacs commands,""" start="00:14:54.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""or something like that.""" start="00:14:57.961" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""In general, the feeling is really close.""" start="00:14:59.361" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So you will tell that it's really close to how both work,""" start="00:15:01.520" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""similar commands, and that shows.""" start="00:15:05.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Differences, Common Lisp is not Emacs Lisp,""" start="00:15:07.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""it's similar in the surface.""" start="00:15:12.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So it uses `defun`, you know, have parentheses""" start="00:15:13.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and yada, yada, but it's not the same language, really,""" start="00:15:16.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and sometimes you will find""" start="00:15:18.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that the differences are substantial.""" start="00:15:20.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""The internals are completely different,""" start="00:15:23.260" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""of course, nothing, well, completely.""" start="00:15:24.860" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""They have a buffer implementation and other things,""" start="00:15:27.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""but in general, yeah, aside from that,""" start="00:15:29.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""it's completely different.""" start="00:15:32.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And it's true that GNU Emacs""" start="00:15:34.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""has a better documentation tutorial.""" start="00:15:36.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So GNU Emacs for me, I think it's""" start="00:15:37.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""one of the best-documented software ever.""" start="00:15:39.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We're trying to go there, but we're still not there.""" start="00:15:41.760" video="mainVideo-emacsen" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]] + +[[!template text="""Let's do the demo. So to open Lem, you compile it,""" start="00:15:49.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and then you have it available,""" start="00:15:54.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and you open Lem. As you can see,""" start="00:15:55.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""we have the temporary buffer. On the top left is the mode--""" start="00:15:57.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""not mode,""" start="00:16:00.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the beam, insert, normal, visual. This is the V mode, right?""" start="00:16:03.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""In the top right corner, we have fundamental,""" start="00:16:07.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is the major mode, then paredit,""" start="00:16:10.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is like the minor mode, but you know,""" start="00:16:11.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""this is like the paredit for Emacs.""" start="00:16:15.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""In the top left buffer,""" start="00:16:16.080" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""you have the current buffer.""" start="00:16:19.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So let's open the... Emacs, we all know how to do this.""" start="00:16:22.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is a command, like explore this command,""" start="00:16:26.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""like `open-init-file`. This opens the init file,""" start="00:16:29.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is in this directory, in `~/.lem/init.lisp`.""" start="00:16:31.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""As you can see, this is very similar, right?""" start="00:16:34.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""You define a command, which is not interactive,""" start="00:16:38.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and then you get the buffer, right?""" start="00:16:40.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is a... So my personal command...""" start="00:16:42.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Let's go to the one that I just opened. Init file, right?""" start="00:16:44.920" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So this is a command that I did,""" start="00:16:48.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is `find-file`.""" start="00:16:52.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is very similar to [??], but just `find-file`.""" start="00:16:53.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""As you can see, very similar.""" start="00:16:56.600" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is the way that you program in Lem.""" start="00:16:58.400" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is the major mode, which is Lisp,""" start="00:17:01.760" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""that we're seeing at the top, right?""" start="00:17:04.840" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""And we can connect if we `slime-self-connect`.""" start="00:17:06.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is the prompt. This is the REPL.""" start="00:17:10.480" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So if we... Keep in mind that this is Common Lisp,""" start="00:17:14.120" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""so this has different things.""" start="00:17:17.960" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So we have to go to the Lem package,""" start="00:17:20.440" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which is very important. This has namespaces, right?""" start="00:17:22.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's not the same. And we can say, okay,""" start="00:17:26.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""`current-buffer`. We get the buffer.""" start="00:17:29.040" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We can explore everything that is in it, right?""" start="00:17:32.320" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""We have all this stuff. This is... If you're familiar""" start="00:17:35.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""with SLIME or Sly, this is it.""" start="00:17:38.560" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""It's just that we can say, buffer, I think it's `buffer-name`.""" start="00:17:41.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Yes. And we can take this,""" start="00:17:46.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and then we'll give you the name.""" start="00:17:49.160" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So as you can see, the development experience""" start="00:17:50.800" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""is really powerful. We can also `lisp-scratch`,""" start="00:17:54.360" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""which transform... basically apply""" start="00:17:57.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the major mode of Lisp to the temporary buffer.""" start="00:18:00.680" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""This is very similar to Emacs.""" start="00:18:02.640" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Let's go back to the theme. I think that's it.""" start="00:18:06.720" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Thank you all very much for listening to me.""" start="00:18:12.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I think I point out""" start="00:18:13.880" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""the Emacsen family is really interesting.""" start="00:18:15.240" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""Lisp is really good, and GNU Emacs is really good,""" start="00:18:17.000" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""and I think Lem is also pretty awesome.""" start="00:18:19.280" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""So thank you all very much.""" start="00:18:21.200" video="mainVideo-emacsen" id="subtitle"]] +[[!template text="""I'll be answering the question now. And happy hacking.""" start="00:18:23.120" video="mainVideo-emacsen" id="subtitle"]] + + + +Captioner: sachac + +<a name="emacsen-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Here.""" start="00:00:00.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. Yeah. So thanks,""" start="00:00:05.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Fermin, for the great talk.""" start="00:00:06.279" video="qanda-emacsen" id="subtitle"]] +[[!template text="""People have questions,""" start="00:00:08.039" video="qanda-emacsen" id="subtitle"]] +[[!template text="""please post them on the pad or the IRC as""" start="00:00:12.179" video="qanda-emacsen" id="subtitle"]] +[[!template text="""well and we'll take them up.""" start="00:00:13.259" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Thank you very much. The guests will be here""" start="00:00:17.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to answer questions. Let's see.""" start="00:00:21.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yep.""" start="00:00:23.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 1]: And also, Fermin, if you later want to""" start="00:00:28.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""clarify anything or fix any URLs or such,""" start="00:00:30.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you're always welcome to do that either like""" start="00:00:32.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""on the Wiki page, or if you like email any of""" start="00:00:36.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the organizers, they should be able to help""" start="00:00:37.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with that as well.""" start="00:00:38.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay. Yeah, I put the wrong URL.""" start="00:00:41.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah, not a big deal really,""" start="00:00:46.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""if you look it up. Yeah,""" start="00:00:48.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that's really better. Thank you very much.""" start="00:00:50.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Checking, no questions.""" start="00:00:56.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Very good to be in touch.""" start="00:00:58.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, we have a question here in the big blue""" start="00:01:17.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""button chat.""" start="00:01:17.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, public chat. I see.""" start="00:01:21.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Is LEM an acronym? I think it is,""" start="00:01:26.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I never remember. The complete name is""" start="00:01:32.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like something... It's also a circle,""" start="00:01:36.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like, you know, a self-referencing,""" start="00:01:38.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you know, recursive name.""" start="00:01:41.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I never remember it, sorry.""" start="00:01:42.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's like... Yeah, someone...""" start="00:01:45.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Okay, someone asked about the DEM community,""" start="00:01:50.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""how big it is. So I don't remember,""" start="00:01:56.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to answer the question,""" start="00:01:57.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't remember the acronym,""" start="00:01:58.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it is an acronym. I just never...""" start="00:02:00.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And it's not written anywhere,""" start="00:02:04.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think, or someone...""" start="00:02:06.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I never check it. So I...""" start="00:02:09.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: I forgot.""" start="00:02:12.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: My maintainer told me once and then So,""" start="00:02:15.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""whole large, does Leia have a package""" start="00:02:17.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""manager? We do have a package manager,""" start="00:02:19.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""funnily enough. We use the QuickLisp""" start="00:02:21.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""infrastructure to get packages,""" start="00:02:26.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so it's very easy to install packages.""" start="00:02:29.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So basically, we don't have a package manager""" start="00:02:33.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""as in Emacs, half a packet.l.""" start="00:02:35.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We're using the same common list""" start="00:02:39.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""infrastructure to provide the different""" start="00:02:41.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""packages. We also have a talk with the""" start="00:02:45.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Ultralisp, which is like a,""" start="00:02:47.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you know, QuickLisp is like,""" start="00:02:48.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can think quickly of Melpa.""" start="00:02:50.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Ultralisp is like a fast Melpa,""" start="00:02:52.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""very fast Melpa, that every,""" start="00:02:54.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think every day you can get a package from""" start="00:02:58.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""them. And We have a tag system that you can""" start="00:03:01.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""submit a package and get a tag,""" start="00:03:02.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and Theory can download those packages with""" start="00:03:08.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the lem tag. So the thing is,""" start="00:03:13.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's not yet, it doesn't have a user""" start="00:03:17.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interface to install packages.""" start="00:03:18.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Still, it's 2 external packages.""" start="00:03:22.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""For now, imagine this is like the early""" start="00:03:25.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs, right? Everything is going to the core""" start="00:03:27.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for now, because we need that functionality.""" start="00:03:29.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""In the future, we probably will split it up""" start="00:03:32.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""way more. But let me first answer a question""" start="00:03:37.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in the other part. How large is the LEN""" start="00:03:42.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community? Hope it's a chance of survival""" start="00:03:44.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""long term. So we are a very small community,""" start="00:03:47.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mostly because Sasaki-san,""" start="00:03:51.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the main developers of the community,""" start="00:03:54.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""are from Japan and some of them,""" start="00:03:57.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or most of them, don't know English.""" start="00:03:58.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""At the beginning, LEM was a very""" start="00:04:01.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Japanese-centric tooling because barrier of""" start="00:04:05.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""language, most of the users are from Japan.""" start="00:04:06.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So different communities.""" start="00:04:08.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And also, I don't know why,""" start="00:04:12.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but the main maintainer,""" start="00:04:13.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is Asaki-san, very good guy and a very,""" start="00:04:17.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""very talented developer.""" start="00:04:19.079" video="qanda-emacsen" id="subtitle"]] +[[!template text="""He doesn't like to, you know,""" start="00:04:21.779" video="qanda-emacsen" id="subtitle"]] +[[!template text="""at first the project was all in Japanese,""" start="00:04:24.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so he doesn't care if someone uses the""" start="00:04:27.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""project or not. He's more focused on the,""" start="00:04:28.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I guess, quality of the features of it.""" start="00:04:32.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So that creates a problem that doesn't really""" start="00:04:35.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mind the community. So the community doesn't""" start="00:04:38.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mind in a good way. It's to focus more on""" start="00:04:41.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""technicality rather than the user,""" start="00:04:43.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which I mean, I cannot blame him.""" start="00:04:46.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's very hard work to build an Emacs and""" start="00:04:49.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""editor from scratch. It's not a trivial task.""" start="00:04:52.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So yeah, we're a very small community.""" start="00:04:56.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But I think the chance of survival is very""" start="00:04:58.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""good because LEM is written in ANSI Common""" start="00:05:01.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Lisp, so it should be used in any...""" start="00:05:04.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, it works in a lot of Common Lisp""" start="00:05:07.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""implementation. For people who don't know,""" start="00:05:10.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Common Lisp is a language that was""" start="00:05:12.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""standardized in the 94.""" start="00:05:13.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I explained that in the talk,""" start="00:05:14.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I'll say it again.""" start="00:05:15.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So, if Common Lisp exists,""" start="00:05:18.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in theory, LEM should also exist.""" start="00:05:21.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And also if nCursor doesn't break or doesn't""" start="00:05:24.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stop to exist, which is even less likely.""" start="00:05:27.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So that's the main idea.""" start="00:05:30.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And you can use LEM for very good Common Lisp""" start="00:05:33.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""development already. If Common Lisp doesn't""" start="00:05:36.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""change that much, it should disappear.""" start="00:05:39.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We are not bound to any company or any...""" start="00:05:42.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Even Sasaki-san, God forbid,""" start="00:05:46.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""disappears instantaneously.""" start="00:05:47.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""There are a few people,""" start="00:05:50.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""me included, that know very well the code""" start="00:05:52.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""base and we can continue the development.""" start="00:05:54.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So it's not like 1, there's no one-man""" start="00:05:56.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""project. Maybe a four-man project or 5,""" start="00:05:58.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but not 1. Okay, I'll answer the 1 in the""" start="00:06:04.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""chat, on the blue button.""" start="00:06:08.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Is it best to learn Common Lisp before""" start="00:06:10.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""learning to use LEM? I think this is similar""" start="00:06:13.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to Emacs and EmacLisp,""" start="00:06:15.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right? Should you use EmacLisp before using""" start="00:06:18.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs? Doesn't make too much sense,""" start="00:06:20.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right? You see Emacs and then you go learning""" start="00:06:23.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Common Lisp. I think it's the same,""" start="00:06:28.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""sorry, EmacsLisp. And it's the same with LEM.""" start="00:06:30.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can start using LEM with a non-common""" start="00:06:32.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Lisp, which is fine. You can use it to edit""" start="00:06:37.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""your things. It's like an editor.""" start="00:06:39.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But like Emacs, LEM puts a lot of focus on""" start="00:06:42.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""extensibility. So it's very probable that you""" start="00:06:46.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""will learn how to write Common Lisp.""" start="00:06:49.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I have to say that a lot of people that use""" start="00:06:53.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""LEM, well, me and most of the people,""" start="00:06:56.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""come from Emacs. So if you come from Emacs""" start="00:06:59.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and you know a little bit of Emac Lisp,""" start="00:07:00.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Common Lisp is like an uncle or cousin""" start="00:07:04.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""distance that shares some similarities.""" start="00:07:07.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you will... Well, it's not going to be""" start="00:07:09.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that. I can show... Sorry about that.""" start="00:07:12.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""For example, I show that in the...""" start="00:07:14.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I can show... So the...""" start="00:07:21.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's not that different from Emacs regarding""" start="00:07:27.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""configuration. So for example,""" start="00:07:28.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this command doesn't exist on LEM.""" start="00:07:31.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And Sasaki-san didn't want to copy one-to-one""" start="00:07:35.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the command from Emacs,""" start="00:07:36.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the airgrip, the cursor grip command of""" start="00:07:39.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs. And I said, okay,""" start="00:07:41.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""then I'm going to implement it myself.""" start="00:07:43.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And it's something like this,""" start="00:07:44.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is you will do something similar to""" start="00:07:47.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs, right? This will be like things at""" start="00:07:50.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""point symbol or something like that.""" start="00:07:52.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And then you have a prompt,""" start="00:07:54.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""very prompt for directory with Emacs would be""" start="00:07:59.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""something similar. And then you then launch""" start="00:08:01.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""grep with the command that you want.""" start="00:08:02.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""This is not that far from Emacs,""" start="00:08:06.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this, really. If you don't know neither of""" start="00:08:10.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""those, you can still use LEM,""" start="00:08:12.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""though as with Emacs, extensibility will be,""" start="00:08:16.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""well, you couldn't extend it if you don't""" start="00:08:22.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""know combo disp. Should I answer the question""" start="00:08:28.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""on the etherpad writing it at the same time?""" start="00:08:33.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 1]: You're welcome to, but you don't have to.""" start="00:08:36.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can just answer here on stream,""" start="00:08:38.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: on the Google button. Okay.""" start="00:08:40.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Okay. Are there any Lisp machine capabilities""" start="00:08:43.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you're trying to provide that GNU image""" start="00:08:45.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""lacks? The type objects capability in the""" start="00:08:46.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""editor, as an example.""" start="00:08:47.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, there were a few discussions about""" start="00:08:53.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the Lisp machines and LEM and all the big""" start="00:08:59.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""projects that tries to get some capability of""" start="00:09:03.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it. But we don't really...""" start="00:09:05.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We try to improve the development experience""" start="00:09:09.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for Common Lisp and for LEM,""" start="00:09:12.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""imitating a lot of things that the Lisp""" start="00:09:18.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""machine had. I'm going to try to do a thing""" start="00:09:21.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that I don't know if it's going to work.""" start="00:09:23.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So to explain this, let's see.""" start="00:09:26.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm going to recompile them now live.""" start="00:09:35.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Let's see how it works.""" start="00:09:42.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And compiling the, yes,""" start="00:09:47.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it doesn't work. OK. What if I do?""" start="00:09:51.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No, it doesn't work. OK.""" start="00:09:53.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I was trying to compile the SDL2,""" start="00:09:55.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I do have the codebase modifier.""" start="00:09:57.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I should be able to compile this.""" start="00:10:00.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Oh, that was really bad.""" start="00:10:05.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""What about example? I have the code base,""" start="00:10:13.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so let me check. I'm going to do this.""" start="00:10:17.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Oh, yeah, I have this modified.""" start="00:10:19.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I stash this. OK. I have this modified.""" start="00:10:31.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Now it should work. OK.""" start="00:10:33.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sorry. I was going to show the writing""" start="00:10:42.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""capabilities of it, similar to the Lisp""" start="00:10:45.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""machine of navigating of classes.""" start="00:10:47.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So the answer of that question is,""" start="00:10:52.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""not really. We don't try to emulate this""" start="00:10:57.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""machine, nor any like of that.""" start="00:10:58.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But yeah. Let me, I'm going to try to,""" start="00:11:05.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""okay, now I'm back at them.""" start="00:11:07.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Okay. So what about using them for things""" start="00:11:12.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""other than common, common,""" start="00:11:13.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that markets? Okay. So yes,""" start="00:11:16.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we do have, so I'm going to show the code""" start="00:11:18.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""base a little bit. Like I said before,""" start="00:11:20.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we don't have yet too much external packages""" start="00:11:25.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because of the size of the community.""" start="00:11:26.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I have a question. Go ahead,""" start="00:11:30.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can write it, Michael.""" start="00:11:32.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah. So, yes, as you can see here,""" start="00:11:37.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this is almost all, or 99% of the major modes""" start="00:11:43.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we have. We use the same terminology of""" start="00:11:46.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""SkinnyMemax in that way.""" start="00:11:47.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""For example, the C mode,""" start="00:11:49.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""if you go inside, you see that this is the""" start="00:11:51.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""fine major mode. So in that regard,""" start="00:11:53.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's very similar to Emacs.""" start="00:11:54.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And we have something called a JIT,""" start="00:11:56.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is like a maggot.""" start="00:11:58.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And you can edit files.""" start="00:12:00.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can use not only for common lists.""" start="00:12:02.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""In my configuration, which is written,""" start="00:12:06.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I will post that later,""" start="00:12:11.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but if you go to my code burg you can see my""" start="00:12:15.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""configuration which is,""" start="00:12:16.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which I do have. So for example you can use""" start="00:12:20.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it for a scheme. We have a swank server.""" start="00:12:22.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""This is the configuration to use it.""" start="00:12:24.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can use it for JavaScript because we have""" start="00:12:25.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""a native LSP client written in.""" start="00:12:28.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And we have Dired. Yeah,""" start="00:12:29.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this is Dired. We have Dired indeed.""" start="00:12:33.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No, it's not Dired, you know.""" start="00:12:35.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's called directory.""" start="00:12:36.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sasaki-san, which is the main maintainer,""" start="00:12:38.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""doesn't like to copy one-to-one Emacs names,""" start="00:12:43.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but we are the same. We also have projects,""" start="00:12:48.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is like projectile.""" start="00:12:51.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So, you know, they're very similar but not""" start="00:12:55.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the same. We also have a VI configuration,""" start="00:12:56.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""as you can see. I'm using the VI commands and""" start="00:12:59.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stuff, and it's very good.""" start="00:13:00.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I will say not as good as an evil because it""" start="00:13:03.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""still needs some polish,""" start="00:13:06.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it's getting there.""" start="00:13:08.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So we can also program in JavaScript and a""" start="00:13:13.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""lot of LSP things, and Elixir,""" start="00:13:16.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which was recently added by myself.""" start="00:13:18.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And yeah, it's very fun to add new modes.""" start="00:13:21.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""OK, what else next? What about user-level""" start="00:13:27.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""things other than coding?""" start="00:13:28.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""What about using this in conjunction with""" start="00:13:31.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Nix? Oh, so there's a big,""" start="00:13:34.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so like I said before,""" start="00:13:36.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""there were like an issue that 3 main common""" start="00:13:40.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""list project were talking,""" start="00:13:40.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""some of the users. So the 3 main projects are""" start="00:13:46.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""LEM, probably, Nixed, and then StamWM,""" start="00:13:49.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the 3 main, well, 3 big,""" start="00:13:52.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""common list projects that are trying to""" start="00:13:55.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""emulate an Emacs experience in different""" start="00:13:57.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""fields. 1 is Editor, the other 1 is Window""" start="00:14:00.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Manager, and the 1 is the browser.""" start="00:14:01.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The problem is that the design of the 3 are""" start="00:14:06.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""very different. So Nix is very focused on the""" start="00:14:11.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""browser. You can connect to Nix.""" start="00:14:14.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So given that they're both a common list,""" start="00:14:16.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can connect to Nix from them and vice""" start="00:14:18.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""versa. And you can send commands and you can,""" start="00:14:21.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so you have this kind of interoperability""" start="00:14:22.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with both. But no, you cannot combine both to""" start="00:14:31.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""have 1 LEMNIX. That would be very sick.""" start="00:14:35.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I would love it. But the effort is just too""" start="00:14:39.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""much. Keep in mind we are a very small""" start="00:14:41.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community. The LEM, like I said,""" start="00:14:44.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we are like 345 developers that write""" start="00:14:49.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""packages and answer questions and stuff.""" start="00:14:51.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Now we need users in that way to test things.""" start="00:14:55.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So what is the license of LEM?""" start="00:14:58.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The license of LEM is MAT.""" start="00:15:00.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We have some components of all the various""" start="00:15:02.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""licenses, but the main 1 is MAT.""" start="00:15:04.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I didn't choose the license of it.""" start="00:15:07.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I would highly prefer a more like GPL 1,""" start="00:15:11.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but like I said I'm not a maintainer,""" start="00:15:13.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so the license is MAT.""" start="00:15:15.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""This question, I realize,""" start="00:15:19.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""how far is LEM from being able to remove a""" start="00:15:22.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""list libraries? OK, that's a big question""" start="00:15:26.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""indeed. And Funny enough,""" start="00:15:30.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""2 years ago in the EmacsConf,""" start="00:15:31.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I talk about this, not with LEM,""" start="00:15:34.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but with Common Lisp and Emacs Lisp in""" start="00:15:36.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""general. So I'm not the only 1 thinking about""" start="00:15:41.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this. In fact, I'm talking with someone that""" start="00:15:44.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""is trying to write like a Emacs Lisp""" start="00:15:46.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interpreter to work with them.""" start="00:15:48.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The thing is that Emaclist libraries,""" start="00:15:52.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so the API is just very different.""" start="00:15:55.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's the main problem.""" start="00:15:57.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's really the problem.""" start="00:15:58.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can, so you can, let me see.""" start="00:16:02.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So, you can have an Emacs list buffer of LEM.""" start="00:16:13.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""This is an Emacs list rebel.""" start="00:16:15.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I wrote an LRSP client so you can connect to""" start="00:16:21.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs and send things and stuff.""" start="00:16:23.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you're friends that we share stuff.""" start="00:16:25.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But having a complete Emacless implementation""" start="00:16:28.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with LEM and work with both API will be a""" start="00:16:37.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""huge work. Very like, it's even if they share""" start="00:16:42.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""very similar thing, in fact,""" start="00:16:43.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""API in some places is very similar.""" start="00:16:46.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Down the line infrastructure,""" start="00:16:48.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so the code is, so it's completely different.""" start="00:16:52.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It will be very hard. We do have a clone of""" start="00:16:56.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""maggot that works, more or less.""" start="00:16:58.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, it does work, but maggot's just better.""" start="00:17:01.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But it's getting there.""" start="00:17:03.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So like I said, we're trying to,""" start="00:17:05.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""not to copy one-to-one,""" start="00:17:06.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but to adapting each tool to LEM.""" start="00:17:09.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""How are LEM buffer designs similar to Emacs?""" start="00:17:13.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So yeah, that would be,""" start="00:17:19.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so how a blend buffer design,""" start="00:17:21.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""similar to Emacs. So similar in what way,""" start="00:17:24.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""actually with properties.""" start="00:17:26.319" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think that you've seen,""" start="00:17:29.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so you do have like a font lock,""" start="00:17:31.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""different kind of properties,""" start="00:17:32.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it's not exactly how Emac does it with""" start="00:17:37.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""overlays and stuff. You can,""" start="00:17:41.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so if you're very interested,""" start="00:17:43.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't want to go too much deep into the,""" start="00:17:45.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""let me go to, I don't want to go too much""" start="00:17:51.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""deep into the technicality of things now,""" start="00:17:55.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but you can go. So LEM is written 100% in""" start="00:17:57.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Common Lisp. So if you know Common Lisp,""" start="00:18:00.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can go to buffer. You can check all the""" start="00:18:03.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""codes here. Always we have,""" start="00:18:08.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we also have this, which is like StreamX.""" start="00:18:12.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sorry to that, I don't.""" start="00:18:17.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But yeah, So you can see.""" start="00:18:21.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So yeah, if you go to the code base,""" start="00:18:24.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""maybe some of you can check this problem.""" start="00:18:26.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, not problem, but yeah.""" start="00:18:28.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's this Japanese comment.""" start="00:18:30.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can see here why it's very,""" start="00:18:35.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you have to translate and stuff,""" start="00:18:38.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is sometimes a little bit annoying.""" start="00:18:39.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But yeah, some of them are in English.""" start="00:18:44.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So this play is not the same.""" start="00:18:47.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So if you're interested,""" start="00:18:48.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can go to the buffer and check it out for""" start="00:18:51.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yourself. But I think it uses the overlay in""" start="00:18:53.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""a different way. So the implementation is""" start="00:18:58.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""different that way. Oh,""" start="00:19:04.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: This module. Oh, this is very low.""" start="00:19:10.875" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: this is fairly low. What other things or""" start="00:19:12.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""experiences that I can show you?""" start="00:19:15.559" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Just like you show you.""" start="00:19:15.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Any marks?""" start="00:19:18.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Okay, very interesting question.""" start="00:19:32.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""What are the things...""" start="00:19:34.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So that's interesting.""" start="00:19:37.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Let me see. So forgive me,""" start="00:19:42.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you answered this. I talked briefly in the""" start="00:19:49.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""talk about this, but basically I like""" start="00:19:53.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Komaldisp, I have the mascot here.""" start="00:19:55.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: a very""" start="00:19:58.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: It's Italian thing. I like Common Lisp and I""" start="00:20:04.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""think GmagLisp is a very good friend of""" start="00:20:08.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Common Lisp in the way that Serious Software""" start="00:20:10.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Analysis is a very good uncle.""" start="00:20:11.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Let me answer first the 1.""" start="00:20:18.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I like to extend it in Common Lisp.""" start="00:20:24.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I like the Common Lisp libraries.""" start="00:20:25.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And I think them have a better design in""" start="00:20:30.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""terms of its 1 language,""" start="00:20:31.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which I think is a nice strength.""" start="00:20:33.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Like, 1 of the things that put me off when I""" start="00:20:36.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""was using Emacs, I love to extend the editor""" start="00:20:38.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and to go inside and stuff.""" start="00:20:40.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And 1 of the things that I'm not a big fan of""" start="00:20:43.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""C. If you're a fan of C,""" start="00:20:44.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you will be very pleasant with finding C""" start="00:20:47.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stuff, but I don't. So when I'm trying to""" start="00:20:50.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""hack an Emacs and go inside the things,""" start="00:20:52.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I will control C code.""" start="00:20:54.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's not that interactive as the Emaclist""" start="00:20:56.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""1, and that would be like a fuzzball for me.""" start="00:20:59.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I was always dreaming about that stuff,""" start="00:21:03.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""having like everything in 1 language.""" start="00:21:05.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The thing that LEM does to me is like it""" start="00:21:08.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""allows me to extend the editor to modify""" start="00:21:12.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""also, to modify in Common Lisp.""" start="00:21:14.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Also, I like the language and technology.""" start="00:21:17.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's a bold thing, right?""" start="00:21:19.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's a world language that I love,""" start="00:21:21.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and Emacs that I love.""" start="00:21:23.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs, I'm a big fan of,""" start="00:21:25.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or a user of GNU Emacs.""" start="00:21:27.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And LEM is like Emacs plus Common Lisp,""" start="00:21:29.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but with a different design.""" start="00:21:30.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't want to, It's not a clone.""" start="00:21:32.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I want to get this very clear that LEM is not""" start="00:21:37.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""a clone of Emacs. The sign is very different""" start="00:21:40.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in a lot of ways. But it's very inspired,""" start="00:21:43.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and that cannot be denied.""" start="00:21:44.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 1]: I can jump in for a second.""" start="00:21:48.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think we're like 15 minutes into the lunch""" start="00:21:51.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""break, but you're welcome to continue""" start="00:21:52.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""answering questions. But if anyone on the""" start="00:21:55.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stream or folks want to go grab lunch,""" start="00:21:57.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""feel free to do that. I'm probably going to""" start="00:21:59.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""do that as well. But yeah,""" start="00:22:01.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we can either continue keeping this on the""" start="00:22:03.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stream, or if people would like to come join""" start="00:22:06.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""here on BigBlueButton and talk to Fermin,""" start="00:22:08.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like folks have already done that,""" start="00:22:11.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah, you're welcome to.""" start="00:22:12.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, go ahead. No problem.""" start="00:22:14.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Thank you. Thank you, Vitaliy.""" start="00:22:16.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Cheers. Cheers. So finishing the answer to""" start="00:22:25.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the question, I think LEM does tries to fix""" start="00:22:30.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""some Emacs problems, can we fix problems""" start="00:22:31.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""regarding the internal API,""" start="00:22:35.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which makes sense, right?""" start="00:22:37.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs have like 40 years,""" start="00:22:39.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is a lot. And yeah,""" start="00:22:42.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is, that's what makes me happy.""" start="00:22:44.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I use both now. I use Maggis and Emacs for""" start="00:22:47.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""some languages and then I use LEM for Common""" start="00:22:50.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Lisp and other languages.""" start="00:22:51.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can also use LEM for EmacLisp,""" start="00:22:55.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which makes LEM the second best editor for""" start="00:22:59.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""EmacLisp. It was a funny thing to do.""" start="00:23:02.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""OK, so do you think LEM will continue to have""" start="00:23:05.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""a lot of Japanese documentation?""" start="00:23:06.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So there's not that many Japanese""" start="00:23:11.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""documentation, really.""" start="00:23:12.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So there's a few comments here and there,""" start="00:23:18.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it's not full. We have a web page with a""" start="00:23:20.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""lot of documentation in English.""" start="00:23:22.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you can take a look at that.""" start="00:23:25.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But we do have to improve the documentation""" start="00:23:29.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and translate it to English.""" start="00:23:30.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sasaki-san is up to it,""" start="00:23:32.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but he just doesn't feel that comfortable""" start="00:23:35.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""translating it himself.""" start="00:23:36.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So yeah.""" start="00:23:38.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: So, this is Peter on BigBlueWem.""" start="00:23:42.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah, it's neat that Wem even exists,""" start="00:23:49.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because there's always chatter on the Emacs""" start="00:23:55.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mailing list to rewrite Emacs and some other""" start="00:23:58.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""language. And to see that it's already to see""" start="00:24:03.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that I mean, you have an implementation""" start="00:24:05.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""sitting there and, and the thing I was""" start="00:24:08.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""wondering while I was listening in on the,""" start="00:24:10.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""on the Q and A was do you have Dured?""" start="00:24:14.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Do you have Maggot? And some,""" start="00:24:15.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""somebody else wrote that question into,""" start="00:24:17.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""into Etherpad. But I was happy to see that""" start="00:24:20.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you have Dured or something like it""" start="00:24:22.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""implemented. Because I think that's like the,""" start="00:24:24.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for me, that's the most important thing in""" start="00:24:27.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs because that gets me around in my""" start="00:24:30.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: BRODINKOVICH Yeah, for me too.""" start="00:24:35.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""For me too.""" start="00:24:35.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: Go ahead.""" start="00:24:37.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: system. VICTOR Sorry. Yeah,""" start="00:24:37.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so I may try it out sometime,""" start="00:24:39.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but probably won't be for like 3 or 6 months,""" start="00:24:42.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because there's always a backlog of other""" start="00:24:45.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""things to try out.""" start="00:24:46.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I'm the 1 who wrote that question.""" start="00:24:49.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And do you use, I think you have bookmarks""" start="00:24:54.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and registers, I imagine,""" start="00:24:55.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right?""" start="00:24:55.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I think you have. I never tried bookmarks""" start="00:24:59.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because I don't use it that much.""" start="00:25:01.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But I think you have something like that.""" start="00:25:02.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, I don't. There's a few features that""" start="00:25:05.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't know about them because I don't use""" start="00:25:07.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it much. Some features,""" start="00:25:08.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean. But yeah, I think you have.""" start="00:25:11.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Let me check. We can check,""" start="00:25:13.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""probably. Things in extensions,""" start="00:25:16.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""just directory. VNXT. Directory mode.""" start="00:25:23.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So there is. So this is the Tyrant's friend.""" start="00:25:28.950" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I won't say clone. Very inspired.""" start="00:25:31.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: What about like on the note-taking front,""" start="00:25:36.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like org mode,""" start="00:25:38.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: You know. note... Yes,""" start="00:25:41.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so... EMMS... Yes, so someone did some MMS.""" start="00:25:50.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So not MMS, not much. So package for LEM that""" start="00:25:58.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""is now in a pull request,""" start="00:26:00.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think. But yeah, no.""" start="00:26:03.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The thing is I don't use R mode that much.""" start="00:26:06.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We don't have a heavy R mode user to provide""" start="00:26:11.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""some major mode and stuff.""" start="00:26:15.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So we don't have that implemented yet.""" start="00:26:18.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The thing is, my plans for,""" start="00:26:20.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I do have plans for our mode.""" start="00:26:22.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""They're a little bit evil,""" start="00:26:24.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but there's plans for it.""" start="00:26:26.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I'm planning to use,""" start="00:26:27.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so rewriting our mode is a big task that I""" start="00:26:30.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""don't want to do. So I'm going to use Emacs""" start="00:26:34.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for our mode in 2.11. I wrote a recipe,""" start="00:26:39.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""no, a remote procedural RPC that I'm using""" start="00:26:45.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for the Red Bull and stuff.""" start="00:26:46.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And I'm planning to have an Emacs Puppet to""" start="00:26:51.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""provide me the functionality for Org Mode.""" start="00:26:54.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I know for me, when I write notes,""" start="00:26:59.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I like to note more than Org Roam just""" start="00:27:01.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because I feel Org Mode is great and all,""" start="00:27:06.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but if all my notes are in it,""" start="00:27:08.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I kind of feel trapped by it.""" start="00:27:10.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I did the talk journaling in KOutline,""" start="00:27:14.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and I like that package better for some""" start="00:27:17.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""things and it's like if I want to put like""" start="00:27:21.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the tags on PDF file names and so it's like""" start="00:27:24.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah, it's great and all but it's also Is""" start="00:27:28.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that part of the motivation of wanting to use""" start="00:27:31.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""lamb is so you feel less entrapped by emacs""" start="00:27:34.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No, I will say I don't no.""" start="00:27:38.445" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: No, no. I was very happy trapping to Emacs.""" start="00:27:40.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""To be fair. The thing is I don't use Hormel""" start="00:27:47.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that much. That's just the reality.""" start="00:27:48.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Org Mode for me is a very good markup""" start="00:27:52.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""language, but not that much really.""" start="00:27:54.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I know that Org Mode has a lot of people and""" start="00:27:56.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's used by a lot of people.""" start="00:27:58.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And there's very interesting packages.""" start="00:28:00.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: What about org mode versus markdown versus""" start="00:28:03.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""plain text versus latex then?""" start="00:28:05.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I like org mode because of the Emacs""" start="00:28:08.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""functionality. I think if you take that away,""" start="00:28:10.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you plain or mode versus Markdown,""" start="00:28:15.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't think there's that much difference,""" start="00:28:17.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""if you take the Emacs functionality away.""" start="00:28:19.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I like the""" start="00:28:24.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah. Emacs syntax more than Markdown.""" start="00:28:27.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Like, for instance, you have the double""" start="00:28:29.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""square brackets, which is simpler for me to""" start="00:28:31.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""look at, but.""" start="00:28:32.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I guess it's a matter of,""" start="00:28:35.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, we don't have yet a major mode of R""" start="00:28:38.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mode, which will be quite trivial.""" start="00:28:39.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, you know, a simple syntax highlights,""" start="00:28:42.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you know, R mode in LEM,""" start="00:28:46.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because no 1 wrote it.""" start="00:28:52.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, that's the way with this project,""" start="00:28:55.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right? If you need people to be motivated to""" start="00:29:00.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""do that. And with LEM,""" start="00:29:04.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""someone asked about the Japanese.""" start="00:29:06.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think they're interested about that.""" start="00:29:11.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""LEM does have a thing,""" start="00:29:15.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: If the it would be good.""" start="00:29:16.030" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I'd be able to do more,""" start="00:29:16.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but that's what I""" start="00:29:18.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: was doing.""" start="00:29:19.370" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: they think True. So, for example,""" start="00:29:22.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""we're using another big fan of...""" start="00:29:24.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, I know that the main people that may""" start="00:29:27.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""use in the future LEM are EMACLIS people.""" start="00:29:30.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""A lot of them. It's very similar.""" start="00:29:33.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And Sasaki-san and the LEM community mainly""" start="00:29:37.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""uses Discord for chat and stuff.""" start="00:29:43.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, we do have matrix,""" start="00:29:46.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and I should connect to it,""" start="00:29:48.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""by the way. But we mainly use Discord,""" start="00:29:54.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which I don't think is a good thing.""" start="00:29:58.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, to have the main communication""" start="00:30:01.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""channels, Discord. Because,""" start="00:30:05.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""well, it's Discord. It's a closed source""" start="00:30:09.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""application that is easy for some people,""" start="00:30:13.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but for some people it's a tailbreak.""" start="00:30:14.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: are in""" start="00:30:17.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Especially people that the Emacs community""" start="00:30:17.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that very like free software.""" start="00:30:20.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: The only good thing about Molesley is it's""" start="00:30:22.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""popular, but as soon as you break out of that""" start="00:30:26.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mold, all of a sudden it becomes a lot""" start="00:30:28.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""harder. For instance, they don't have...""" start="00:30:30.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""All the third-party clients are unofficial""" start="00:30:33.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and according to their terms of service they""" start="00:30:37.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""can just can you. Which is not a nice""" start="00:30:40.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""position to be in if you're trying to use it""" start="00:30:44.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and you wanted to be a moderator using some""" start="00:30:47.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""side tools that weren't Discord.""" start="00:30:50.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I agree 100% and in fact I'm not a big fan,""" start="00:30:55.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't like Discord.""" start="00:30:56.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 5]: You mentioned the RPC you did between Emacs""" start="00:31:03.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and the LEM. Do you have it published""" start="00:31:06.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""somewhere?""" start="00:31:06.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yes, it's in the LEM project.""" start="00:31:13.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'll copy that in the chat.""" start="00:31:15.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 5]: Okay, because I'm always interested in how""" start="00:31:19.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you do like the communication with other""" start="00:31:21.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""programs with Emacs because that's""" start="00:31:24.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interesting.""" start="00:31:24.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I'm only using the porthole package,""" start="00:31:30.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm not writing it from scratch,""" start="00:31:32.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""not that much as a developer.""" start="00:31:34.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 5]: So I don't know this package.""" start="00:31:37.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Maybe that's the thing I can learn.""" start="00:31:39.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh yeah, probably if you,""" start="00:31:40.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah. Yeah. If you want to,""" start="00:31:42.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so I didn't see this 1,""" start="00:31:43.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this package for the RSP,""" start="00:31:46.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which make is monthly automatically.""" start="00:31:48.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 5]: And how do you do, how do you plan to""" start="00:31:53.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""integrate Org Mode? Because Org Mode needs to""" start="00:31:59.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""work on.""" start="00:31:59.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: This way? Yes, so I'm planning to have like a""" start="00:32:03.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs puppet and to have like a clone buffer""" start="00:32:08.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""from the buffer that you do in LEM and then""" start="00:32:11.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the command sent into the Emacs hidden buffer""" start="00:32:16.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and then the changes go back to LEM to change""" start="00:32:19.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the buffer of LEM. That's my idea.""" start="00:32:22.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 5]: Okay, that's all. It's interesting.""" start="00:32:24.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Would be interesting to see what comes from""" start="00:32:28.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it.""" start="00:32:28.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: It's a bit, it's a hackish 100%.""" start="00:32:32.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's not, you have to duplicate the""" start="00:32:35.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""information and stuff,""" start="00:32:36.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is, oh, by the way,""" start="00:32:38.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm going to pass the Lemington,""" start="00:32:40.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is the name of the RSP clone.""" start="00:32:43.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sorry, the integration with Emacs,""" start="00:32:45.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is LEM with a mustache.""" start="00:32:48.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: They had good news where it would do the same""" start="00:32:54.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""thing, where it would open up a slave Emacs,""" start="00:32:56.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because it was such a performance hog for""" start="00:33:00.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""retrieving all the emails.""" start="00:33:02.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: No. I mean, Emacs have a server,""" start="00:33:06.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right? I can, in fact,""" start="00:33:08.559" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm using that for, I'm already puppeting.""" start="00:33:11.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, not puppeting. I'm already using""" start="00:33:13.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Maggots. So I have this.""" start="00:33:15.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Actually, let me copy.""" start="00:33:17.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I have this, which is usually a little bit,""" start="00:33:25.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm launching the Emacs daemon and then I'm""" start="00:33:28.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""launching Leviton. And then this is the kill""" start="00:33:31.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and this is the status,""" start="00:33:32.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is basically saying,""" start="00:33:33.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""run this and this is this,""" start="00:33:36.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is run maggot in this file.""" start="00:33:42.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""If you put it side by side,""" start="00:33:43.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you will check instantly that this is the""" start="00:33:48.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""buffer directory, LEM home,""" start="00:33:50.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and then the current file.""" start="00:33:54.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Because I'm launching it with the file.""" start="00:33:58.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So buffer directory, which is the directory""" start="00:34:03.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""of the buffer. So I'm already using maggot as""" start="00:34:09.239" video="qanda-emacsen" id="subtitle"]] +[[!template text="""a tool outside of LEM,""" start="00:34:13.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because I really like maggot.""" start="00:34:14.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And this is very easy to check.""" start="00:34:16.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Launch Emacs daemon. Okay.""" start="00:34:22.719" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And then I go to local projects.""" start="00:34:28.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Let's go to another 1 that is not LEM.""" start="00:34:31.719" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: You actually have weird ideas like running it""" start="00:34:37.199" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in daemon mode so you don't ever have to""" start="00:34:39.639" video="qanda-emacsen" id="subtitle"]] +[[!template text="""restart it or the images,""" start="00:34:40.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I guess, that LEM has.""" start="00:34:43.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: LEM does not have this kind of,""" start="00:34:46.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I will call it, it doesn't have like a demon""" start="00:34:53.719" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mode, so you have control separately,""" start="00:34:56.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but keep in mind that LEM,""" start="00:34:58.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's a common list program.""" start="00:35:01.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So if you use slime or Sly,""" start="00:35:03.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you can easily connect to them to hack on it.""" start="00:35:10.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: ever use that functionality,""" start="00:35:12.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like using it from another computer?""" start="00:35:14.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Do you Another computer,""" start="00:35:16.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think the same computer,""" start="00:35:17.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or maybe Sage, but yeah,""" start="00:35:21.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's very...""" start="00:35:21.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Or from like your window,""" start="00:35:24.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""if you were using the window...""" start="00:35:26.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I can't remember the name of the window""" start="00:35:28.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""manager. Or if you were using...""" start="00:35:30.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""What? Yeah, yeah. Or using like stump,""" start="00:35:36.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""calling it from like stump WM or how often do""" start="00:35:40.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you use that REPL?""" start="00:35:41.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: SPCL? No. ThumbWM? I use it quite a lot.""" start="00:35:43.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I connect to a museum,""" start="00:35:44.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""some WM right now, and I use LEM to connect""" start="00:35:49.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to it, but I was using Emacs before.""" start="00:35:52.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And you can use Sly or Slime to connect to""" start="00:35:55.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""LEM. So the thing that is in Common List""" start="00:35:58.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""makes it this kind of already out-of-the-box""" start="00:36:00.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""connectivity between different...""" start="00:36:04.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: How many window managers have you used?""" start="00:36:06.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I've used that before.""" start="00:36:11.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I've also used, like right now I'm using""" start="00:36:13.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Sway. I've used Xmonad,""" start="00:36:14.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""DWM.""" start="00:36:16.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: This is awesome. What is the other 1?""" start="00:36:23.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I can't remember the name.""" start="00:36:25.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But it was like a few years ago.""" start="00:36:27.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I've been doing some DWM for like the last""" start="00:36:30.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I remember that. Go ahead.""" start="00:36:36.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: year, I think. Or 3. know,""" start="00:36:37.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's that I was... I don't know.""" start="00:36:41.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't a couple""" start="00:36:43.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I'd like to have of days of my...""" start="00:36:44.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I remember that that window manager seemed to""" start="00:36:48.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""have some unique ideas that weren't""" start="00:36:53.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""necessarily available on like EWM and XMLNAD.""" start="00:36:56.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: So SoundLM, it's an interesting project.""" start="00:37:02.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But for example, I'll change...""" start="00:37:05.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I don't have in this computer,""" start="00:37:06.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but in my other computer,""" start="00:37:08.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I change the mod line or bar,""" start="00:37:13.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""top bar, whatever, because the ThunderLVM""" start="00:37:18.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""doesn't only update it when you click,""" start="00:37:21.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or you do some events or happen 1 minute.""" start="00:37:25.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you can see here, this is not changing""" start="00:37:27.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""until I click.""" start="00:37:28.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: That's it.""" start="00:37:33.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: AUDIENCE 1 Matthew, sorry.""" start="00:37:34.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I have a quick question for Matthew.""" start="00:37:36.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So is your talk going to be posted or did you""" start="00:37:43.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Go ahead. I gave them a recording.""" start="00:37:47.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""My talk was the K outline for journaling""" start="00:37:50.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: give it live? right right it was I woke up""" start="00:37:53.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""too late for it Sorry,""" start="00:37:54.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so I came in and I just saw Bob Weiner""" start="00:37:58.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""answering questions So is your talk going to""" start="00:38:03.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""be on the page for your talk?""" start="00:38:06.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't""" start="00:38:07.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: see it there.""" start="00:38:08.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I could give you a link to it,""" start="00:38:11.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because I had, I hosted it on Mega to give it""" start="00:38:17.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to them, because when I emailed it,""" start="00:38:18.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh, okay. Is it""" start="00:38:22.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: it didn't work. on a monkey?""" start="00:38:22.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Download and watch it.""" start="00:38:23.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm probably going to post it on YouTube""" start="00:38:29.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""later. I, I had my face record with it,""" start="00:38:33.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I never got it edited together in time""" start="00:38:36.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 3]: Okay, if you could if you can put the link""" start="00:38:40.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""onto the onto the ether pad or something or""" start="00:38:43.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""onto the wiki then then I can find it and""" start="00:38:46.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""check it out. All right,""" start="00:38:49.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""thanks. Sorry to interrupt your time,""" start="00:38:53.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Fermin, but I figure we're heavily into the""" start="00:38:56.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""break anyways. FERMIN GENZIERIA-CHAPMANI""" start="00:38:57.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: No problem. I'm in an EMAX conference talking""" start="00:39:00.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""about all that I mean I'm already doing""" start="00:39:02.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""blasphemy so I""" start="00:39:04.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""think that's oh yeah notes so the thing is""" start="00:39:24.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""then as my point of view,""" start="00:39:26.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and the point of view probably of Sasaki-san,""" start="00:39:28.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""just a moment, I think,""" start="00:39:30.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""is very focused on an IDE more than a""" start="00:39:34.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""node-taking editor. More like an integrated""" start="00:39:40.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""development environment.""" start="00:39:41.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So node is like a second thing.""" start="00:39:45.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So not exactly the main focus.""" start="00:39:51.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And I know that Emacs does have a very strong""" start="00:39:54.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community of Ormode users that use Emacs for""" start="00:39:58.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Ormode, which is the killer feature,""" start="00:40:00.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""1 of I'll do a feature.""" start="00:40:01.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'll do a feature of Emacs.""" start="00:40:04.456" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I'm not the maintainer of porthole.""" start="00:40:09.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm sorry. I did add it to so I don't""" start="00:40:20.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""maintain the remote. I'm sorry,""" start="00:40:22.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'll pothole the USB. I'm only using it on""" start="00:40:27.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the Lamington. I cannot change anything.""" start="00:40:31.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: What are some interesting things you have""" start="00:40:39.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with your window manager?""" start="00:40:40.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I do have elsewhere.""" start="00:40:43.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I can connect to it and hack it from my""" start="00:40:49.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""editor, which I think is really fun.""" start="00:40:53.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The way I can write, so I wrote a few""" start="00:40:56.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""packages for Soundallium.""" start="00:40:58.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So 1 of them is Proton,""" start="00:41:06.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which basically launches like a...""" start="00:41:10.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So Proton is like this wine thing that Valve""" start="00:41:18.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, I'm a user.""" start="00:41:22.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: did. OK, so this basically,""" start="00:41:24.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you have like a list of,""" start="00:41:26.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""let me check. No, we're just,""" start="00:41:32.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""sorry. This, So these all games are bought by""" start="00:41:38.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""me. They're not pirates in any way.""" start="00:41:41.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I can use this to to launch it.""" start="00:41:45.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Was that Dmenu or was that StumpWM menu?""" start="00:41:50.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: This is Dmenu. So I have,""" start="00:41:54.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I also contribute the Dmenu integration into""" start="00:42:02.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""StumwM. So I use Dmenu.""" start="00:42:05.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So like this, right?""" start="00:42:07.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah that's pretty cool.""" start="00:42:13.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You don't know how nice those things are""" start="00:42:15.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""until you start using those.""" start="00:42:16.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: The menu is very interesting and very...""" start="00:42:21.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Also I was using RoFi,""" start="00:42:24.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but...""" start="00:42:25.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I was also more... The other thing I was more""" start="00:42:29.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""mentioning is that also,""" start="00:42:31.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""being able to use D-Menu,""" start="00:42:32.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but being able to just have keyboard""" start="00:42:34.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""oriented? Everything fuzzy search narrowed""" start="00:42:38.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and No tabs no status bars like all of a""" start="00:42:45.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""sudden your mental model on how your computer""" start="00:42:47.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""operates goes through the roof and a lot of""" start="00:42:51.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs users Know what that is like Especially""" start="00:42:57.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""In conjunction with a window manager?""" start="00:43:01.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I think so. I remember when I was...""" start="00:43:06.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So for me, I tried the Emacs window manager,""" start="00:43:11.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it wasn't for me. Having a single thread""" start="00:43:16.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""window manager is scary.""" start="00:43:18.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And also games and some stuff wasn't working""" start="00:43:22.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""correctly, which it makes sense in some""" start="00:43:25.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""regards, using Emacs for window manager.""" start="00:43:27.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Oh""" start="00:43:30.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I've used it before I found that it wasn't as""" start="00:43:34.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like it. It's not as bad in practice because""" start="00:43:39.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The paper cuts you don't like to hit them""" start="00:43:43.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""every day So you make sure So you make sure""" start="00:43:45.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""your Emacs config is a lot nicer and doesn't""" start="00:43:48.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""have those slowdowns. Or you avoid those""" start="00:43:51.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""things. It forces you to make your Emacs""" start="00:43:54.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""config a lot more robust to speed.""" start="00:43:59.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, yeah. That's true,""" start="00:44:02.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah. The thing, yeah,""" start="00:44:04.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but still, I don't know,""" start="00:44:05.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: You'll still get the paper cuts,""" start="00:44:08.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but...""" start="00:44:09.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: like... Yeah, and my experience was not""" start="00:44:12.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""great. I'm not a person,""" start="00:44:16.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like, I don't want to have...""" start="00:44:17.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Not with LEM or Emacs.""" start="00:44:19.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I like to have different programs.""" start="00:44:22.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't want to like, I never was in like""" start="00:44:25.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs or you know, only Emacs.""" start="00:44:28.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I really love Emacs, GNU Emacs,""" start="00:44:30.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but only Emacs? No, no,""" start="00:44:33.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I like my browser, I like my,""" start="00:44:35.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you know, my Windows Manager,""" start="00:44:37.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""my, you know, I wasn't Emacs only.""" start="00:44:41.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs is my OS. Some people are,""" start="00:44:45.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is good. Different kind of a...""" start="00:44:48.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I have to say that I come from Vim,""" start="00:44:51.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like a long time ago. But I come from Vim,""" start="00:44:57.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so I'm using Evil Mode.""" start="00:44:58.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And I maybe have this kind of a...""" start="00:45:00.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah. So regarding Summoner.vm,""" start="00:45:05.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's... I like it because it's common Lisp,""" start="00:45:10.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it don't have some,""" start="00:45:13.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this, I removed this. So I'm using another""" start="00:45:18.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""model line because the model line is not""" start="00:45:21.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""great. Everything else is a little bit weird""" start="00:45:24.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because you have frames similar to Emacs.""" start="00:45:28.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You have a frame. You have this window,""" start="00:45:33.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and then there's no nothing here.""" start="00:45:35.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, I've used it before.""" start="00:45:37.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That was definitely weird.""" start="00:45:39.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's also nice to be able to just...""" start="00:45:41.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Can't you put multiple windows?""" start="00:45:43.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Can't you duplicate windows?""" start="00:45:46.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Show the same window in 2 frames?""" start="00:45:48.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""NIGEL""" start="00:45:48.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: GANSZELA-WALSH Never tried that.""" start="00:45:51.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Never occurred to me that.""" start="00:45:54.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't know. Never tried that,""" start="00:45:57.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to be honest. Let me check.""" start="00:46:01.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No idea. Item? I think so.""" start="00:46:07.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Because when you try to,""" start="00:46:10.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""at least not in an easy way.""" start="00:46:11.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""When you try to, so if I try to put a window""" start="00:46:13.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""here, let me move it so it,""" start="00:46:16.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and if I try to like, so it's,""" start="00:46:20.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah, no other window.""" start="00:46:21.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: So can you open the, what is that,""" start="00:46:24.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""discord or your browser?""" start="00:46:25.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Could you open that in both your frames?""" start="00:46:26.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I can I Side by side, but not the same""" start="00:46:34.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: I mean I do I can I can have I know""" start="00:46:37.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: can't your frames? 2 browsers you can do that""" start="00:46:38.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: browser I never occurred to me that,""" start="00:46:42.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: in DWM? You can't do that in XMLNet,""" start="00:46:46.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""at least I don't know what configuration""" start="00:46:48.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you'd have to do to get to be able to do that""" start="00:46:50.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in XMONAD.""" start="00:46:51.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: wow. Interesting. Maybe you can.""" start="00:46:54.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I never tried. Maybe you can?""" start="00:46:57.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No idea. The interesting thing that I never""" start="00:47:03.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""use is that floating windows.""" start="00:47:05.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Never use floating windows,""" start="00:47:09.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but normal windows. You know,""" start="00:47:13.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""not. And SoundWM does have a weird support""" start="00:47:17.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for it. Now it works. But I don't like it.""" start="00:47:24.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""For me, it was a little bit rough,""" start="00:47:26.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the use of floating windows in SoundWM.""" start="00:47:29.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think they're way better now.""" start="00:47:32.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think, but yeah, I don't use it so...""" start="00:47:36.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But there is.""" start="00:47:40.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: You know, for me with the,""" start="00:47:43.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like, Emacs doing everything,""" start="00:47:45.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it's like, you got like Emacs,""" start="00:47:46.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you got shell, and then you got the gooey""" start="00:47:50.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Wild West. Yeah. Like,""" start="00:47:56.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with Emacs, I know, I'll generally get,""" start="00:47:58.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""oh, this is going to be configured in?""" start="00:48:01.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's either gonna be shell script,""" start="00:48:04.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Python or Emacs. Oh wait,""" start="00:48:06.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""no, it's gonna be Emacs.""" start="00:48:07.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Variable's gonna be written in SecQ,""" start="00:48:09.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""period.""" start="00:48:10.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, I don't use too much scripting,""" start="00:48:16.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I'd like to, for example,""" start="00:48:18.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I had to do a, so the automatic installer""" start="00:48:21.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for, for Debian base, Debian stuff for Linux""" start="00:48:26.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for, for LEM. I was thinking of doing in bash""" start="00:48:30.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and I say, I don't want to do it in Bash.""" start="00:48:32.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I just did it in SVC and Commodisp,""" start="00:48:35.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which does have like a scripting feature.""" start="00:48:37.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You can put a script and it will create your""" start="00:48:40.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""own script.""" start="00:48:41.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: 1 of the main people behind Next,""" start="00:48:45.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""he did a talk on using Common Lisp as a""" start="00:48:50.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""replacement for a shell.""" start="00:48:51.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yes, it was... I know him.""" start="00:48:58.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I know that he exists.""" start="00:49:00.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Next, I think it's a main maintainer of Nix,""" start="00:49:04.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, although his website's kind of,""" start="00:49:09.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think he took it down.""" start="00:49:10.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Ambrevar. Yeah, I think he,""" start="00:49:12.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah, he took it down.""" start="00:49:14.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: So if you want to, you can look at it in Time""" start="00:49:17.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Machine.""" start="00:49:17.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I do have that article in my bookmarks,""" start="00:49:23.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think, somewhere. I remember reading that.""" start="00:49:26.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So also, I would like to keep separated""" start="00:49:30.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""things in that way to have shell and then""" start="00:49:32.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Emacs or LEM. Like for Emacs I use Viter.""" start="00:49:37.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't like that it has different,""" start="00:49:40.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you know.""" start="00:49:41.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: On the same time though,""" start="00:49:44.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I also don't like my terminal not to be able""" start="00:49:46.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to click URLs and I like I like my terminal""" start="00:49:52.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to have history and you know to scroll""" start="00:49:54.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""position copy paste You can do some of that""" start="00:49:58.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stuff, but you know how that stuff go on the""" start="00:50:00.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""killer ring I kind of view it as like an""" start="00:50:01.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""alternative to shell.""" start="00:50:02.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Fair enough, but I think when some for my""" start="00:50:06.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""terminal, I only use it for navigate,""" start="00:50:08.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""remove stuff, so basic stuff.""" start="00:50:11.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""When I have to like, I don't know,""" start="00:50:14.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""edit something, just open the...""" start="00:50:17.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I like to use completion and narrowing to""" start="00:50:22.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""find my files. I kind of wish I could do that""" start="00:50:24.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: on the shell or like if you use""" start="00:50:26.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: more D-Menu to do that.""" start="00:50:27.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That would be, I'm sure,""" start="00:50:28.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""nicer.""" start="00:50:28.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: There's a lot of tools for terminals to do""" start="00:50:38.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that, right? But you have to configure all of""" start="00:50:39.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""them. Beam users are very aware of those""" start="00:50:41.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""tools. You know, having very good fuzzy""" start="00:50:46.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""finding of files and then all by the""" start="00:50:49.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""terminal. I do have a friend who is a user of""" start="00:50:53.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the Forbidden Editor, he's good,""" start="00:50:56.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that does have a lot of small,""" start="00:51:01.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like fuzzy finding, and so complete commands,""" start="00:51:09.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and call those images in the terminal,""" start="00:51:12.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""all sorts of crazy stuff.""" start="00:51:14.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That I think are not overkill,""" start="00:51:16.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I mean, if you want to use it,""" start="00:51:20.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""go ahead. So yeah. The thing is that,""" start="00:51:29.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So trickling back a little bit to LEM,""" start="00:51:32.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think an interesting thought that I have""" start="00:51:35.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""about LEM and I can do Emacs.""" start="00:51:37.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Not now, because LEM is a very small,""" start="00:51:40.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like literally people,""" start="00:51:43.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""at least developers and users,""" start="00:51:46.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I don't know, maybe 10 less.""" start="00:51:50.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But people may think, split the community,""" start="00:51:56.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""right? That's the main thing that should come""" start="00:51:58.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to my mind, split the community,""" start="00:51:59.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""maybe you, because that's true.""" start="00:52:01.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I mean, I'm not developing that much in Nui""" start="00:52:04.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""MacLisp because I'm developing them.""" start="00:52:06.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's not that I'm a force that you might""" start="00:52:12.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""think exists or anything,""" start="00:52:13.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but you know, you're splitting a very small""" start="00:52:17.220" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community. Not that LEM wants to do that or""" start="00:52:21.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""anything, or will be able to in any way,""" start="00:52:24.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but you know what I mean.""" start="00:52:25.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I thought about that, And I think it's an""" start="00:52:32.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interesting concern. But that concern also""" start="00:52:40.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""stops innovation in some way.""" start="00:52:42.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I think you can, if you look at the example""" start="00:52:46.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""of how many EMAX talks are related to""" start="00:52:50.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""knowledge management and not all and like for""" start="00:52:54.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""instance denote and Orgrim don't really work""" start="00:52:57.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""together all that well they split the""" start="00:53:01.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community so to say I don't think they make""" start="00:53:03.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it weaker at all, though.""" start="00:53:04.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think you were saying competition is good,""" start="00:53:08.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but yeah, competition is good.""" start="00:53:10.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I agree on that.""" start="00:53:12.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I want to put it in the...""" start="00:53:13.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But, you know, I'm doing the devil's advocate""" start="00:53:15.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: something, that's... The developer gates in""" start="00:53:18.252" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this regard. Like""" start="00:53:18.308" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: in this regard. If someone wants to say if""" start="00:53:18.327" video="qanda-emacsen" id="subtitle"]] +[[!template text="""someone wants to like say something that""" start="00:53:19.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""maybe, you know, because some people still""" start="00:53:22.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""remember the Emacs versus X Emacs thing in""" start="00:53:30.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the past, you know, that the split of the and""" start="00:53:34.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That was good in some way but also bad in""" start="00:53:38.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""others like the compatibility was a little""" start="00:53:39.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""bit of a hell You know at the end Emacs""" start="00:53:42.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""failed, no Emacs But at that time it wasn't""" start="00:53:46.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that clear and some people like it wasn't""" start="00:53:50.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""there. And I can understand that kind of a""" start="00:53:53.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""feeling.""" start="00:53:53.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Well sometimes the steps forward you end up""" start="00:53:58.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""going Like you're on a hill and you want to""" start="00:54:02.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: the way the path to get up to""" start="00:54:05.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: get to a higher hill, but that higher hill""" start="00:54:06.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""goes down and up. It doesn't mean that even""" start="00:54:10.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""if you know you're going down,""" start="00:54:12.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it doesn't mean that it was a mistake.""" start="00:54:13.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay, fair enough. And also another""" start="00:54:19.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interesting thing that I want to envision in""" start="00:54:22.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the future, if I have time or someone wants""" start="00:54:25.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to help me with, is I want them to have""" start="00:54:28.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""different language for extension,""" start="00:54:30.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""different Lisp for extension,""" start="00:54:32.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""not only common Lisp, but Scheme closure.""" start="00:54:36.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And maybe not EmacLisp probably,""" start="00:54:39.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: that what Guile Emacs is trying to do?""" start="00:54:46.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: but yeah. And funny enough- Isn't Guile Emacs""" start="00:54:47.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""tried to add Guile support to,""" start="00:54:50.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but Guile is not scheme.""" start="00:54:52.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, it's kind of scheme,""" start="00:54:53.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but it's not all schemes,""" start="00:54:54.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is, you know, and it was just to""" start="00:54:58.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""replace EmacLisp with Gile.""" start="00:55:02.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You have 2 both. It was similar in that way,""" start="00:55:06.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but the thing is, Common Lisp does have a lot""" start="00:55:12.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""of interesting things.""" start="00:55:12.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So someone wrote a closure in Common Lisp.""" start="00:55:16.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Which is called Cloture.""" start="00:55:20.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Someone wrote, well it's on the way but it's""" start="00:55:29.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""getting there, a standard scheme in Common""" start="00:55:35.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Lisp. So to add support to LEM,""" start="00:55:39.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""will be as easy as import package,""" start="00:55:44.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and you have, And if that language,""" start="00:55:46.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which usually does, supports very well""" start="00:55:49.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""interaction between the host language and the""" start="00:55:51.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""language that tries to provide,""" start="00:55:52.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you will mostly automatically have new""" start="00:55:57.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""language for the editor.""" start="00:55:58.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I think the more interesting hanging fruit""" start="00:56:05.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""would be like using Next to scrape websites,""" start="00:56:09.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""download CSV bank statements,""" start="00:56:12.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""integrating with like password managers and""" start="00:56:15.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or using... yeah you could still do with""" start="00:56:27.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: But isn't that more like next thing oh yeah""" start="00:56:30.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah I""" start="00:56:31.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: common list though mean what's your your""" start="00:56:32.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""other options would be Selenium,""" start="00:56:34.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""JavaScript, Next already gives you the REPL""" start="00:56:41.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for that. Or when you had that Ambryvar talk,""" start="00:56:47.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""when he, I don't know if you watched it,""" start="00:56:50.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but when you use a shell and a command takes""" start="00:56:52.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""takes a while It just automatically takes you""" start="00:56:56.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""back into your shell and says I'll just let""" start="00:56:58.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""this run in the background or being able to""" start="00:57:00.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""more easily run commands in parallel.""" start="00:57:02.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: But that's not like Nix stuff,""" start="00:57:13.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: The Ambrivar, the shell 1,""" start="00:57:18.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: right? Not like? When he did it,""" start="00:57:21.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""he. Because 1""" start="00:57:23.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: wasn't. of the things He did in that when he""" start="00:57:25.340" video="qanda-emacsen" id="subtitle"]] +[[!template text="""was using the repl in place of the shell is 1""" start="00:57:30.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""of the things in there was if,""" start="00:57:31.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""let's say you were compiling a program,""" start="00:57:33.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that takes a while. If it took longer than""" start="00:57:36.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like 3 seconds or something along those""" start="00:57:40.240" video="qanda-emacsen" id="subtitle"]] +[[!template text="""lines, it would kick you back into the shell""" start="00:57:42.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and say, oh, we're waiting for this program""" start="00:57:44.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, interesting. And""" start="00:57:48.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: to run, to finish. then you could,""" start="00:57:48.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""and then it had back reference support.""" start="00:57:51.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you could say, Oh, app search for this""" start="00:57:55.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""program. And then with the,""" start="00:57:58.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with the shell, I, when I want to search,""" start="00:58:00.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'll then grep through that list to narrow it""" start="00:58:04.460" video="qanda-emacsen" id="subtitle"]] +[[!template text="""down even further, but I do a whole new""" start="00:58:06.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""search. It just says, oh,""" start="00:58:08.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""just grep through what I already searched.""" start="00:58:10.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Just grep through the results of the command""" start="00:58:14.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""that's 3 commands ago.""" start="00:58:15.940" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Interesting. So it""" start="00:58:17.980" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: runs instantly. Or look for my build errors""" start="00:58:23.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in my compilation output,""" start="00:58:25.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: rather than trying to build it again grepping""" start="00:58:29.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""for the errors.""" start="00:58:30.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I was checking, so where's that project?""" start="00:58:33.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I was looking for it. You know,""" start="00:58:36.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the... Yeah, I want to check the,""" start="00:58:44.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: There was a talk. I also had a webpage.""" start="00:58:48.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: you know... This red bull?""" start="00:58:55.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""No, this is not what I meant.""" start="00:58:58.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: What is it? What is it?""" start="00:59:34.174" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I cannot find the... I was trying to find""" start="00:59:47.664" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: the repo for... It's C-L-E-S-H,""" start="00:59:54.180" video="qanda-emacsen" id="subtitle"]] +[[!template text="""like a unit shell for interface with for""" start="00:59:59.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""common Lisp? Is that the thing?""" start="01:00:02.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't know. I'm""" start="01:00:09.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: trying to find the link to his old,""" start="01:00:12.260" video="qanda-emacsen" id="subtitle"]] +[[!template text="""no longer website. Website.""" start="01:00:16.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Skip. Technical issues.""" start="01:00:21.500" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Maybe this 1.""" start="01:00:23.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I cannot find it.""" start="01:00:35.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I got it.""" start="01:00:37.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: Go to that link. Okay.""" start="01:00:51.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: There's also a FOSDM target associated with""" start="01:01:02.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it too.""" start="01:01:02.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh yeah, interesting. Clash and CH.""" start="01:01:07.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""CH. Oh, I was looking at the clesh.""" start="01:01:13.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Clish, so the, let's check for it.""" start="01:01:18.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The other 1 is shell and camel.""" start="01:01:23.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""This 1.""" start="01:01:24.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: Interesting. Oops. Close Oops.""" start="01:01:37.505" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, it's a GNU project.""" start="01:01:40.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Oh, interesting.""" start="01:01:44.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: The other thing that was interesting there is""" start="01:01:51.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you use those disk images,""" start="01:01:52.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""LISP images, to have some of your common LISP""" start="01:02:00.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""utilities or programming libraries that you""" start="01:02:05.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""utilize in tandem with your REPL.""" start="01:02:07.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So you can easily pull up a more featureful""" start="01:02:13.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""or a REPL that has more tools in it than by""" start="01:02:18.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""default.""" start="01:02:18.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Interesting. So yeah, that's,""" start="01:02:21.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""yeah, I mean, that will be,""" start="01:02:24.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it will be fairly, no,""" start="01:02:26.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""no, easy. Well, easy, but not,""" start="01:02:28.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But this can be integrated into LEM probably.""" start="01:02:33.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Very, you know, not that easy because you""" start="01:02:36.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""have to change the few things.""" start="01:02:38.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""But this can be, you know.""" start="01:02:43.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Well, as example, he just...""" start="01:02:47.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Well, 1 of the things that was in the talk,""" start="01:02:49.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""1 of the main ideas was,""" start="01:02:51.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""let's just, rather than trying to make the""" start="01:02:56.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""shell closer to a REPL,""" start="01:02:57.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""let's make a REPL closer to a shell,""" start="01:03:00.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""make it to where we can easily run Linux""" start="01:03:03.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""programs in it, and then use the rest of the""" start="01:03:07.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""REPL goodness, make it to where parentheses""" start="01:03:10.120" video="qanda-emacsen" id="subtitle"]] +[[!template text="""are easy to use, like paraedit,""" start="01:03:12.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And then all of a sudden you have a nicer""" start="01:03:20.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""shell. Not really shell,""" start="01:03:24.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but.""" start="01:03:24.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, this is huge.""" start="01:03:30.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 6]: Hi, folks. Sorry for the interruption.""" start="01:03:33.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's Leo from the general track.""" start="01:03:35.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""We are about to go back live on the""" start="01:03:39.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""development track, so you can continue the""" start="01:03:41.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""discussion. You know, we are recording""" start="01:03:43.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""everything and you seem to be having a great""" start="01:03:45.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""amount of fun to issue the need for lunch,""" start="01:03:47.520" video="qanda-emacsen" id="subtitle"]] +[[!template text="""at least for the people in the US.""" start="01:03:49.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I just want to let you know,""" start="01:03:51.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in 2 minutes' time, we will be moving back to""" start="01:03:53.680" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the rest of the talk for the afternoon,""" start="01:03:54.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but feel free to stay in a room and keep""" start="01:03:56.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""discussing. All right?""" start="01:03:57.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Thank you. All right.""" start="01:04:01.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 6]: It might be a little brutal in 2 minutes,""" start="01:04:03.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so if you have your watch synchronized at 7""" start="01:04:07.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""sharps, so in 2 minutes,""" start="01:04:09.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""it'll cut off.""" start="01:04:10.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay. Bye-bye. Bye. Oh my.""" start="01:04:19.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah. Interesting stuff indeed.""" start="01:04:23.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: to listen to it after you're done with the""" start="01:04:29.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: I guess you have Have you""" start="01:04:32.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: comp. ever listened to that talk before?""" start="01:04:33.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""The 1 that's in that webpage,""" start="01:04:38.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the FOSDEM 1.""" start="01:04:39.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Which 1? Sorry? 0 yeah,""" start="01:04:40.840" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I in fact saw him live in the FOSDEM 2020.""" start="01:04:44.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: So I a little bit. 2020.""" start="01:04:50.053" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So we him""" start="01:04:50.166" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: talked with him a little bit The first time""" start="01:04:51.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""is here in well here in Europe here in""" start="01:04:55.760" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Brussels like 3 hours away or 2 hours away in""" start="01:05:01.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""plane from where I am.""" start="01:05:02.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: 1 of the things that's kind of interesting""" start="01:05:05.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""with, you have some of""" start="01:05:06.900" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: the people who come from Europe to the US and""" start="01:05:09.060" video="qanda-emacsen" id="subtitle"]] +[[!template text="""they're like, oh, I want to visit all the""" start="01:05:11.820" video="qanda-emacsen" id="subtitle"]] +[[!template text="""corners of the US in a couple of days.""" start="01:05:13.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And it's like, No, US is the size of Europe.""" start="01:05:17.920" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: The""" start="01:05:19.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: states are the size of their countries.""" start="01:05:21.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""You don't...""" start="01:05:23.140" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: I know. I know. It's very...""" start="01:05:27.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""It's huge. And it's like 6 hours different""" start="01:05:30.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""from coast to coast, something like that.""" start="01:05:32.280" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: Yeah, and that's driving as fast as you can""" start="01:05:38.000" video="qanda-emacsen" id="subtitle"]] +[[!template text="""on the freeway, on the best roads that you""" start="01:05:39.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""possibly can, not taking...""" start="01:05:41.160" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, that would be...""" start="01:05:45.700" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So the thing that I try to do also with LEM""" start="01:05:53.400" video="qanda-emacsen" id="subtitle"]] +[[!template text="""is to move my workflow from LEM to Emax,""" start="01:05:57.880" video="qanda-emacsen" id="subtitle"]] +[[!template text="""so for Emax to LEM, use it more.""" start="01:06:01.620" video="qanda-emacsen" id="subtitle"]] +[[!template text="""And I hope to, we still have a long way to go""" start="01:06:07.080" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in terms of usability,""" start="01:06:08.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""in terms of other things,""" start="01:06:10.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because we need more power.""" start="01:06:12.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So This is also my attempt to do some""" start="01:06:18.420" video="qanda-emacsen" id="subtitle"]] +[[!template text="""publicity to the Blend project itself,""" start="01:06:20.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to need to add more users,""" start="01:06:23.100" video="qanda-emacsen" id="subtitle"]] +[[!template text="""to be willing to try and to fail trying,""" start="01:06:26.200" video="qanda-emacsen" id="subtitle"]] +[[!template text="""because we still have some rough edges.""" start="01:06:29.640" video="qanda-emacsen" id="subtitle"]] +[[!template text="""Yeah, just trying to do that,""" start="01:06:38.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""which is, and I apologize to the Emaclist""" start="01:06:41.720" video="qanda-emacsen" id="subtitle"]] +[[!template text="""community, which I'm part of,""" start="01:06:43.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I don't want to like,""" start="01:06:44.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""disencourage the use of getting Emacs anyway.""" start="01:06:47.020" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I think both are awesome.""" start="01:06:48.960" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I want to anyone to get a real impression.""" start="01:06:51.300" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: What do""" start="01:06:57.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: you think? PlasmaStrike,""" start="01:06:57.740" video="qanda-emacsen" id="subtitle"]] +[[!template text="""you have a very powerful name.""" start="01:07:01.560" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: I don't think that's something to worry""" start="01:07:07.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""about. I don't personally,""" start="01:07:09.660" video="qanda-emacsen" id="subtitle"]] +[[!template text="""but I'm going to watch the EMMS talk.""" start="01:07:15.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""That's something that I don't really use too""" start="01:07:17.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""much on my Emacs config.""" start="01:07:20.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So I'm going to let you go.""" start="01:07:22.600" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: OK, yeah, I'm going to go.""" start="01:07:24.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm going to maybe watch the garbage""" start="01:07:26.320" video="qanda-emacsen" id="subtitle"]] +[[!template text="""collector talk, which is interesting.""" start="01:07:27.800" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So thank you all very much.""" start="01:07:32.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm gonna go. Thanks for the questions and""" start="01:07:35.860" video="qanda-emacsen" id="subtitle"]] +[[!template text="""all that. I think I hope I answered correctly""" start="01:07:40.811" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: is part of the value of being part of this is""" start="01:07:47.040" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: all of them. Yeah, I figure this that's a way""" start="01:07:50.580" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 4]: conversations. So of saying thank you for""" start="01:07:52.540" video="qanda-emacsen" id="subtitle"]] +[[!template text="""people sharing interesting talks.""" start="01:07:54.480" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 2]: Indeed. Thank you all very much for going to""" start="01:07:57.780" video="qanda-emacsen" id="subtitle"]] +[[!template text="""the Emacs conf and to watch me.""" start="01:08:02.380" video="qanda-emacsen" id="subtitle"]] +[[!template text="""So thank you all very much.""" start="01:08:06.440" video="qanda-emacsen" id="subtitle"]] +[[!template text="""I'm going to go do that.""" start="01:08:09.360" video="qanda-emacsen" id="subtitle"]] +[[!template text="""[Speaker 0]: See you.""" start="01:08:10.640" video="qanda-emacsen" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emacsen%3A%20The%20Emacsen%20family%2C%20the%20design%20of%20an%20Emacs%20and%20the%20importance%20of%20Lisp) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/emacsen-before.md b/2023/info/emacsen-before.md new file mode 100644 index 00000000..151dac9d --- /dev/null +++ b/2023/info/emacsen-before.md @@ -0,0 +1,31 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 19-min talk; Q&A: BigBlueButton conference room +Status: TO_INDEX_QA + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="emacsen-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emacsen-mainVideo" data=""" +00:00.000 Introduction +00:17.000 Why Lisp matters +01:26.640 Why Emacs Lisp was chosen +02:54.841 Other "Emacsen" +03:38.581 Why not Common Lisp? +06:39.120 Common Lisp is still not dead or is always dead +08:30.080 Lem is a nice Emacsen implementation +08:58.260 Why not just use GNU Emacs? +10:31.080 Why Lem +14:03.080 Similarities and differences +15:49.600 Demo + +"""]]<div></div>Duration: 18:28 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/qgJ84RLV2FZYyeSusDskwU">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="emacsen-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emacsen-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus"></audio></div><div></div>Duration: 1:08:14 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/emacsen-nav.md b/2023/info/emacsen-nav.md new file mode 100644 index 00000000..976d9935 --- /dev/null +++ b/2023/info/emacsen-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a> +Next by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/emms-after.md b/2023/info/emms-after.md new file mode 100644 index 00000000..a9b97368 --- /dev/null +++ b/2023/info/emms-after.md @@ -0,0 +1,1371 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="emms-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Sound of Emacs, Emms, The Emacs Multimedia System.""" start="00:00:00.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Hi, I'm Yoni Rabkin and I'll be talking about Emms;""" start="00:00:05.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the Emacs Multimedia System.""" start="00:00:09.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""What is Emms?""" start="00:00:11.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms displays and plays media from within Emacs""" start="00:00:14.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""using a variety of external players""" start="00:00:18.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and from different media sources.""" start="00:00:20.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can run as a minimalistic player""" start="00:00:23.540" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is controlled with no more than""" start="00:00:26.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a handful of simple M-x commands,""" start="00:00:28.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or as a fully-fledged interactive media browser and player.""" start="00:00:31.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can display album art, play streaming audio,""" start="00:00:36.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""tag music files, search for lyrics,""" start="00:00:40.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""provide MPD connectivity, control the volume,""" start="00:00:43.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and more. Much more.""" start="00:00:46.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The Emms project acts like Emacs in microcosm.""" start="00:00:49.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It slowly but surely grows bigger""" start="00:00:53.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and gets ever more features.""" start="00:00:56.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Perhaps Emms will one day even have a text editor.""" start="00:00:58.480" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The structure of this talk""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The structure of this talk:""" start="00:01:03.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We'll start with an introduction to Emms.""" start="00:01:05.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is the practical part.""" start="00:01:08.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Then, a bit about how Emms works. That's the technical part.""" start="00:01:10.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Finally, how we work. All about Emms development.""" start="00:01:15.880" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Introduction to Emms: The practical part""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Introduction to Emms: The practical part:""" start="00:01:21.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I want this talk to be of immediate use to people,""" start="00:01:25.021" video="mainVideo-emms" id="subtitle"]] +[[!template text="""so I'm going to present a quick TL;DR of the Emms manual""" start="00:01:28.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""concerning installation and use.""" start="00:01:33.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""By the end of this part you should be able to""" start="00:01:36.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""install, configure, and use Emms in a variety of ways.""" start="00:01:38.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Where can I get Emms?""" start="00:01:45.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms is distributed primarily via GNU ELPA.""" start="00:01:48.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""So it's really only a M-x list-packages away at any moment.""" start="00:01:54.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""There's also a website hosted at gnu.org.""" start="00:02:02.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Among other things on the website, you'll find""" start="00:02:07.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a copy of the friendly, robust, and up-to-date user manual.""" start="00:02:11.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Installing Emms has become progressively easier over time""" start="00:02:21.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and will continue to get easier.""" start="00:02:25.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""In the bad old days, it required downloading a tarball""" start="00:02:28.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and compiling a C language shim""" start="00:02:32.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to enable reading metadata from media files.""" start="00:02:35.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But those days are long gone, and installing Emms is now""" start="00:02:38.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as easy as invoking M-x list-packages,""" start="00:02:43.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""installing the Emms package, and placing as few as""" start="00:02:47.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""2 or 3 lines of configuration in your Emacs initialization.""" start="00:02:51.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""So after the package is installed via ELPA,""" start="00:02:57.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you can add these few lines.""" start="00:03:02.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-all` will make available all of the stable features""" start="00:03:08.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which are shipped with Emms.""" start="00:03:12.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The `emms-player-list` variable is a list of players""" start="00:03:15.740" video="mainVideo-emms" id="subtitle"]] +[[!template text="""like MPV, MPlayer, VLC, etc.""" start="00:03:20.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms will call and control these external players""" start="00:03:25.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to play your media.""" start="00:03:29.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The variable `emms-info-functions` is a list of ways""" start="00:03:32.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for Emms to read the metadata in your media files""" start="00:03:36.660" video="mainVideo-emms" id="subtitle"]] +[[!template text="""so that Emms can display song title, artist name,""" start="00:03:40.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""year of production, etc.""" start="00:03:45.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The `emms-info-native` feature in the setup example""" start="00:03:49.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is the built-in metadata reader""" start="00:03:55.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""written entirely in Emacs Lisp.""" start="00:03:58.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But there are also other backends""" start="00:04:01.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which can call external programs for info""" start="00:04:04.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""such as TinyTag, the TagLib library, exiftool, and so on.""" start="00:04:07.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""You can then old-school restart your Emacs""" start="00:04:14.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or simply evaluate the above couple of lines to get going.""" start="00:04:17.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now that we have Emms installed and configured,""" start="00:04:22.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""we should load some media for player.""" start="00:04:26.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""There are multiple ways to load media into Emms for playing.""" start="00:04:29.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""They can be directories with local files,""" start="00:04:32.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""synchronized from a remote instance of""" start="00:04:36.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a music player daemon, PLS or M3U playlists,""" start="00:04:38.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a list of URLs for streaming,""" start="00:04:44.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or even Emms' own native playlist format""" start="00:04:47.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is unsurprisingly a just serialized Emacs Lisp.""" start="00:04:51.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""No matter how you add tracks to Emms,""" start="00:04:57.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you'll end up with a playlist.""" start="00:05:00.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A fundamental strength of Emms is that each playlist""" start="00:05:03.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is a regular Emacs buffer and the track listing therein""" start="00:05:08.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is nothing more than text lines with property overlays.""" start="00:05:13.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This means that you can navigate, search, copy,""" start="00:05:17.860" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and edit an Emms playlist buffer""" start="00:05:21.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""just as you would any Emacs buffer.""" start="00:05:24.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If you want to reorganize the tracks in the playlist,""" start="00:05:28.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""then you can simply kill yank the tracks""" start="00:05:31.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""just as you would any buffer with lines of text,""" start="00:05:33.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and the same can be done between multiple playlist buffers.""" start="00:05:36.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One of the most straightforward ways to add media""" start="00:05:42.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is to invoke a command like `M-x emms-add-directory-tree`.""" start="00:05:46.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""You can point it to the top of a set of directories""" start="00:05:51.940" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with playable files for Emms to traverse.""" start="00:05:55.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Another rather convenient method is to mark files in Dired""" start="00:06:00.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and to invoke `emms-add-dired`.""" start="00:06:05.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I definitely use this one a lot.""" start="00:06:09.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The Emms playlist mode binds""" start="00:06:11.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a number of useful keys and commands.""" start="00:06:16.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It's highly recommended that you either""" start="00:06:19.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""read the friendly manual""" start="00:06:23.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or hit "C-h m" in a playlist buffer to discover them.""" start="00:06:25.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now we have a playlist buffer with a number of tracks,""" start="00:06:32.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""so the next step is going to be playback.""" start="00:06:35.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can be used as a minimalistic player""" start="00:06:40.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with nothing more than a handful of commands.""" start="00:06:44.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Once there is a current Emms playlist,""" start="00:06:48.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""invoking emms-start will begin playing the current track.""" start="00:06:51.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now of course in a new playlist""" start="00:06:57.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that would be the first track.""" start="00:07:00.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now emms-next, emms-pause, and emms-stop""" start="00:07:02.580" video="mainVideo-emms" id="subtitle"]] +[[!template text="""do exactly what you think they do.""" start="00:07:07.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""To visit the current playlist,""" start="00:07:11.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you can invoke M-x emms-playlist-mode-go,""" start="00:07:13.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is a long command I personally bind to "M-f12".""" start="00:07:17.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""You'll be taken to the current playlist buffer.""" start="00:07:22.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""While you can have multiple playlist buffers,""" start="00:07:25.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""only one is current for the purposes of playback commands.""" start="00:07:29.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The playlist buffer has keys bound""" start="00:07:35.780" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to control the media being played.""" start="00:07:38.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-seek-forward` and `emms-seek-backwards` allow you""" start="00:07:39.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to scrub along the media being played.""" start="00:07:44.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Which commands are available is a function of""" start="00:07:49.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the player backend being employed.""" start="00:07:51.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The simplest of players may have nothing more""" start="00:07:54.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""than the ability to play, stop, and seek,""" start="00:07:56.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but others may implement a plethora of commands.""" start="00:07:59.560" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The modeline""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Modeline: Emms will by default display""" start="00:08:04.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the name of the currently playing track in the mode line""" start="00:08:08.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with information such as playing time.""" start="00:08:11.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The mode line format is controlled""" start="00:08:15.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""via the `emms-mode-line-format` variable""" start="00:08:15.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and the `emms-mode-line-playlist-current` function.""" start="00:08:20.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Metadata and the cache.""" start="00:08:27.140" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It would be sufficient for emms to simply list""" start="00:08:31.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the file names or urls of each piece of media,""" start="00:08:34.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but unless you name your music and media""" start="00:08:38.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with obsessive consistency and precision,""" start="00:08:41.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""not that there is anything wrong with that""" start="00:08:43.940" video="mainVideo-emms" id="subtitle"]] +[[!template text="""then the resulting list will be a bit of an eyesore.""" start="00:08:46.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Moreover, there are a lot of other useful metadata""" start="00:08:50.860" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in the media files, including cool stuff like album art.""" start="00:08:54.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""So instead of just files, Emms will try""" start="00:08:58.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to extract metadata from each track""" start="00:09:01.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and display a nicely-formatted track listing.""" start="00:09:04.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The format can be controlled by customizing""" start="00:09:08.220" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the variable `emms-track-description-function`.""" start="00:09:10.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms uses so-called info methods to extract""" start="00:09:15.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the metadata from each file.""" start="00:09:19.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-info-native`, which I mentioned before,""" start="00:09:22.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is the built-in metadata reader written in Emacs Lisp.""" start="00:09:25.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It provides support for Ogg Vorbis, Ogg Opus, FLAC, and MP3.""" start="00:09:30.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""However, if you have media in other formats,""" start="00:09:37.660" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you can also add info methods""" start="00:09:40.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the `emms-info-functions` list,""" start="00:09:42.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which call external programs such as exiftool,""" start="00:09:45.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the LibTag library, tiny-tag, etc. to read file metadata.""" start="00:09:48.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Since reading metadata takes time""" start="00:09:55.420" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and that metadata doesn't change very often,""" start="00:09:58.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms builds a cache as it extracts""" start="00:10:01.340" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the information from each file.""" start="00:10:04.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The first time loading of thousands of tracks""" start="00:10:06.860" video="mainVideo-emms" id="subtitle"]] +[[!template text="""into the emms cache may take a while,""" start="00:10:09.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but as is the nature of caching, subsequent loads""" start="00:10:13.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""will be nearly instantaneous.""" start="00:10:17.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""To ease loading huge media collections,""" start="00:10:20.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""emms also can populate the cache asynchronously,""" start="00:10:22.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""so that your emacs isn't locked up in the interim.""" start="00:10:26.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Let's talk about streams and URLs.""" start="00:10:30.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Not all playlist entries need to be associated with files.""" start="00:10:33.780" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It's possible to add streaming playlists""" start="00:10:37.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and URLs to any playlist.""" start="00:10:39.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms also comes with a built-in eclectic list""" start="00:10:42.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of streaming audio stations to get you started.""" start="00:10:46.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Any playlist entry can be a URL,""" start="00:10:50.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and that URL will be passed on to the media player backend,""" start="00:10:52.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which can play it, if any.""" start="00:10:56.720" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Meta-playlist mode""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Meta-playlist mode:""" start="00:11:01.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms also has meta-playlist mode""" start="00:11:03.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to help manage multiple playlists.""" start="00:11:08.300" video="mainVideo-emms" id="subtitle"]] +[[!template text="""When you invoke meta-playlist mode,""" start="00:11:11.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you will see a listing of all of the current Emms playlists,""" start="00:11:13.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and this mode binds a handful of useful keybindings""" start="00:11:16.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to help manage those playlists.""" start="00:11:22.000" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The browser""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Browser:""" start="00:11:29.860" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Music doesn't always lend itself to being viewed""" start="00:11:31.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as a series of discrete files.""" start="00:11:35.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""While there may be a good taxonomy of music""" start="00:11:38.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that can be reflected using directories and filenames,""" start="00:11:41.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""there are other aspects which cannot.""" start="00:11:45.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is especially true when you consider that""" start="00:11:49.100" video="mainVideo-emms" id="subtitle"]] +[[!template text="""unlike many computer file taxonomies,""" start="00:11:51.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""music files may contain""" start="00:11:55.300" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a lot of self-descriptive information""" start="00:11:56.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in the form of metadata,""" start="00:11:58.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""such as the year a work was published, the composer,""" start="00:12:00.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the performing artist, etc.""" start="00:12:04.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Therefore, it makes sense for Emms to enable""" start="00:12:07.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a different view into a media collection""" start="00:12:11.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is based on the cached metadata.""" start="00:12:13.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The browser interface binds a host of keys""" start="00:12:17.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to help navigate the tree structure""" start="00:12:19.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of the metadata information.""" start="00:12:22.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Since browser display""" start="00:12:24.540" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is not predicated upon directory structure,""" start="00:12:25.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you can invoke functions such as `emms-browse-by-album`,""" start="00:12:28.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or `emms-browse-by-artist`, etc.""" start="00:12:32.940" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to view the collection in different ways.""" start="00:12:35.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can do a lot more,""" start="00:12:42.180" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but covering it all would take too much time.""" start="00:12:43.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I do recommend opening the fine Emms manual""" start="00:12:47.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and getting to know some additional features""" start="00:12:50.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""such as sorting tracks in playlists,""" start="00:12:52.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""sorting and filtering in the browser,""" start="00:12:55.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""editing track information,""" start="00:12:57.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""deriving a new playlist from an existing playlist,""" start="00:12:59.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the music player daemon, lyrics display, volume control,""" start="00:13:01.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""bookmarks, GNU FM, and Dbus/Mpris support.""" start="00:13:07.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I hope this was a useful introduction to Emms.""" start="00:13:13.360" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""How Emms works: The technical part""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""How Emms Works: The technical part:""" start="00:13:19.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This part is an overview of how Emms works.""" start="00:13:23.220" video="mainVideo-emms" id="subtitle"]] +[[!template text="""By the end of this, you should be familiar enough""" start="00:13:26.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with Emms internals to hack on it. Hint hint.""" start="00:13:29.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A short history of Emms""" start="00:13:34.740" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms is 20 years old as of the time of writing.""" start="00:13:37.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Old enough to drink in many countries.""" start="00:13:42.940" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This means it was developed back in 2003""" start="00:13:45.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for emacs 21.2 or thereabouts.""" start="00:13:48.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""As developers, we don't go around looking to""" start="00:13:53.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""replace code just because it's old.""" start="00:13:56.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""On the other hand, some parts were inadequate""" start="00:13:58.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or just didn't age gracefully.""" start="00:14:01.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And we have been partially or completely rewriting those.""" start="00:14:04.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I became the maintainer of Emms about a decade ago,""" start="00:14:10.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but I didn't start the project.""" start="00:14:13.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Jorgen Schäfer started the project.""" start="00:14:16.100" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I reached out to Jorgen""" start="00:14:21.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and he kindly shared some of his recollections.""" start="00:14:22.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Jorgen states that Emms was born back""" start="00:14:25.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when the music format wars raged.""" start="00:14:28.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""MP3 was the standard, but overshadowed with patent issues.""" start="00:14:31.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""In fact, Technicolor and Fraunhofer IIS""" start="00:14:38.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""only stopped licensing their patents for MP3""" start="00:14:42.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as recently as April of 2017.""" start="00:14:45.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Jorgen said that, and I quote,""" start="00:14:49.360" video="mainVideo-emms" id="subtitle"]] +[[!template text=""""I needed a tool that was player agnostic""" start="00:14:53.540" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and that could deal with a large collection of music files.""" start="00:14:56.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And I did not want any of the GUI music players""" start="00:14:59.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that existed back then.""" start="00:15:02.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Primarily, actually, because I did not want""" start="00:15:04.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to be switching windows to skip to the next song.""" start="00:15:07.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If I remember correctly,""" start="00:15:11.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I had just a shell script before that.""" start="00:15:12.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But I figured I lived in Emacs, so why not write a tool""" start="00:15:16.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that I can control my music from Emacs""" start="00:15:20.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""without ever having to leave Emacs?" Unquote.""" start="00:15:23.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We can see that Jorgen's motivations were of the best kind,""" start="00:15:27.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to stay in Emacs.""" start="00:15:32.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms, an architecture of sensible abstractions.""" start="00:15:35.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can be divided into a number of parts.""" start="00:15:40.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The core, tracks, playlists, sources, players,""" start="00:15:44.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""info, cache, and ancillary.""" start="00:15:48.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now David J. Wheeler once said""" start="00:15:51.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that all problems in computer science""" start="00:15:53.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""can be solved by another level of indirection,""" start="00:15:56.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""except of course for the problem""" start="00:15:59.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of too many layers of indirection.""" start="00:16:01.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms core has survived this long""" start="00:16:04.420" video="mainVideo-emms" id="subtitle"]] +[[!template text="""because it makes sensible and flexible coding abstractions.""" start="00:16:07.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Keep this in mind as we explore the implementation.""" start="00:16:11.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This following part of the talk will also be invaluable""" start="00:16:15.500" video="mainVideo-emms" id="subtitle"]] +[[!template text="""if you want to hack on Emacs.""" start="00:16:18.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Another hint.""" start="00:16:21.560" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The Emms core""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Emms core.""" start="00:16:23.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The core defines tracks, playlists,""" start="00:16:25.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a way to start and stop playback,""" start="00:16:29.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as well as ways to proceed to the next track.""" start="00:16:31.760" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Tracks""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Tracks:""" start="00:16:36.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms tracks consist of a list whose CAR is the symbol track,""" start="00:16:38.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and CADR is an alist starting with""" start="00:16:44.780" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the association of `type'.""" start="00:16:47.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Type can be something like file, streamlist, URL, etc.""" start="00:16:50.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A track of classical music from Bach's Art of Fugue""" start="00:16:56.740" video="mainVideo-emms" id="subtitle"]] +[[!template text="""may look something like this.""" start="00:17:00.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""While a track may contain many associations,""" start="00:17:04.380" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the number of associations remains a small constant""" start="00:17:07.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""from the perspective of computational steps required""" start="00:17:11.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to find any particular association.""" start="00:17:14.200" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Playlist""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Playlist:""" start="00:17:18.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""An Emms playlist consists of an Emacs buffer""" start="00:17:20.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with a buffer-local non-nil variable,""" start="00:17:23.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-playlist-buffer-p`.""" start="00:17:26.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The buffer can contain anything, any amount or type of text,""" start="00:17:29.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or anything else.""" start="00:17:33.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms tracks are stored in text properties within the buffer,""" start="00:17:35.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with the unimaginatively named text property `emms-track`.""" start="00:17:40.500" video="mainVideo-emms" id="subtitle"]] +[[!template text="""For Emms, to go to the next track consists of""" start="00:17:46.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""nothing more than looking for the next text property change""" start="00:17:49.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""containing `emms-track`, wherever that is.""" start="00:17:52.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""That means that there is a healthy decoupling between""" start="00:17:57.180" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the visual representation of a playlist""" start="00:18:00.540" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and its contents as far as Emms is concerned.""" start="00:18:03.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This decoupling allows Emms playlist buffers""" start="00:18:08.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to look like anything as long as that anything consists of""" start="00:18:11.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""one or more `emms-track` text properties.""" start="00:18:15.320" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Sources""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Sources:""" start="00:18:22.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A source is how you tell Emms:""" start="00:18:23.580" video="mainVideo-emms" id="subtitle"]] +[[!template text=""""Go and get those things and turn them into tracks."""" start="00:18:25.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""More specifically, an Emms source is a function called in""" start="00:18:29.780" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a playlist buffer in order to add tracks.""" start="00:18:34.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And even more specifically, a source is really""" start="00:18:37.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""a family of related functions""" start="00:18:40.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""defined by the macro `define-emms-source`.""" start="00:18:42.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A straightforward example""" start="00:18:47.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is the function `emms-add-directory`,""" start="00:18:49.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which adds an entire directory of files""" start="00:18:52.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the current playlist.""" start="00:18:55.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It accepts, or interactively queries for, a directory""" start="00:18:57.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and iterates over each file in that directory,""" start="00:19:02.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""adding them as tracks to the playlist buffer as it goes.""" start="00:19:06.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms comes with sources for files, directories, URLs,""" start="00:19:10.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""playlists of various formats,""" start="00:19:15.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""files from dired mode, and etc.""" start="00:19:17.320" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Players""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Players:""" start="00:19:22.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""An Emms player is, at its simplest, a data structure""" start="00:19:24.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with three functions.""" start="00:19:28.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One to start playing, one to stop,""" start="00:19:30.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and one which returns true if the player knows""" start="00:19:34.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""how to play a given track.""" start="00:19:38.180" video="mainVideo-emms" id="subtitle"]] +[[!template text="""However, if your player also knows how to pause, resume,""" start="00:19:41.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""seek, etc, then additional functions can be added""" start="00:19:44.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the player data structure.""" start="00:19:48.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is abstract enough to be able to, for example,""" start="00:19:51.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""define a simple player for images with the help of""" start="00:19:55.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the `define-emms-simple-player` macro.""" start="00:19:58.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The above will define a player called `emms-player-display`,""" start="00:20:04.580" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which would call ImageMagick's `display` command""" start="00:20:09.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on each file in our playlist""" start="00:20:12.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with the image file extension we listed.""" start="00:20:15.640" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Info""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Info:""" start="00:20:20.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""As previously described, Emms comes with info methods,""" start="00:20:23.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which are functions to add""" start="00:20:28.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""descriptive information to tracks.""" start="00:20:29.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms is set up so that""" start="00:20:32.340" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the hook `emms-track-initialize-functions` is called""" start="00:20:34.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when a track is created, and that ends up calling""" start="00:20:37.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the info methods listed in the `emms-info-functions` list.""" start="00:20:41.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""These will modify the track data structure to add metadata.""" start="00:20:46.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One of the coolest recent features of Emms""" start="00:20:51.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is `emms-info-native`, written by Petteri Hintsanen;""" start="00:20:54.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""again, sorry for the pronunciation.""" start="00:20:58.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-info-native` is a purely Emacs Lisp implementation""" start="00:21:01.326" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which reads Ogg Vorbis, Ogg Opus, FLAC, and MP3 files""" start="00:21:06.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and parses out the metadata.""" start="00:21:11.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is in comparison with other info readers""" start="00:21:14.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which Emms supports, which all involve calling out""" start="00:21:17.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to external processes and parsing the values returned.""" start="00:21:20.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-info-native` works by unpacking and examining""" start="00:21:25.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the binary data in the media file headers""" start="00:21:29.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and parsing the data layout specifications.""" start="00:21:32.040" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The cache""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Cache:""" start="00:21:36.660" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The Emms cache is a mapping between a full path name""" start="00:21:38.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and its associated information.""" start="00:21:43.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Once information is extracted from a file""" start="00:21:45.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""using an info method, that information is then""" start="00:21:48.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""associated with that file in the cache.""" start="00:21:50.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One thing to bear in mind is that the caching system""" start="00:21:53.980" video="mainVideo-emms" id="subtitle"]] +[[!template text="""was originally written back""" start="00:21:57.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when slow spinning disks were common.""" start="00:21:58.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A 32GB SSD drive cost close to $700 in 2006,""" start="00:22:00.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is the equivalent of about $1,000""" start="00:22:07.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""at the time of writing.""" start="00:22:10.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But despite the speed of modern drives,""" start="00:22:12.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the caching system is still worth using""" start="00:22:15.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for larger music collections.""" start="00:22:17.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The caching system is also a prerequisite""" start="00:22:19.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for being able to use the Emms browser.""" start="00:22:22.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The cache implementation is relatively naive.""" start="00:22:26.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""For instance, moving a file will invalidate""" start="00:22:30.380" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that cache entry for that file""" start="00:22:33.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and will require a refresh.""" start="00:22:35.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""However, relatively little work has been done""" start="00:22:37.580" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the cache implementation over the years""" start="00:22:40.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""since it has proven to be good enough""" start="00:22:42.780" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for the majority of situations.""" start="00:22:45.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Which is to say, nobody complained.""" start="00:22:47.060" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Healthy back and forth: mpv, mpd, and GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Healthy back and forth. MPV, MPD, GNU.FM""" start="00:22:51.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Process communication with a simple media player""" start="00:22:56.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""can be as straightforward""" start="00:23:00.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as starting an asynchronous process""" start="00:23:01.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and waiting for that process to complete""" start="00:23:03.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in order to move to the next track.""" start="00:23:05.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is how the example above""" start="00:23:08.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with ImageMagick's display binary worked.""" start="00:23:10.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""However, Emms also handles asynchronous""" start="00:23:13.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""two-way communication with processes.""" start="00:23:17.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A simple example of this would be sending strings""" start="00:23:20.300" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to a running process such as the pause command to VLC.""" start="00:23:23.960" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""MPV""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""MPV:""" start="00:23:31.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""MPV is a popular media player forked""" start="00:23:33.380" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in a roundabout way from mplayer.""" start="00:23:37.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One of its most notable features is""" start="00:23:39.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""support for a robust client API.""" start="00:23:42.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Mike Kazantsev has been working since 2018""" start="00:23:46.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to develop the excellent `emms-player-mpv.el'.""" start="00:23:52.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It can communicate with a long running MPV process""" start="00:23:58.350" video="mainVideo-emms" id="subtitle"]] +[[!template text="""via Unix sockets or IP sockets.""" start="00:24:02.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This allows for MPV to do things""" start="00:24:07.180" video="mainVideo-emms" id="subtitle"]] +[[!template text="""like update ICY metadata for streaming audio.""" start="00:24:11.170" video="mainVideo-emms" id="subtitle"]] +[[!template text="""So that, for example, when a song changes""" start="00:24:14.890" video="mainVideo-emms" id="subtitle"]] +[[!template text="""while you're listening to a streaming audio via Emms,""" start="00:24:17.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the song title displayed in the mode line""" start="00:24:22.050" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and track listing can update as well.""" start="00:24:24.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This means that deep inside the code""" start="00:24:28.330" video="mainVideo-emms" id="subtitle"]] +[[!template text="""there is an Emacs `make-network-process` call.""" start="00:24:30.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The fact that Mike has put this together""" start="00:24:35.630" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in fewer than 1,000 lines of legible Emacs Lisp""" start="00:24:37.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is a testament to some serious coding ability.""" start="00:24:42.640" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""MPD""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""MPD:""" start="00:24:47.470" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Similar to MPV but potentially""" start="00:24:49.610" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on a completely different machine""" start="00:24:52.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is Emms support for the Music Player Daemon.""" start="00:24:54.120" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Music Player Daemon or MPD is a media player""" start="00:24:58.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with an explicit client-server design""" start="00:25:01.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and communicates with Emms via a network process.""" start="00:25:03.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Unfortunately, MPD support has never been all that great.""" start="00:25:09.950" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But this isn't the emms developers fault!""" start="00:25:16.090" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Because unlike every other media player""" start="00:25:20.470" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that Emms interfaces with MPD is designed around""" start="00:25:25.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""its own internal playlist database.""" start="00:25:29.730" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is a surprising design decision""" start="00:25:31.930" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on the MPD developers' part""" start="00:25:35.270" video="mainVideo-emms" id="subtitle"]] +[[!template text="""since it goes against the client-server mindset.""" start="00:25:37.650" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A consequence is that we end up having to try and coordinate""" start="00:25:41.750" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and harmonize the MPD playlist with the Emms playlist.""" start="00:25:45.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I can foresee writing a completely new MPD mode for Emms""" start="00:25:51.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is designed to be a true pure MPD client.""" start="00:25:56.690" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Unless of course someone volunteers to beat me to it.""" start="00:26:01.510" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Hint hint.""" start="00:26:05.340" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""GNU FM and Libre FM""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""GNU FM and Libre FM:""" start="00:26:07.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Libre FM is a music community which allows you""" start="00:26:10.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to share your listening habits with other users of the site.""" start="00:26:13.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A kind of online listening party.""" start="00:26:17.450" video="mainVideo-emms" id="subtitle"]] +[[!template text="""In the case of `emms-librefm-scrobber.el`""" start="00:26:21.270" video="mainVideo-emms" id="subtitle"]] +[[!template text="""we use Emacs' `url-retrieve` function""" start="00:26:25.650" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to asynchronously send to a URL""" start="00:26:28.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and then fire a callback function to process the response.""" start="00:26:32.450" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This represents numerous challenges""" start="00:26:40.050" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to implement within Emacs.""" start="00:26:42.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The primary issue being that Emacs itself""" start="00:26:45.090" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is pretty weak at doing anything""" start="00:26:47.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""truly and really asynchronously.""" start="00:26:50.100" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I can say with confident sarcasm""" start="00:26:54.220" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and with tongue firmly planted in cheek""" start="00:26:56.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that it is almost as if the original designers""" start="00:26:59.530" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of Emacs didn't foresee their text editor""" start="00:27:02.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""needing to play music""" start="00:27:05.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""while interacting with a remote network server.""" start="00:27:07.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""How myopic!""" start="00:27:09.820" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""How we work: Emms development""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""How we work: Emms development:""" start="00:27:12.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This part is an overview of how Emms is developed.""" start="00:27:15.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""By the end of this part you should be able to understand""" start="00:27:19.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""how we hacked this project, and how you can too.""" start="00:27:23.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Where it's at.""" start="00:27:28.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""How to find our forge.""" start="00:27:29.950" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms has been hosted at the FSF's forge, Savannah,""" start="00:27:32.370" video="mainVideo-emms" id="subtitle"]] +[[!template text="""since around 2003.""" start="00:27:36.500" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms is distributed via GNU ELPA and integrated into Emacs.""" start="00:27:39.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Before ELPA it was distributed as a tarball""" start="00:27:46.230" video="mainVideo-emms" id="subtitle"]] +[[!template text="""via ftp.gnu.org but that stopped back in 2020.""" start="00:27:49.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I was initially resistant to ELPA but around the time""" start="00:27:55.140" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when the thousandth person asked me why Emms isn't on ELPA,""" start="00:27:58.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I realized that it had to happen.""" start="00:28:03.850" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms can also be found in other places""" start="00:28:07.210" video="mainVideo-emms" id="subtitle"]] +[[!template text="""such as Melpa or GitHub but we, the developers of Emms,""" start="00:28:10.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""have nothing to do with that""" start="00:28:16.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and we don't monitor those channels.""" start="00:28:18.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If you want the source straight from, well, the source,""" start="00:28:21.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""then go to the Savannah Git repository.""" start="00:28:26.300" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Look who's talking: Where development discussion happens.""" start="00:28:30.370" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If you want to talk to us, discussions all happen""" start="00:28:34.990" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on emms-help@gnu.org.""" start="00:28:38.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We used to use emms-patches@gnu.org""" start="00:28:41.430" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but didn't feel like the volume of incoming patches""" start="00:28:45.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""justified a separate mailing list.""" start="00:28:48.280" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The Rime Of The Ancient Maintainer""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The Rime Of The Ancient Maintainer:""" start="00:28:52.590" video="mainVideo-emms" id="subtitle"]] +[[!template text="""There are a number of activities""" start="00:28:55.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""particular to being a maintainer.""" start="00:28:57.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""These are all part of a project's lifecycle.""" start="00:29:00.100" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Let's review some of them.""" start="00:29:03.390" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""The life and times of an Emms patch""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""The life and times of an Emms patch:""" start="00:29:06.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A maintainer needs to be able to accept, critique,""" start="00:29:10.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and integrate patches from contributors and developers.""" start="00:29:13.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This means, among other things, that the maintainer""" start="00:29:17.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""needs to keep on top of copyright issues.""" start="00:29:20.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Before being able to add Emms to GNU/ELPA,""" start="00:29:24.470" video="mainVideo-emms" id="subtitle"]] +[[!template text="""we had to make sure that the copyright situation""" start="00:29:29.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""was in order.""" start="00:29:31.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This long process required reaching out to people""" start="00:29:33.850" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and having them assign the copyright""" start="00:29:37.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for their work to the FSF,""" start="00:29:39.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or even removing their code entirely""" start="00:29:42.510" video="mainVideo-emms" id="subtitle"]] +[[!template text="""if they couldn't be reached.""" start="00:29:45.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The experience left me with the conviction""" start="00:29:47.970" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that the easiest way to fix""" start="00:29:50.630" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the copyright situation of your package""" start="00:29:52.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is to ensure that it never gets broken in the first place.""" start="00:29:54.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Often a person will write in to the emms-help mailing list,""" start="00:30:00.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or perhaps raise an issue on IRC.""" start="00:30:04.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If it's a bug report or feature request, we'll discuss it,""" start="00:30:08.030" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and when it's fixed, we'll ask the reporter""" start="00:30:11.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to test the result and provide feedback.""" start="00:30:14.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If it's a patch, then we'll typically go one of three ways.""" start="00:30:17.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A trivial patch, such as fixing a typo""" start="00:30:22.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or corrections on a single line of code,""" start="00:30:24.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""will simply be applied by one of the developers.""" start="00:30:27.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A non-trivial, but one-time patch,""" start="00:30:32.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""will have to be cleared from a copyright perspective.""" start="00:30:34.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This means assigning copyright for the changes to the FSF.""" start="00:30:37.990" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Once that's cleared, then the patch will be applied.""" start="00:30:42.420" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Finally, if it's a non-trivial patch,""" start="00:30:46.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which looks like it would be the start""" start="00:30:49.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of a long-term development work (my favorite),""" start="00:30:52.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""then after copyright is cleared,""" start="00:30:56.010" video="mainVideo-emms" id="subtitle"]] +[[!template text="""that person will be offered to be added""" start="00:30:57.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the members with Git repo access on Savannah.""" start="00:31:00.800" video="mainVideo-emms" id="subtitle"]] +[[!template text="""From there, we usually use a dedicated branch""" start="00:31:05.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to do all the playing around""" start="00:31:08.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""before merging it with the main Git repo.""" start="00:31:09.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If you have ever sent a patch, feature request,""" start="00:31:13.630" video="mainVideo-emms" id="subtitle"]] +[[!template text="""or bug report into Emms (small or large), we thank you.""" start="00:31:16.880" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Let It Go: The release process""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Let It Go, The Release Process:""" start="00:31:24.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The maintainer is responsible for the release process.""" start="00:31:27.790" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I found that a consistent schedule works well,""" start="00:31:31.610" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which is not to say that we have to release on schedule,""" start="00:31:35.130" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but that aiming for a consistent release schedule""" start="00:31:39.380" video="mainVideo-emms" id="subtitle"]] +[[!template text="""provides structure and a goal.""" start="00:31:42.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The main Git branch in the repository is stable""" start="00:31:46.050" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and more often than not of release quality.""" start="00:31:50.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Releases are done about every three months.""" start="00:31:53.240" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And with such a stable main branch,""" start="00:31:56.650" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the process of releasing often involves little more""" start="00:31:59.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""than writing a NEWS entry.""" start="00:32:02.320" video="mainVideo-emms" id="subtitle"]] +[[!template text="""As a consequence, new and wonderful features""" start="00:32:05.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which aren't quite ready for prime time""" start="00:32:08.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when a release comes around,""" start="00:32:11.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""will remain safely in their branch on the Git repo""" start="00:32:13.500" video="mainVideo-emms" id="subtitle"]] +[[!template text="""until after the ELPA release.""" start="00:32:18.200" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""It Is Not In Our Stars, But In Ourselves: Future directions""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""It Is Not In Our Stars, But In Ourselves; Future Directions:""" start="00:32:23.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One aspect of Emms that needs to improve is ease of setup.""" start="00:32:29.630" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now that might surprise you, since at the time of writing,""" start="00:32:34.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""it's already pretty easy.""" start="00:32:37.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""But my ideal is that the user would need to do""" start="00:32:40.070" video="mainVideo-emms" id="subtitle"]] +[[!template text="""nothing at all after installation.""" start="00:32:43.880" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And with that, as a goal in mind,""" start="00:32:46.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""there is more work to be done.""" start="00:32:49.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We are working on a player discovery feature.""" start="00:32:52.750" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The idea is simple.""" start="00:32:55.500" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The code looks for binaries of popular media players""" start="00:32:57.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on the user's machine,""" start="00:33:00.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and for each one found, it asks the user""" start="00:33:01.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""if they want the associated Emms player backend""" start="00:33:04.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to be configured.""" start="00:33:07.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""In effect, this code is already working,""" start="00:33:09.810" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but currently an undocumented, unofficial feature.""" start="00:33:12.590" video="mainVideo-emms" id="subtitle"]] +[[!template text="""You can try it for yourself with""" start="00:33:16.290" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-setup-discover-players`.""" start="00:33:17.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""So what's the holdup?""" start="00:33:21.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""`emms-setup-discover-players` currently configures""" start="00:33:22.970" video="mainVideo-emms" id="subtitle"]] +[[!template text="""the `emms-player-list` variable,""" start="00:33:26.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but doesn't write it to disk.""" start="00:33:27.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And that means that the configuration""" start="00:33:29.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""isn't preserved between Emacs sessions.""" start="00:33:31.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The question then becomes,""" start="00:33:35.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""what is the best way to preserve this setting?""" start="00:33:36.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I personally don't like anything""" start="00:33:40.310" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to edit my .emacs except me,""" start="00:33:42.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and I wouldn't do that to anyone else.""" start="00:33:46.200" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Now we already write state to the .emacs.d/emms/ directory,""" start="00:33:49.280" video="mainVideo-emms" id="subtitle"]] +[[!template text="""but that would require care not to""" start="00:33:55.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""clobber a user's existing setup.""" start="00:33:58.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Having the user set up their system in one place,""" start="00:34:01.910" video="mainVideo-emms" id="subtitle"]] +[[!template text="""such as a .emacs or a .emmsrc,""" start="00:34:04.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""while saving state to a different place""" start="00:34:08.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is asking for confusion.""" start="00:34:11.420" video="mainVideo-emms" id="subtitle"]] +[[!template text="""This is a good example which I bring up""" start="00:34:14.210" video="mainVideo-emms" id="subtitle"]] +[[!template text="""of where a maintainer needs to""" start="00:34:16.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""solicit opinions from developers,""" start="00:34:18.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""both the Emacs developers,""" start="00:34:21.309" video="mainVideo-emms" id="subtitle"]] +[[!template text="""asking them where packages should save state,""" start="00:34:23.900" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and the Emms developers, and also users.""" start="00:34:28.170" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Then, the maintainer needs to""" start="00:34:33.170" video="mainVideo-emms" id="subtitle"]] +[[!template text="""carefully choose a path forward.""" start="00:34:35.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It is typical of the kind of issue you have to have in mind""" start="00:34:38.020" video="mainVideo-emms" id="subtitle"]] +[[!template text="""when you're maintaining a package.""" start="00:34:41.560" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Development policies: Interface language""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Development Policies: Interface Language.""" start="00:34:44.849" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A maintainer of an interactive program such as Emms""" start="00:34:49.160" video="mainVideo-emms" id="subtitle"]] +[[!template text="""needs to think about user interaction.""" start="00:34:52.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Emms doesn't use key bindings which are familiar""" start="00:34:55.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to people who are used to GUI media players,""" start="00:34:58.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and that can, and has, caused friction.""" start="00:35:02.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Some new users are confused when they press the spacebar""" start="00:35:06.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on an entry in the Emms browser,""" start="00:35:09.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""only to find that nothing starts playing.""" start="00:35:12.530" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Indeed, all that does is to expand the browser tree""" start="00:35:15.460" video="mainVideo-emms" id="subtitle"]] +[[!template text="""at that point.""" start="00:35:18.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Then they might press RET on the same entry,""" start="00:35:20.470" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and be further frustrated at the continuing silence.""" start="00:35:23.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Since what return does is just to add that entry at point""" start="00:35:28.260" video="mainVideo-emms" id="subtitle"]] +[[!template text="""to the current playlist.""" start="00:35:33.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""The discussion then arises""" start="00:35:36.170" video="mainVideo-emms" id="subtitle"]] +[[!template text="""about how Emms should handle that situation.""" start="00:35:37.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""On one hand, we want to make it as easy as possible""" start="00:35:41.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""for new users to learn Emms,""" start="00:35:45.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and adopt a do-what-I-mean interface approach.""" start="00:35:48.820" video="mainVideo-emms" id="subtitle"]] +[[!template text="""On the other hand, this is an Emacs project.""" start="00:35:52.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It isn't a stand-alone GUI media player,""" start="00:35:56.750" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and should integrate into Emacs,""" start="00:35:59.440" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and serve Emacs users first and foremost.""" start="00:36:01.400" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Development policies: Freedom""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Development policies: Freedom.""" start="00:36:05.980" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Another maintainer job is to think of Emms' posture""" start="00:36:10.290" video="mainVideo-emms" id="subtitle"]] +[[!template text="""in regards to software freedom.""" start="00:36:15.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Here are a few examples.""" start="00:36:17.380" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Back with MP3 was still a patent encumbered format,""" start="00:36:19.730" video="mainVideo-emms" id="subtitle"]] +[[!template text="""we pushed hard for Vorbis everywhere""" start="00:36:23.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""along with the PlayOgg campaign.""" start="00:36:26.081" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A then popular music streaming service,""" start="00:36:29.640" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which will remain unnamed,""" start="00:36:32.700" video="mainVideo-emms" id="subtitle"]] +[[!template text="""changed their stance towards third-party applications,""" start="00:36:34.930" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and required individual API keys which could not be shared.""" start="00:36:38.620" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We stood firm, said "no",""" start="00:36:43.130" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and removed support for that service.""" start="00:36:45.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A recent suggestion to add support for YouTube""" start="00:36:48.670" video="mainVideo-emms" id="subtitle"]] +[[!template text="""was also nixed,""" start="00:36:51.360" video="mainVideo-emms" id="subtitle"]] +[[!template text="""because the particular backend""" start="00:36:53.890" video="mainVideo-emms" id="subtitle"]] +[[!template text="""was found to download and run proprietary javascript""" start="00:36:55.680" video="mainVideo-emms" id="subtitle"]] +[[!template text="""on the user's machine.""" start="00:36:58.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Saying no to potentially useful or wanted features""" start="00:37:01.850" video="mainVideo-emms" id="subtitle"]] +[[!template text="""because it involves non-free software""" start="00:37:05.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is often an unpopular decision and can alienate people.""" start="00:37:07.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""A maintainer needs to think carefully""" start="00:37:13.490" video="mainVideo-emms" id="subtitle"]] +[[!template text="""about each of these decisions,""" start="00:37:15.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""as they are rarely straightforward and one-sided.""" start="00:37:17.400" video="mainVideo-emms" id="subtitle"]] +[[!template text="""And as you see above, they also change over time""" start="00:37:21.920" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and need to be re-evaluated.""" start="00:37:25.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""One of the most useful things a maintainer can do""" start="00:37:30.300" video="mainVideo-emms" id="subtitle"]] +[[!template text="""is to coordinate the development effort""" start="00:37:33.000" video="mainVideo-emms" id="subtitle"]] +[[!template text="""and help new people join the project.""" start="00:37:35.520" video="mainVideo-emms" id="subtitle"]] +[[!template text="""In light of that, if you want to work on a project""" start="00:37:39.230" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which has a bit of everything,""" start="00:37:41.840" video="mainVideo-emms" id="subtitle"]] +[[!template text="""you could do worse than hacking on Emms.""" start="00:37:44.060" video="mainVideo-emms" id="subtitle"]] +[[!template text="""There is inter-process communication,""" start="00:37:47.810" video="mainVideo-emms" id="subtitle"]] +[[!template text="""displaying graphics, parsing binary files,""" start="00:37:49.720" video="mainVideo-emms" id="subtitle"]] +[[!template text="""caching, asynchronous processes, user interface design.""" start="00:37:52.480" video="mainVideo-emms" id="subtitle"]] +[[!template text="""We also are a project that insists on""" start="00:37:56.530" video="mainVideo-emms" id="subtitle"]] +[[!template text="""keeping a well-written and up-to-date manual.""" start="00:37:59.600" video="mainVideo-emms" id="subtitle"]] +[[!template text="""If you can write English or hack Emacs Lisp at all,""" start="00:38:02.960" video="mainVideo-emms" id="subtitle"]] +[[!template text="""chances are that there is something you can do for Emms.""" start="00:38:06.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Just saying.""" start="00:38:09.940" video="mainVideo-emms" id="subtitle"]] + +[[!template new="1" text="""Acknowledgements""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]] + +[[!template text="""Acknowledgements:""" start="00:38:12.370" video="mainVideo-emms" id="subtitle"]] +[[!template text="""I'd like to express my deep gratitude for all of the people""" start="00:38:14.190" video="mainVideo-emms" id="subtitle"]] +[[!template text="""who have hacked on Emms""" start="00:38:18.080" video="mainVideo-emms" id="subtitle"]] +[[!template text="""during my time as a maintainer and before it.""" start="00:38:19.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""It is often the case that I'm just the person""" start="00:38:23.170" video="mainVideo-emms" id="subtitle"]] +[[!template text="""holding the rudder and steering the ship,""" start="00:38:25.760" video="mainVideo-emms" id="subtitle"]] +[[!template text="""with all of these developers""" start="00:38:28.560" video="mainVideo-emms" id="subtitle"]] +[[!template text="""rowing furiously to provide the power""" start="00:38:30.040" video="mainVideo-emms" id="subtitle"]] +[[!template text="""which actually moves the ship forward.""" start="00:38:33.180" video="mainVideo-emms" id="subtitle"]] +[[!template text="""Thank you to all.""" start="00:38:36.370" video="mainVideo-emms" id="subtitle"]] + + + +Captioner: yoni + +<a name="emms-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:06.140" video="qanda-emms" id="subtitle"]] +[[!template text="""Hi, Yanny, how are you doing?""" start="00:00:07.580" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Excellent, excellent. Doing very well,""" start="00:00:10.460" video="qanda-emms" id="subtitle"]] +[[!template text="""thank you.""" start="00:00:10.960" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: So that was a wonderful presentation.""" start="00:00:13.980" video="qanda-emms" id="subtitle"]] +[[!template text="""I first want to commend you on your ability""" start="00:00:17.440" video="qanda-emms" id="subtitle"]] +[[!template text="""to both do the how the user encounters the""" start="00:00:22.040" video="qanda-emms" id="subtitle"]] +[[!template text="""MMS, how the developer might be interested""" start="00:00:24.960" video="qanda-emms" id="subtitle"]] +[[!template text="""about how it works, and I feel like you've""" start="00:00:28.680" video="qanda-emms" id="subtitle"]] +[[!template text="""done a wonderful job of talking to absolutely""" start="00:00:30.720" video="qanda-emms" id="subtitle"]] +[[!template text="""everyone in our audience,""" start="00:00:31.800" video="qanda-emms" id="subtitle"]] +[[!template text="""whatever their skill level.""" start="00:00:32.840" video="qanda-emms" id="subtitle"]] +[[!template text="""So thank you so much for this.""" start="00:00:34.120" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, that of course runs the risk of being,""" start="00:00:37.800" video="qanda-emms" id="subtitle"]] +[[!template text="""you know, good for some,""" start="00:00:41.580" video="qanda-emms" id="subtitle"]] +[[!template text="""but excellent for none.""" start="00:00:42.980" video="qanda-emms" id="subtitle"]] +[[!template text="""But hopefully the result is that people can""" start="00:00:46.960" video="qanda-emms" id="subtitle"]] +[[!template text="""get something out of it.""" start="00:00:48.380" video="qanda-emms" id="subtitle"]] +[[!template text="""I think it's very important to make sure that""" start="00:00:51.820" video="qanda-emms" id="subtitle"]] +[[!template text="""everyone feels that they have access to""" start="00:00:55.680" video="qanda-emms" id="subtitle"]] +[[!template text="""Emacs, they have access to EMMS,""" start="00:00:57.239" video="qanda-emms" id="subtitle"]] +[[!template text="""that they can do this in whatever capacity""" start="00:01:00.640" video="qanda-emms" id="subtitle"]] +[[!template text="""they want. It's for everyone.""" start="00:01:02.800" video="qanda-emms" id="subtitle"]] +[[!template text="""I really believe that.""" start="00:01:05.440" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, and I understand this risk about having""" start="00:01:09.440" video="qanda-emms" id="subtitle"]] +[[!template text="""a talk that is kind of a jack-of-all-trades,""" start="00:01:10.680" video="qanda-emms" id="subtitle"]] +[[!template text="""but frankly you've done a wonderful job of""" start="00:01:14.440" video="qanda-emms" id="subtitle"]] +[[!template text="""making it interesting for everyone,""" start="00:01:16.560" video="qanda-emms" id="subtitle"]] +[[!template text="""because also I think the parts worked really""" start="00:01:19.540" video="qanda-emms" id="subtitle"]] +[[!template text="""well, and people always had something to look""" start="00:01:21.820" video="qanda-emms" id="subtitle"]] +[[!template text="""forward in terms of their expertise of what""" start="00:01:24.240" video="qanda-emms" id="subtitle"]] +[[!template text="""particularly spoke to them.""" start="00:01:25.360" video="qanda-emms" id="subtitle"]] +[[!template text="""So thank you again. What I'm going to do,""" start="00:01:27.560" video="qanda-emms" id="subtitle"]] +[[!template text="""we have about 14 minutes of Q&A,""" start="00:01:29.440" video="qanda-emms" id="subtitle"]] +[[!template text="""So I'll invite people,""" start="00:01:30.760" video="qanda-emms" id="subtitle"]] +[[!template text="""as I usually do, to add their questions in""" start="00:01:33.400" video="qanda-emms" id="subtitle"]] +[[!template text="""the other pad that you can find on the talks""" start="00:01:35.320" video="qanda-emms" id="subtitle"]] +[[!template text="""or on IRC. You can also join us in the""" start="00:01:38.560" video="qanda-emms" id="subtitle"]] +[[!template text="""discussion. I will make sure this time to""" start="00:01:40.200" video="qanda-emms" id="subtitle"]] +[[!template text="""ping Sasha to open the Q&A.""" start="00:01:42.180" video="qanda-emms" id="subtitle"]] +[[!template text="""Can you open, I-V-E-M-M-S.""" start="00:01:44.680" video="qanda-emms" id="subtitle"]] +[[!template text="""All right, and in the meantime,""" start="00:01:48.700" video="qanda-emms" id="subtitle"]] +[[!template text="""whilst we wait for people to join us in the""" start="00:01:50.940" video="qanda-emms" id="subtitle"]] +[[!template text="""room, I will start reading some of the""" start="00:01:52.360" video="qanda-emms" id="subtitle"]] +[[!template text="""questions off the pad.""" start="00:01:53.960" video="qanda-emms" id="subtitle"]] +[[!template text="""So we had the first question about the music""" start="00:01:57.180" video="qanda-emms" id="subtitle"]] +[[!template text="""that we played during the launch break,""" start="00:01:58.780" video="qanda-emms" id="subtitle"]] +[[!template text="""and It's 1 of our dear friends,""" start="00:02:01.320" video="qanda-emms" id="subtitle"]] +[[!template text="""Shoshin Ganshangroh, a free album,""" start="00:02:05.200" video="qanda-emms" id="subtitle"]] +[[!template text="""Basement Dazed. I've put the link in the pad""" start="00:02:09.360" video="qanda-emms" id="subtitle"]] +[[!template text="""and we've been using Shoshin's music for the""" start="00:02:12.520" video="qanda-emms" id="subtitle"]] +[[!template text="""last 3 years, I think,""" start="00:02:13.420" video="qanda-emms" id="subtitle"]] +[[!template text="""and everyone, people are so excited.""" start="00:02:15.060" video="qanda-emms" id="subtitle"]] +[[!template text="""Some people say, why is it so noisy in the""" start="00:02:17.220" video="qanda-emms" id="subtitle"]] +[[!template text="""background? But it's just because there's 1""" start="00:02:18.480" video="qanda-emms" id="subtitle"]] +[[!template text="""part of the different tracks that sounds like""" start="00:02:20.940" video="qanda-emms" id="subtitle"]] +[[!template text="""static and it always gets people.""" start="00:02:24.280" video="qanda-emms" id="subtitle"]] +[[!template text="""We should probably do something about this,""" start="00:02:25.900" video="qanda-emms" id="subtitle"]] +[[!template text="""but frankly it makes me laugh every time.""" start="00:02:27.520" video="qanda-emms" id="subtitle"]] +[[!template text="""Starting with the first actual question,""" start="00:02:30.460" video="qanda-emms" id="subtitle"]] +[[!template text="""well actually it's a bit of a meme question,""" start="00:02:32.640" video="qanda-emms" id="subtitle"]] +[[!template text="""for the next Emacs Con,""" start="00:02:34.340" video="qanda-emms" id="subtitle"]] +[[!template text="""could we have an eMMS playlist to follow the""" start="00:02:37.280" video="qanda-emms" id="subtitle"]] +[[!template text="""talks along?""" start="00:02:37.760" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh that sounds like an excellent idea but I""" start="00:02:43.940" video="qanda-emms" id="subtitle"]] +[[!template text="""guess I'm wondering what they mean exactly by""" start="00:02:46.560" video="qanda-emms" id="subtitle"]] +[[!template text="""that. Is that a shareable playlist that we""" start="00:02:48.960" video="qanda-emms" id="subtitle"]] +[[!template text="""can pass along and just have people go to a""" start="00:02:54.560" video="qanda-emms" id="subtitle"]] +[[!template text="""URL and just be able to play that?""" start="00:02:56.320" video="qanda-emms" id="subtitle"]] +[[!template text="""I think that's an excellent idea.""" start="00:02:58.620" video="qanda-emms" id="subtitle"]] +[[!template text="""It should be a relatively low bandwidth""" start="00:03:00.660" video="qanda-emms" id="subtitle"]] +[[!template text="""process.""" start="00:03:01.780" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: And it's typically the type of stuff that is""" start="00:03:06.580" video="qanda-emms" id="subtitle"]] +[[!template text="""right of our alley. I'm thinking about the""" start="00:03:10.840" video="qanda-emms" id="subtitle"]] +[[!template text="""ICS file that we produce for all the events""" start="00:03:15.480" video="qanda-emms" id="subtitle"]] +[[!template text="""that are related to Emacs.""" start="00:03:17.020" video="qanda-emms" id="subtitle"]] +[[!template text="""You know the workshop that happened in Paris""" start="00:03:18.820" video="qanda-emms" id="subtitle"]] +[[!template text="""or in New York, LA? Sasha compiles a list of""" start="00:03:22.360" video="qanda-emms" id="subtitle"]] +[[!template text="""all the events and when they happen,""" start="00:03:23.560" video="qanda-emms" id="subtitle"]] +[[!template text="""and then we provide this to everyone.""" start="00:03:25.360" video="qanda-emms" id="subtitle"]] +[[!template text="""And we can do very much the same with""" start="00:03:27.040" video="qanda-emms" id="subtitle"]] +[[!template text="""EmacsConf. You could have a playlist for""" start="00:03:29.380" video="qanda-emms" id="subtitle"]] +[[!template text="""EmacsConf 2023, where you get all the talks""" start="00:03:31.980" video="qanda-emms" id="subtitle"]] +[[!template text="""and perhaps also the Q&A sessions so that you""" start="00:03:34.760" video="qanda-emms" id="subtitle"]] +[[!template text="""can relieve the 16 hours of content that""" start="00:03:36.780" video="qanda-emms" id="subtitle"]] +[[!template text="""we're producing. That'd be great,""" start="00:03:37.800" video="qanda-emms" id="subtitle"]] +[[!template text="""that's a great idea I think.""" start="00:03:39.240" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Absolutely, and if there are any limitations""" start="00:03:43.660" video="qanda-emms" id="subtitle"]] +[[!template text="""in the Emacs playlist structure that things""" start="00:03:48.060" video="qanda-emms" id="subtitle"]] +[[!template text="""are missing in the playlist structure,""" start="00:03:49.640" video="qanda-emms" id="subtitle"]] +[[!template text="""then it would be a great impetus to implement""" start="00:03:53.040" video="qanda-emms" id="subtitle"]] +[[!template text="""those and extend the playlist structure.""" start="00:03:55.080" video="qanda-emms" id="subtitle"]] +[[!template text="""Because after all, it's Lisp,""" start="00:03:57.380" video="qanda-emms" id="subtitle"]] +[[!template text="""it really is data and functions all mixed""" start="00:04:01.360" video="qanda-emms" id="subtitle"]] +[[!template text="""together, so we can do that.""" start="00:04:03.160" video="qanda-emms" id="subtitle"]] +[[!template text="""It would be very interesting to dive into it""" start="00:04:06.180" video="qanda-emms" id="subtitle"]] +[[!template text="""and see what's missing.""" start="00:04:07.000" video="qanda-emms" id="subtitle"]] +[[!template text="""That would be even more informative than what""" start="00:04:10.020" video="qanda-emms" id="subtitle"]] +[[!template text="""it can do.""" start="00:04:10.680" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Great. All right, moving on to the next""" start="00:04:14.900" video="qanda-emms" id="subtitle"]] +[[!template text="""question. I like to use music and audiobooks""" start="00:04:17.000" video="qanda-emms" id="subtitle"]] +[[!template text="""in very different ways.""" start="00:04:18.279" video="qanda-emms" id="subtitle"]] +[[!template text="""With music, I like shuffling by artists and""" start="00:04:21.440" video="qanda-emms" id="subtitle"]] +[[!template text="""with audiobooks, I want to read sequentially""" start="00:04:23.300" video="qanda-emms" id="subtitle"]] +[[!template text="""and pick the same playlist over a couple of""" start="00:04:27.260" video="qanda-emms" id="subtitle"]] +[[!template text="""days or weeks. Do you have any tips for using""" start="00:04:29.240" video="qanda-emms" id="subtitle"]] +[[!template text="""these 2 opposing media's workflow?""" start="00:04:30.860" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, so I have similar situations where I""" start="00:04:38.520" video="qanda-emms" id="subtitle"]] +[[!template text="""have very long endurance races that I watch,""" start="00:04:43.920" video="qanda-emms" id="subtitle"]] +[[!template text="""which I do all my media consumption is done""" start="00:04:47.160" video="qanda-emms" id="subtitle"]] +[[!template text="""via EMMS. I also listened to music.""" start="00:04:50.720" video="qanda-emms" id="subtitle"]] +[[!template text="""And so there's also a middle in between.""" start="00:04:54.020" video="qanda-emms" id="subtitle"]] +[[!template text="""There's 1 end in which you have popular""" start="00:04:57.980" video="qanda-emms" id="subtitle"]] +[[!template text="""music. These are standalone songs that are""" start="00:05:01.560" video="qanda-emms" id="subtitle"]] +[[!template text="""typically 3 to 4 minute long and they are""" start="00:05:04.860" video="qanda-emms" id="subtitle"]] +[[!template text="""best consumed in a random you know order""" start="00:05:07.900" video="qanda-emms" id="subtitle"]] +[[!template text="""because they are designed around,""" start="00:05:09.780" video="qanda-emms" id="subtitle"]] +[[!template text="""you know, a commercial radio distribution.""" start="00:05:12.080" video="qanda-emms" id="subtitle"]] +[[!template text="""I guess I'm dating myself by saying radio,""" start="00:05:15.140" video="qanda-emms" id="subtitle"]] +[[!template text="""but you know all the that.""" start="00:05:17.120" video="qanda-emms" id="subtitle"]] +[[!template text="""In the middle there are longer works like""" start="00:05:20.940" video="qanda-emms" id="subtitle"]] +[[!template text="""musicals and classical where these are units""" start="00:05:26.100" video="qanda-emms" id="subtitle"]] +[[!template text="""where they might be very long but you would""" start="00:05:30.200" video="qanda-emms" id="subtitle"]] +[[!template text="""have several tracks that you do want to have""" start="00:05:33.160" video="qanda-emms" id="subtitle"]] +[[!template text="""1 after the other, and you want to be able to""" start="00:05:35.600" video="qanda-emms" id="subtitle"]] +[[!template text="""stop and go to the next track.""" start="00:05:38.360" video="qanda-emms" id="subtitle"]] +[[!template text="""And then at the very, very other end,""" start="00:05:40.760" video="qanda-emms" id="subtitle"]] +[[!template text="""you have extremely long format,""" start="00:05:44.020" video="qanda-emms" id="subtitle"]] +[[!template text="""which is included in a single file,""" start="00:05:46.360" video="qanda-emms" id="subtitle"]] +[[!template text="""such as an audio book,""" start="00:05:47.920" video="qanda-emms" id="subtitle"]] +[[!template text="""a movie, a tutorial that you're watching,""" start="00:05:51.400" video="qanda-emms" id="subtitle"]] +[[!template text="""or in my case, you know,""" start="00:05:54.100" video="qanda-emms" id="subtitle"]] +[[!template text="""a 24 hour, the 24 hours of Le Mans,""" start="00:05:56.580" video="qanda-emms" id="subtitle"]] +[[!template text="""just the 24 hour race,""" start="00:05:58.040" video="qanda-emms" id="subtitle"]] +[[!template text="""which, you know, that's 1 heck of a file.""" start="00:06:01.120" video="qanda-emms" id="subtitle"]] +[[!template text="""So that is 1 of the reasons eMMS has a number""" start="00:06:07.380" video="qanda-emms" id="subtitle"]] +[[!template text="""of elements such as the meta playlist mode""" start="00:06:10.160" video="qanda-emms" id="subtitle"]] +[[!template text="""and multiple playlists.""" start="00:06:11.260" video="qanda-emms" id="subtitle"]] +[[!template text="""So I would say that they would open a number""" start="00:06:16.160" video="qanda-emms" id="subtitle"]] +[[!template text="""of playlists in eMMS, generate a number of""" start="00:06:19.540" video="qanda-emms" id="subtitle"]] +[[!template text="""playlists that have each class of media.""" start="00:06:26.040" video="qanda-emms" id="subtitle"]] +[[!template text="""So the shorter form songs,""" start="00:06:28.940" video="qanda-emms" id="subtitle"]] +[[!template text="""the more pop songs you have in 1 playlist""" start="00:06:33.580" video="qanda-emms" id="subtitle"]] +[[!template text="""where you can sort, shuffle it,""" start="00:06:35.920" video="qanda-emms" id="subtitle"]] +[[!template text="""you know, save it, do whatever you want.""" start="00:06:37.800" video="qanda-emms" id="subtitle"]] +[[!template text="""Then a separate playlist for the long form""" start="00:06:41.980" video="qanda-emms" id="subtitle"]] +[[!template text="""stuff. Sometimes that playlist will have even""" start="00:06:44.340" video="qanda-emms" id="subtitle"]] +[[!template text="""only 1 file in it if it's long enough,""" start="00:06:48.960" video="qanda-emms" id="subtitle"]] +[[!template text="""then have a key combination which takes you""" start="00:06:52.120" video="qanda-emms" id="subtitle"]] +[[!template text="""directly to 1 playlist or the other,""" start="00:06:55.280" video="qanda-emms" id="subtitle"]] +[[!template text="""and within the long-form playlist,""" start="00:06:57.340" video="qanda-emms" id="subtitle"]] +[[!template text="""looking at the bookmarking function of EMMS,""" start="00:07:01.980" video="qanda-emms" id="subtitle"]] +[[!template text="""which is designed around being able to save a""" start="00:07:06.560" video="qanda-emms" id="subtitle"]] +[[!template text="""particular stopping point or multiple""" start="00:07:10.080" video="qanda-emms" id="subtitle"]] +[[!template text="""stopping points, bookmarks in the audio,""" start="00:07:12.240" video="qanda-emms" id="subtitle"]] +[[!template text="""and being able to jump back into that audio.""" start="00:07:15.300" video="qanda-emms" id="subtitle"]] +[[!template text="""The point to remember about the bookmarking""" start="00:07:18.600" video="qanda-emms" id="subtitle"]] +[[!template text="""feature is that sometimes it really depends""" start="00:07:23.720" video="qanda-emms" id="subtitle"]] +[[!template text="""on you have to have the right back end.""" start="00:07:25.960" video="qanda-emms" id="subtitle"]] +[[!template text="""Not all back ends with replaying,""" start="00:07:28.900" video="qanda-emms" id="subtitle"]] +[[!template text="""not all types of media work well with a""" start="00:07:33.120" video="qanda-emms" id="subtitle"]] +[[!template text="""bookmarking function, and bug reports""" start="00:07:36.200" video="qanda-emms" id="subtitle"]] +[[!template text="""welcome. But also there are other backends""" start="00:07:38.960" video="qanda-emms" id="subtitle"]] +[[!template text="""such as MPV where you can configure it that""" start="00:07:44.820" video="qanda-emms" id="subtitle"]] +[[!template text="""when you quit playing the song or the media""" start="00:07:49.860" video="qanda-emms" id="subtitle"]] +[[!template text="""with, you know, cue internally.""" start="00:07:55.080" video="qanda-emms" id="subtitle"]] +[[!template text="""So sometimes the back end has to continue""" start="00:07:58.140" video="qanda-emms" id="subtitle"]] +[[!template text="""playing that song. That's what I do in order""" start="00:08:04.400" video="qanda-emms" id="subtitle"]] +[[!template text="""to, on 1 hand, switch over to a...""" start="00:08:07.560" video="qanda-emms" id="subtitle"]] +[[!template text="""I want to hear... I'm coding,""" start="00:08:09.620" video="qanda-emms" id="subtitle"]] +[[!template text="""I want to hear some music,""" start="00:08:10.800" video="qanda-emms" id="subtitle"]] +[[!template text="""I go to my playlist of short songs,""" start="00:08:12.860" video="qanda-emms" id="subtitle"]] +[[!template text="""then I'm sitting back and I want to watch a""" start="00:08:16.280" video="qanda-emms" id="subtitle"]] +[[!template text="""long form something from where I left off and""" start="00:08:20.340" video="qanda-emms" id="subtitle"]] +[[!template text="""there I go to the other playlist and use""" start="00:08:22.420" video="qanda-emms" id="subtitle"]] +[[!template text="""bookmarks or the features of the back end""" start="00:08:26.140" video="qanda-emms" id="subtitle"]] +[[!template text="""that I'm using.""" start="00:08:26.780" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, thank you for the answer.""" start="00:08:31.200" video="qanda-emms" id="subtitle"]] +[[!template text="""We have about 7 minutes and we have more""" start="00:08:34.440" video="qanda-emms" id="subtitle"]] +[[!template text="""questions, so that's great.""" start="00:08:35.280" video="qanda-emms" id="subtitle"]] +[[!template text="""Moving on to the next 1.""" start="00:08:37.440" video="qanda-emms" id="subtitle"]] +[[!template text="""Is there a way to search a music selection by""" start="00:08:40.080" video="qanda-emms" id="subtitle"]] +[[!template text="""lyrics? Assuming those lyrics are in the""" start="00:08:42.080" video="qanda-emms" id="subtitle"]] +[[!template text="""metadata or are available elsewhere,""" start="00:08:43.580" video="qanda-emms" id="subtitle"]] +[[!template text="""it would be neat to call songs up from the""" start="00:08:46.300" video="qanda-emms" id="subtitle"]] +[[!template text="""lyrics to the song. Perhaps is this""" start="00:08:48.660" video="qanda-emms" id="subtitle"]] +[[!template text="""implemented so that you can all aliases,""" start="00:08:50.860" video="qanda-emms" id="subtitle"]] +[[!template text="""so they can use aliases for the song that you""" start="00:08:54.560" video="qanda-emms" id="subtitle"]] +[[!template text="""like, defining those aliases or shortcuts""" start="00:08:56.640" video="qanda-emms" id="subtitle"]] +[[!template text="""either inside or outside eMMS?""" start="00:08:58.200" video="qanda-emms" id="subtitle"]] +[[!template text="""Okay, so I think you've got 2 questions.""" start="00:08:59.760" video="qanda-emms" id="subtitle"]] +[[!template text="""First about the lyrics and then the aliases.""" start="00:09:01.500" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so it's effectively not possible to do""" start="00:09:08.360" video="qanda-emms" id="subtitle"]] +[[!template text="""right now. There's a sense in which it is,""" start="00:09:10.880" video="qanda-emms" id="subtitle"]] +[[!template text="""but not really. What actually needs to""" start="00:09:14.820" video="qanda-emms" id="subtitle"]] +[[!template text="""happen? The problem is that the caching""" start="00:09:18.840" video="qanda-emms" id="subtitle"]] +[[!template text="""system is extremely naive.""" start="00:09:21.780" video="qanda-emms" id="subtitle"]] +[[!template text="""It's just really a hash that's written to""" start="00:09:24.800" video="qanda-emms" id="subtitle"]] +[[!template text="""disk. And maybe now with SQLite integration""" start="00:09:30.560" video="qanda-emms" id="subtitle"]] +[[!template text="""or other or just the fact that computers have""" start="00:09:35.200" video="qanda-emms" id="subtitle"]] +[[!template text="""a lot more speed and space than they used to""" start="00:09:39.220" video="qanda-emms" id="subtitle"]] +[[!template text="""have, we need to expand the cache to be a lot""" start="00:09:43.340" video="qanda-emms" id="subtitle"]] +[[!template text="""more greedy and a lot more flexible so that""" start="00:09:47.020" video="qanda-emms" id="subtitle"]] +[[!template text="""we can store things such as lyrics in as part""" start="00:09:52.580" video="qanda-emms" id="subtitle"]] +[[!template text="""of the metadata. There's no reason not to do""" start="00:09:56.000" video="qanda-emms" id="subtitle"]] +[[!template text="""that. Unless your collection would have to be""" start="00:10:02.220" video="qanda-emms" id="subtitle"]] +[[!template text="""truly enormous in order to slow things down.""" start="00:10:06.560" video="qanda-emms" id="subtitle"]] +[[!template text="""We wouldn't even need to compress the lyrics""" start="00:10:09.860" video="qanda-emms" id="subtitle"]] +[[!template text="""in order to store them like that.""" start="00:10:11.320" video="qanda-emms" id="subtitle"]] +[[!template text="""But that is a goal. So our rewrite of the""" start="00:10:15.920" video="qanda-emms" id="subtitle"]] +[[!template text="""cache is currently in progress,""" start="00:10:17.840" video="qanda-emms" id="subtitle"]] +[[!template text="""and the goal is to have a system where you""" start="00:10:21.680" video="qanda-emms" id="subtitle"]] +[[!template text="""can put any related information,""" start="00:10:24.920" video="qanda-emms" id="subtitle"]] +[[!template text="""including lyrics, and map that to a""" start="00:10:30.060" video="qanda-emms" id="subtitle"]] +[[!template text="""particular piece of the media,""" start="00:10:31.400" video="qanda-emms" id="subtitle"]] +[[!template text="""be it a URL or a... So you could have in a""" start="00:10:36.900" video="qanda-emms" id="subtitle"]] +[[!template text="""sense, you could have a URL to a lecture and""" start="00:10:40.080" video="qanda-emms" id="subtitle"]] +[[!template text="""the metadata associated would be some text,""" start="00:10:44.440" video="qanda-emms" id="subtitle"]] +[[!template text="""some notes or something else like that.""" start="00:10:47.600" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, so that was about the lyrics.""" start="00:10:51.140" video="qanda-emms" id="subtitle"]] +[[!template text="""I'm not sure how it answers the question""" start="00:10:53.040" video="qanda-emms" id="subtitle"]] +[[!template text="""about the aliases. I mean you can still""" start="00:10:54.560" video="qanda-emms" id="subtitle"]] +[[!template text="""filter what you've mentioned about the cache.""" start="00:10:56.380" video="qanda-emms" id="subtitle"]] +[[!template text="""I think it's... Do we consider the aliases to""" start="00:10:59.240" video="qanda-emms" id="subtitle"]] +[[!template text="""be anything within the metadata?""" start="00:11:01.120" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: No, you're right. That is a separate""" start="00:11:08.040" video="qanda-emms" id="subtitle"]] +[[!template text="""question. I don't have a great answer for""" start="00:11:12.380" video="qanda-emms" id="subtitle"]] +[[!template text="""that right now.""" start="00:11:12.980" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, great. Well, we'll put a pin on this""" start="00:11:16.280" video="qanda-emms" id="subtitle"]] +[[!template text="""and we can return to it.""" start="00:11:17.440" video="qanda-emms" id="subtitle"]] +[[!template text="""You can return to it at a later stage.""" start="00:11:19.690" video="qanda-emms" id="subtitle"]] +[[!template text="""Yeah. All right, moving on to the next""" start="00:11:21.880" video="qanda-emms" id="subtitle"]] +[[!template text="""question, then. I'll just,""" start="00:11:22.800" video="qanda-emms" id="subtitle"]] +[[!template text="""we'll put a pin on this.""" start="00:11:25.180" video="qanda-emms" id="subtitle"]] +[[!template text="""All right, next question.""" start="00:11:26.420" video="qanda-emms" id="subtitle"]] +[[!template text="""Are there plans for managing metadata with""" start="00:11:29.020" video="qanda-emms" id="subtitle"]] +[[!template text="""online resource backends,""" start="00:11:30.040" video="qanda-emms" id="subtitle"]] +[[!template text="""i.e. Discogs or music brains?""" start="00:11:32.020" video="qanda-emms" id="subtitle"]] +[[!template text="""What about something like Beats and Emacs or""" start="00:11:34.360" video="qanda-emms" id="subtitle"]] +[[!template text="""part of the EMMS?""" start="00:11:34.920" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so that's an active discussion on the""" start="00:11:40.520" video="qanda-emms" id="subtitle"]] +[[!template text="""mailing list right now.""" start="00:11:42.140" video="qanda-emms" id="subtitle"]] +[[!template text="""We don't want to replicate what Beats does""" start="00:11:47.340" video="qanda-emms" id="subtitle"]] +[[!template text="""very, very well in eMMS.""" start="00:11:49.680" video="qanda-emms" id="subtitle"]] +[[!template text="""We don't want a clunky interface with Beats.""" start="00:11:53.860" video="qanda-emms" id="subtitle"]] +[[!template text="""We do want some kind of,""" start="00:11:57.440" video="qanda-emms" id="subtitle"]] +[[!template text="""and so it's hard to tell exactly where to""" start="00:12:00.100" video="qanda-emms" id="subtitle"]] +[[!template text="""draw that line. So the big answer is yes,""" start="00:12:03.160" video="qanda-emms" id="subtitle"]] +[[!template text="""absolutely, there is a plan to do that.""" start="00:12:04.960" video="qanda-emms" id="subtitle"]] +[[!template text="""The details become complicated because for 1""" start="00:12:09.760" video="qanda-emms" id="subtitle"]] +[[!template text="""thing, the backend, the database that""" start="00:12:15.900" video="qanda-emms" id="subtitle"]] +[[!template text="""MusicBrain uses, AcoustID,""" start="00:12:18.140" video="qanda-emms" id="subtitle"]] +[[!template text="""I don't remember if AcoustID is the binary or""" start="00:12:21.500" video="qanda-emms" id="subtitle"]] +[[!template text="""the database, but that's actually for""" start="00:12:25.680" video="qanda-emms" id="subtitle"]] +[[!template text="""non-commercial use only.""" start="00:12:27.500" video="qanda-emms" id="subtitle"]] +[[!template text="""So not only do you need to compile a piece of""" start="00:12:31.320" video="qanda-emms" id="subtitle"]] +[[!template text="""software on your computer as a shim,""" start="00:12:35.280" video="qanda-emms" id="subtitle"]] +[[!template text="""which is what you need to do in order to set""" start="00:12:37.540" video="qanda-emms" id="subtitle"]] +[[!template text="""up beats to do fingerprinting.""" start="00:12:39.180" video="qanda-emms" id="subtitle"]] +[[!template text="""But it also crosses this line between""" start="00:12:44.720" video="qanda-emms" id="subtitle"]] +[[!template text="""completely free software to completely free""" start="00:12:47.660" video="qanda-emms" id="subtitle"]] +[[!template text="""software interfacing with a non-commercial""" start="00:12:49.400" video="qanda-emms" id="subtitle"]] +[[!template text="""only service. So a lot of the discussion""" start="00:12:56.000" video="qanda-emms" id="subtitle"]] +[[!template text="""that's going on now is what is the contour?""" start="00:12:58.660" video="qanda-emms" id="subtitle"]] +[[!template text="""Where would be where we would be effective""" start="00:13:02.160" video="qanda-emms" id="subtitle"]] +[[!template text="""for EMMS to do management and where not?""" start="00:13:08.720" video="qanda-emms" id="subtitle"]] +[[!template text="""For 1 thing, I would love to be able to...""" start="00:13:11.600" video="qanda-emms" id="subtitle"]] +[[!template text="""1 thing that we definitely would love to be""" start="00:13:13.980" video="qanda-emms" id="subtitle"]] +[[!template text="""able to do is when you hit E on a file and""" start="00:13:18.340" video="qanda-emms" id="subtitle"]] +[[!template text="""you get all the metadata to be able to then""" start="00:13:21.540" video="qanda-emms" id="subtitle"]] +[[!template text="""give a command to say,""" start="00:13:23.000" video="qanda-emms" id="subtitle"]] +[[!template text="""hey, play to music brains and see if you can""" start="00:13:25.320" video="qanda-emms" id="subtitle"]] +[[!template text="""improve that metadata.""" start="00:13:26.200" video="qanda-emms" id="subtitle"]] +[[!template text="""Do you have better metadata,""" start="00:13:29.020" video="qanda-emms" id="subtitle"]] +[[!template text="""more complete metadata to complete that?""" start="00:13:33.400" video="qanda-emms" id="subtitle"]] +[[!template text="""That is definitely in the pipeline.""" start="00:13:35.840" video="qanda-emms" id="subtitle"]] +[[!template text="""How best to do it, that's a discussion.""" start="00:13:40.900" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, Yoni, we have about 2 minutes until we""" start="00:13:45.460" video="qanda-emms" id="subtitle"]] +[[!template text="""need to go to the next talk.""" start="00:13:46.960" video="qanda-emms" id="subtitle"]] +[[!template text="""Okay, I'll risk it. 1 more question and a""" start="00:13:52.960" video="qanda-emms" id="subtitle"]] +[[!template text="""short answer if you can.""" start="00:13:53.800" video="qanda-emms" id="subtitle"]] +[[!template text="""Have the developers considered using Emacs""" start="00:13:57.440" video="qanda-emms" id="subtitle"]] +[[!template text="""customized functionality to persistently""" start="00:13:59.060" video="qanda-emms" id="subtitle"]] +[[!template text="""store settings when using eMMS setup discover""" start="00:14:01.720" video="qanda-emms" id="subtitle"]] +[[!template text="""players?""" start="00:14:02.120" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, absolutely. That's another active place,""" start="00:14:08.000" video="qanda-emms" id="subtitle"]] +[[!template text="""especially with the discover players.""" start="00:14:11.840" video="qanda-emms" id="subtitle"]] +[[!template text="""How to do it exactly without annoying people""" start="00:14:14.440" video="qanda-emms" id="subtitle"]] +[[!template text="""and clobbering their own settings,""" start="00:14:17.840" video="qanda-emms" id="subtitle"]] +[[!template text="""we just need to be very careful about that.""" start="00:14:20.360" video="qanda-emms" id="subtitle"]] +[[!template text="""Yes, that's in the coming releases.""" start="00:14:23.040" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, well, Younif,""" start="00:14:26.520" video="qanda-emms" id="subtitle"]] +[[!template text="""thank you so much for your time.""" start="00:14:27.900" video="qanda-emms" id="subtitle"]] +[[!template text="""Feel free to stay in the room.""" start="00:14:29.440" video="qanda-emms" id="subtitle"]] +[[!template text="""I see that some people have started joining""" start="00:14:30.920" video="qanda-emms" id="subtitle"]] +[[!template text="""on BBB. If you have more questions,""" start="00:14:33.720" video="qanda-emms" id="subtitle"]] +[[!template text="""feel free to unmute yourself and ask them""" start="00:14:36.780" video="qanda-emms" id="subtitle"]] +[[!template text="""live. Younid, I could ask you also to perhaps""" start="00:14:39.520" video="qanda-emms" id="subtitle"]] +[[!template text="""answer the question. I've put the link to the""" start="00:14:41.600" video="qanda-emms" id="subtitle"]] +[[!template text="""pad in the BBB chat, so if you look at the...""" start="00:14:43.980" video="qanda-emms" id="subtitle"]] +[[!template text="""Here, I think, we're not mirrored on BBB.""" start="00:14:47.220" video="qanda-emms" id="subtitle"]] +[[!template text="""If you look at the left you should be able to""" start="00:14:49.080" video="qanda-emms" id="subtitle"]] +[[!template text="""see the chat and the questions and if you""" start="00:14:51.500" video="qanda-emms" id="subtitle"]] +[[!template text="""could just answer the last question that""" start="00:14:52.720" video="qanda-emms" id="subtitle"]] +[[!template text="""would be great. For us on the general track""" start="00:14:55.440" video="qanda-emms" id="subtitle"]] +[[!template text="""we will be moving to the next talk and""" start="00:14:57.980" video="qanda-emms" id="subtitle"]] +[[!template text="""Yannick do you have any last thing to say in""" start="00:14:59.700" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank everyone who put together the""" start="00:15:02.720" video="qanda-emms" id="subtitle"]] +[[!template text="""conference and thank you to everyone who""" start="00:15:04.320" video="qanda-emms" id="subtitle"]] +[[!template text="""helps with the EMMS.""" start="00:15:06.680" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: 10 seconds? All right,""" start="00:15:08.160" video="qanda-emms" id="subtitle"]] +[[!template text="""well, thank you so much,""" start="00:15:09.160" video="qanda-emms" id="subtitle"]] +[[!template text="""Yoni. We'll probably see you later.""" start="00:15:10.940" video="qanda-emms" id="subtitle"]] +[[!template text="""Bye-bye. Wonderful. And I think we are off""" start="00:15:17.720" video="qanda-emms" id="subtitle"]] +[[!template text="""air. Thank you so much,""" start="00:15:18.620" video="qanda-emms" id="subtitle"]] +[[!template text="""Juni. I need to step out and go take care of""" start="00:15:20.800" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, wonderful. Thank you very much.""" start="00:15:23.260" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: the next talk. Bye-bye.""" start="00:15:24.080" video="qanda-emms" id="subtitle"]] +[[!template text="""And just to, I forgot to mention,""" start="00:15:25.520" video="qanda-emms" id="subtitle"]] +[[!template text="""but you can still talk here and everything is""" start="00:15:27.160" video="qanda-emms" id="subtitle"]] +[[!template text="""still being recorded. So,""" start="00:15:28.320" video="qanda-emms" id="subtitle"]] +[[!template text="""I'll see you later.""" start="00:15:28.880" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: Excellent. Bye-bye. Bye.""" start="00:15:32.320" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh, hello.""" start="00:15:35.600" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Wait, you're still, I cannot hear you yet.""" start="00:15:40.600" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 4]: You are currently the only person in this""" start="00:15:42.900" video="qanda-emms" id="subtitle"]] +[[!template text="""conference.""" start="00:15:43.080" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay.""" start="00:16:12.600" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Can you hear me now? I just wanted to say hi""" start="00:16:18.120" video="qanda-emms" id="subtitle"]] +[[!template text="""and thank you. My name's Grant.""" start="00:16:19.840" video="qanda-emms" id="subtitle"]] +[[!template text="""I've, you helped me contribute to EMMS maybe""" start="00:16:23.740" video="qanda-emms" id="subtitle"]] +[[!template text="""2 or 3 years ago. I was trying to do the""" start="00:16:26.820" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: So,""" start="00:16:28.480" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: track tag stuff. yeah.""" start="00:16:29.340" video="qanda-emms" id="subtitle"]] +[[!template text="""So I just wanted to say thank you.""" start="00:16:32.148" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you for continuing and going through""" start="00:16:35.400" video="qanda-emms" id="subtitle"]] +[[!template text="""that entire process. I know that 1 of the""" start="00:16:38.560" video="qanda-emms" id="subtitle"]] +[[!template text="""things that happens is that people want to""" start="00:16:40.380" video="qanda-emms" id="subtitle"]] +[[!template text="""contribute, but it's not as slick as GitHub""" start="00:16:43.940" video="qanda-emms" id="subtitle"]] +[[!template text="""and stuff like that, especially with the""" start="00:16:46.080" video="qanda-emms" id="subtitle"]] +[[!template text="""copper assignment. And objectively,""" start="00:16:53.400" video="qanda-emms" id="subtitle"]] +[[!template text="""it's not that. It's just harder than what""" start="00:16:56.920" video="qanda-emms" id="subtitle"]] +[[!template text="""they imagine it might be.""" start="00:16:58.680" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah. Well, I appreciate it.""" start="00:17:01.500" video="qanda-emms" id="subtitle"]] +[[!template text="""I think you're doing a wonderful job as a""" start="00:17:03.340" video="qanda-emms" id="subtitle"]] +[[!template text="""maintainer. I still hang out on the list and""" start="00:17:07.200" video="qanda-emms" id="subtitle"]] +[[!template text="""enjoy listening in on the discussions.""" start="00:17:09.380" video="qanda-emms" id="subtitle"]] +[[!template text="""So.""" start="00:17:09.960" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah. But that's it. I think that's it.""" start="00:17:14.240" video="qanda-emms" id="subtitle"]] +[[!template text="""I think that's it. And I think that's it.""" start="00:17:16.700" video="qanda-emms" id="subtitle"]] +[[!template text="""And I think that's it.""" start="00:17:17.640" video="qanda-emms" id="subtitle"]] +[[!template text="""I appreciate it. And I'll leave you to all of""" start="00:17:23.339" video="qanda-emms" id="subtitle"]] +[[!template text="""you to go on from being a product.""" start="00:17:27.781" video="qanda-emms" id="subtitle"]] +[[!template text="""And that she valued to all of us long term""" start="00:17:28.088" video="qanda-emms" id="subtitle"]] +[[!template text="""being a project.""" start="00:17:28.180" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: If you're not super duper active,""" start="00:17:31.460" video="qanda-emms" id="subtitle"]] +[[!template text="""being there long term,""" start="00:17:33.420" video="qanda-emms" id="subtitle"]] +[[!template text="""people tend to find it easier trying to""" start="00:17:37.360" video="qanda-emms" id="subtitle"]] +[[!template text="""continue contributing to the project if""" start="00:17:40.840" video="qanda-emms" id="subtitle"]] +[[!template text="""there's a consistency there,""" start="00:17:42.360" video="qanda-emms" id="subtitle"]] +[[!template text="""if there isn't a churn,""" start="00:17:43.520" video="qanda-emms" id="subtitle"]] +[[!template text="""if there is a kind of a core group.""" start="00:17:47.720" video="qanda-emms" id="subtitle"]] +[[!template text="""I guess it's like, you think it's constant.""" start="00:17:52.440" video="qanda-emms" id="subtitle"]] +[[!template text="""Eliezer Etzke and RMS,""" start="00:17:58.280" video="qanda-emms" id="subtitle"]] +[[!template text="""whatever on the next mailing list,""" start="00:18:00.420" video="qanda-emms" id="subtitle"]] +[[!template text="""You know, okay, there are certain people that""" start="00:18:03.040" video="qanda-emms" id="subtitle"]] +[[!template text="""I think so. So thank you for that.""" start="00:18:05.600" video="qanda-emms" id="subtitle"]] +[[!template text="""That's very important.""" start="00:18:06.340" video="qanda-emms" id="subtitle"]] +[[!template text="""That helps.""" start="00:18:07.540" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, I'm, I feel like when I started using""" start="00:18:12.560" video="qanda-emms" id="subtitle"]] +[[!template text="""EMMS several years ago,""" start="00:18:14.180" video="qanda-emms" id="subtitle"]] +[[!template text="""it's, it's improved a lot since then.""" start="00:18:16.500" video="qanda-emms" id="subtitle"]] +[[!template text="""And I notice your focus on helping new users""" start="00:18:19.540" video="qanda-emms" id="subtitle"]] +[[!template text="""get started quickly. And I think the talk""" start="00:18:22.540" video="qanda-emms" id="subtitle"]] +[[!template text="""today will help with that too.""" start="00:18:23.840" video="qanda-emms" id="subtitle"]] +[[!template text="""So""" start="00:18:24.160" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: yeah, I want to put you know,""" start="00:18:32.380" video="qanda-emms" id="subtitle"]] +[[!template text="""the, especially the TLDR,""" start="00:18:33.860" video="qanda-emms" id="subtitle"]] +[[!template text="""like how to start it on the link that to the""" start="00:18:37.500" video="qanda-emms" id="subtitle"]] +[[!template text="""website, find somehow that we can get on to""" start="00:18:44.080" video="qanda-emms" id="subtitle"]] +[[!template text="""prepare for that. And this together.""" start="00:18:52.900" video="qanda-emms" id="subtitle"]] +[[!template text="""Now, question for you,""" start="00:18:54.700" video="qanda-emms" id="subtitle"]] +[[!template text="""Where would you like to see EMMS go?""" start="00:18:58.260" video="qanda-emms" id="subtitle"]] +[[!template text="""Where do you see it landing?""" start="00:18:59.440" video="qanda-emms" id="subtitle"]] +[[!template text="""What do you feel like this is what this is""" start="00:19:02.780" video="qanda-emms" id="subtitle"]] +[[!template text="""we're sorely missing these things?""" start="00:19:04.540" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: I don't know. I mean, I picked it up,""" start="00:19:09.740" video="qanda-emms" id="subtitle"]] +[[!template text="""because I both use it to play my music""" start="00:19:13.540" video="qanda-emms" id="subtitle"]] +[[!template text="""collection, but also, like I record my own""" start="00:19:17.100" video="qanda-emms" id="subtitle"]] +[[!template text="""music. And I wanted to be able to edit my""" start="00:19:20.140" video="qanda-emms" id="subtitle"]] +[[!template text="""metadata in Emacs, because editing metadata""" start="00:19:23.500" video="qanda-emms" id="subtitle"]] +[[!template text="""elsewhere sucks. And so that's kind of why I""" start="00:19:29.100" video="qanda-emms" id="subtitle"]] +[[!template text="""got involved with that.""" start="00:19:30.280" video="qanda-emms" id="subtitle"]] +[[!template text="""And I was like, being able to edit metadata,""" start="00:19:33.440" video="qanda-emms" id="subtitle"]] +[[!template text="""especially for content that maybe you're""" start="00:19:37.580" video="qanda-emms" id="subtitle"]] +[[!template text="""creating or because I have a bunch of files""" start="00:19:41.760" video="qanda-emms" id="subtitle"]] +[[!template text="""of just unlabeled stuff I've recorded on,""" start="00:19:44.340" video="qanda-emms" id="subtitle"]] +[[!template text="""you know, different quarters,""" start="00:19:45.340" video="qanda-emms" id="subtitle"]] +[[!template text="""things like that. So that's kind of where I""" start="00:19:47.440" video="qanda-emms" id="subtitle"]] +[[!template text="""was focusing on it. It's the only media tool""" start="00:19:50.320" video="qanda-emms" id="subtitle"]] +[[!template text="""that lets me do that, you know,""" start="00:19:52.540" video="qanda-emms" id="subtitle"]] +[[!template text="""I can play the music back and have quick""" start="00:19:54.520" video="qanda-emms" id="subtitle"]] +[[!template text="""editing. So I know there was a couple of""" start="00:19:58.260" video="qanda-emms" id="subtitle"]] +[[!template text="""things we had talked about in terms of maybe""" start="00:20:00.860" video="qanda-emms" id="subtitle"]] +[[!template text="""improving kind of the user interface for the""" start="00:20:03.260" video="qanda-emms" id="subtitle"]] +[[!template text="""tag editor, things like that.""" start="00:20:05.440" video="qanda-emms" id="subtitle"]] +[[!template text="""So I don't have any grand visions for where""" start="00:20:09.300" video="qanda-emms" id="subtitle"]] +[[!template text="""EMMS should go. I know pretty much all the""" start="00:20:15.660" video="qanda-emms" id="subtitle"]] +[[!template text="""things I've heard about it already.""" start="00:20:16.920" video="qanda-emms" id="subtitle"]] +[[!template text="""You can hook up to GNU FM,""" start="00:20:20.200" video="qanda-emms" id="subtitle"]] +[[!template text="""the Scrabbling Service,""" start="00:20:21.940" video="qanda-emms" id="subtitle"]] +[[!template text="""and all that kind of stuff.""" start="00:20:23.200" video="qanda-emms" id="subtitle"]] +[[!template text="""I don't really feel like it's missing much,""" start="00:20:26.920" video="qanda-emms" id="subtitle"]] +[[!template text="""especially being able to choose the back""" start="00:20:29.020" video="qanda-emms" id="subtitle"]] +[[!template text="""ends. I guess, if anything,""" start="00:20:31.880" video="qanda-emms" id="subtitle"]] +[[!template text="""it's the interface. How can it be even more""" start="00:20:34.960" video="qanda-emms" id="subtitle"]] +[[!template text="""intuitive for users? And I think that,""" start="00:20:38.160" video="qanda-emms" id="subtitle"]] +[[!template text="""you know, we need more people playing around""" start="00:20:41.500" video="qanda-emms" id="subtitle"]] +[[!template text="""with it, I guess. Yeah.""" start="00:20:43.380" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: I think a really good""" start="00:20:46.220" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, yeah. example of that is,""" start="00:20:47.520" video="qanda-emms" id="subtitle"]] +[[!template text="""because I'm sure there are lots of people""" start="00:20:49.240" video="qanda-emms" id="subtitle"]] +[[!template text="""playing around with it,""" start="00:20:50.440" video="qanda-emms" id="subtitle"]] +[[!template text="""arriving at a conclusion,""" start="00:20:51.460" video="qanda-emms" id="subtitle"]] +[[!template text="""keeping it to themselves and moving on.""" start="00:20:53.860" video="qanda-emms" id="subtitle"]] +[[!template text="""Yeah. Which, and I know that a lot of bits of""" start="00:20:59.160" video="qanda-emms" id="subtitle"]] +[[!template text="""software put a send a bug report feature in""" start="00:21:01.820" video="qanda-emms" id="subtitle"]] +[[!template text="""and stuff like that and no 1 uses those""" start="00:21:04.660" video="qanda-emms" id="subtitle"]] +[[!template text="""either. So that's the frictional cost.""" start="00:21:07.600" video="qanda-emms" id="subtitle"]] +[[!template text="""I think the context switch for people between""" start="00:21:10.440" video="qanda-emms" id="subtitle"]] +[[!template text="""this doesn't work to actually formulating in""" start="00:21:16.120" video="qanda-emms" id="subtitle"]] +[[!template text="""words what didn't work,""" start="00:21:17.840" video="qanda-emms" id="subtitle"]] +[[!template text="""that is a very expensive context which most""" start="00:21:21.380" video="qanda-emms" id="subtitle"]] +[[!template text="""people will not do. And we're poorer for""" start="00:21:24.800" video="qanda-emms" id="subtitle"]] +[[!template text="""that. So, I think that when we integrate""" start="00:21:32.220" video="qanda-emms" id="subtitle"]] +[[!template text="""music brains and other things like that into.""" start="00:21:34.740" video="qanda-emms" id="subtitle"]] +[[!template text="""Now, of course, music brains will probably,""" start="00:21:37.460" video="qanda-emms" id="subtitle"]] +[[!template text="""it would be very funny if you pull up your""" start="00:21:41.200" video="qanda-emms" id="subtitle"]] +[[!template text="""stuff, right? Something that you wrote and""" start="00:21:43.480" video="qanda-emms" id="subtitle"]] +[[!template text="""you say, hey, music brains match this and""" start="00:21:46.080" video="qanda-emms" id="subtitle"]] +[[!template text="""it's not there, then it'll probably suggest""" start="00:21:48.600" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, I've heard that.""" start="00:21:51.720" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: some wild things. Yeah,""" start="00:21:52.660" video="qanda-emms" id="subtitle"]] +[[!template text="""because there are, there was a system I was""" start="00:21:58.260" video="qanda-emms" id="subtitle"]] +[[!template text="""looking at its code for researching stuff for""" start="00:22:02.060" video="qanda-emms" id="subtitle"]] +[[!template text="""EMS And I'm trying to remember what it's""" start="00:22:04.480" video="qanda-emms" id="subtitle"]] +[[!template text="""named. It begins with a J,""" start="00:22:05.720" video="qanda-emms" id="subtitle"]] +[[!template text="""it's this media player,""" start="00:22:07.160" video="qanda-emms" id="subtitle"]] +[[!template text="""free floss media player that it's like a""" start="00:22:13.780" video="qanda-emms" id="subtitle"]] +[[!template text="""media server that can cast to a television""" start="00:22:17.020" video="qanda-emms" id="subtitle"]] +[[!template text="""and stuff like that. And I asked it to""" start="00:22:20.940" video="qanda-emms" id="subtitle"]] +[[!template text="""automatically label things and the results""" start="00:22:24.280" video="qanda-emms" id="subtitle"]] +[[!template text="""were horrible. It thought that half of my""" start="00:22:28.180" video="qanda-emms" id="subtitle"]] +[[!template text="""songs were movies. It thought that JPEGs were""" start="00:22:32.960" video="qanda-emms" id="subtitle"]] +[[!template text="""songs. It just, it did some,""" start="00:22:35.800" video="qanda-emms" id="subtitle"]] +[[!template text="""it did incredibly, it's not a solved problem,""" start="00:22:40.520" video="qanda-emms" id="subtitle"]] +[[!template text="""I think. So the, what I'm thinking with""" start="00:22:44.660" video="qanda-emms" id="subtitle"]] +[[!template text="""MusicBrainz and those services is that you""" start="00:22:49.340" video="qanda-emms" id="subtitle"]] +[[!template text="""hit a button and you have you get another""" start="00:22:51.840" video="qanda-emms" id="subtitle"]] +[[!template text="""pane with a suggestion and you either and you""" start="00:22:57.040" video="qanda-emms" id="subtitle"]] +[[!template text="""can copy through you can say okay copy this""" start="00:22:59.060" video="qanda-emms" id="subtitle"]] +[[!template text="""and this in this field over or reject the""" start="00:23:01.560" video="qanda-emms" id="subtitle"]] +[[!template text="""suggestion and maybe get another 1.""" start="00:23:03.960" video="qanda-emms" id="subtitle"]] +[[!template text="""So,""" start="00:23:04.940" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, I like that a lot.""" start="00:23:07.360" video="qanda-emms" id="subtitle"]] +[[!template text="""That's more like a diff,""" start="00:23:09.160" video="qanda-emms" id="subtitle"]] +[[!template text="""right? Like you get the diff between the 2""" start="00:23:11.280" video="qanda-emms" id="subtitle"]] +[[!template text="""and you can apply which changes you like.""" start="00:23:13.540" video="qanda-emms" id="subtitle"]] +[[!template text="""Yeah. Was it Jellyfin?""" start="00:23:15.580" video="qanda-emms" id="subtitle"]] +[[!template text="""Is that... Jellyfin? Yeah,""" start="00:23:18.220" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Jellyfin, yes.""" start="00:23:19.460" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, And when that happened,""" start="00:23:22.340" video="qanda-emms" id="subtitle"]] +[[!template text="""did it clobber all your metadata?""" start="00:23:24.960" video="qanda-emms" id="subtitle"]] +[[!template text="""Or does it just label stuff?""" start="00:23:27.440" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: No, it...""" start="00:23:28.860" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Escalate things somewhere inside it and to""" start="00:23:38.240" video="qanda-emms" id="subtitle"]] +[[!template text="""looking for really, not allow me to do very""" start="00:23:49.020" video="qanda-emms" id="subtitle"]] +[[!template text="""easily. So I was, so, you know,""" start="00:23:54.640" video="qanda-emms" id="subtitle"]] +[[!template text="""on 1 hand, it makes me feel,""" start="00:23:56.660" video="qanda-emms" id="subtitle"]] +[[!template text="""oh, we're not the only ones dealing with""" start="00:23:58.980" video="qanda-emms" id="subtitle"]] +[[!template text="""this. We're not the only ones struggling with""" start="00:24:00.680" video="qanda-emms" id="subtitle"]] +[[!template text="""this. On the other hand,""" start="00:24:01.440" video="qanda-emms" id="subtitle"]] +[[!template text="""it would be nice if that's a paragon that we""" start="00:24:05.660" video="qanda-emms" id="subtitle"]] +[[!template text="""can look to and say, this is a wonderful way""" start="00:24:08.460" video="qanda-emms" id="subtitle"]] +[[!template text="""of doing it. Let's incorporate as much of""" start="00:24:11.320" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, it's a tricky problem,""" start="00:24:15.180" video="qanda-emms" id="subtitle"]] +[[!template text="""especially if you're modifying people's media""" start="00:24:18.220" video="qanda-emms" id="subtitle"]] +[[!template text="""files you know so""" start="00:24:19.780" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: that as we can. yeah I'm also very convinced""" start="00:24:23.040" video="qanda-emms" id="subtitle"]] +[[!template text="""that so I'm not a mainframe for MMS because""" start="00:24:31.560" video="qanda-emms" id="subtitle"]] +[[!template text="""I'm old and curmudgeonly essentially in my,""" start="00:24:35.020" video="qanda-emms" id="subtitle"]] +[[!template text="""in the way they do it.""" start="00:24:37.660" video="qanda-emms" id="subtitle"]] +[[!template text="""And honestly, I rarely ever,""" start="00:24:40.080" video="qanda-emms" id="subtitle"]] +[[!template text="""I use the MMS browser when I need to debug""" start="00:24:42.780" video="qanda-emms" id="subtitle"]] +[[!template text="""the MS browser. I don't,""" start="00:24:44.240" video="qanda-emms" id="subtitle"]] +[[!template text="""I use very simple commands and I even rarely""" start="00:24:48.740" video="qanda-emms" id="subtitle"]] +[[!template text="""look at the playlists.""" start="00:24:50.440" video="qanda-emms" id="subtitle"]] +[[!template text="""That was 1 of the things because when I got""" start="00:24:53.940" video="qanda-emms" id="subtitle"]] +[[!template text="""into MMS originally when my eyesight started""" start="00:24:56.680" video="qanda-emms" id="subtitle"]] +[[!template text="""going so I had to rely less and less on GUI""" start="00:24:59.640" video="qanda-emms" id="subtitle"]] +[[!template text="""interfaces. So that was,""" start="00:25:02.800" video="qanda-emms" id="subtitle"]] +[[!template text="""so to this day that's how I use EMMS.""" start="00:25:06.340" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, it's interesting.""" start="00:25:08.560" video="qanda-emms" id="subtitle"]] +[[!template text="""I remember running into a browser bug because""" start="00:25:13.260" video="qanda-emms" id="subtitle"]] +[[!template text="""I think just my age, like,""" start="00:25:15.480" video="qanda-emms" id="subtitle"]] +[[!template text="""I want to be able to tab through and like""" start="00:25:18.120" video="qanda-emms" id="subtitle"]] +[[!template text="""that was a huge that that changed recently""" start="00:25:20.060" video="qanda-emms" id="subtitle"]] +[[!template text="""right where you tab and it unfolds in the""" start="00:25:22.640" video="qanda-emms" id="subtitle"]] +[[!template text="""browser but yeah I realized that people use""" start="00:25:27.620" video="qanda-emms" id="subtitle"]] +[[!template text="""emms in so many different ways just like any""" start="00:25:30.600" video="qanda-emms" id="subtitle"]] +[[!template text="""piece of emacs there's there's many ways to""" start="00:25:36.020" video="qanda-emms" id="subtitle"]] +[[!template text="""do it but appreciate your time I'm gonna""" start="00:25:39.960" video="qanda-emms" id="subtitle"]] +[[!template text="""actually put together this Christmas tree""" start="00:25:41.880" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 0]: So. Wonderful.""" start="00:25:43.400" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 3]: behind me. Yeah, just wanted to say hi,""" start="00:25:45.260" video="qanda-emms" id="subtitle"]] +[[!template text="""meet you in person. But yeah.""" start="00:25:50.900" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, excellent. I appreciate it a lot and we""" start="00:25:54.340" video="qanda-emms" id="subtitle"]] +[[!template text="""generate""" start="00:25:55.080" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: some interesting questions.""" start="00:25:59.960" video="qanda-emms" id="subtitle"]] +[[!template text="""Yeah, thank you.""" start="00:26:00.780" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 4]: You are currently the only person in this""" start="00:26:03.760" video="qanda-emms" id="subtitle"]] +[[!template text="""conference.""" start="00:26:03.960" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm going to have a look at the questions""" start="00:26:13.480" video="qanda-emms" id="subtitle"]] +[[!template text="""here.""" start="00:26:14.060" video="qanda-emms" id="subtitle"]] +[[!template text="""Let's see. Let's see. So there is,""" start="00:26:29.440" video="qanda-emms" id="subtitle"]] +[[!template text="""okay. There's a question here.""" start="00:26:32.900" video="qanda-emms" id="subtitle"]] +[[!template text="""I like what you said about balancing the""" start="00:26:34.540" video="qanda-emms" id="subtitle"]] +[[!template text="""concern for software freedom with the worry""" start="00:26:36.140" video="qanda-emms" id="subtitle"]] +[[!template text="""that this might alienate the package user.""" start="00:26:38.360" video="qanda-emms" id="subtitle"]] +[[!template text="""I wonder if you have advice for other""" start="00:26:39.960" video="qanda-emms" id="subtitle"]] +[[!template text="""maintainers how to communicate this sort of""" start="00:26:41.720" video="qanda-emms" id="subtitle"]] +[[!template text="""thing diplomatically? Yes,""" start="00:26:43.660" video="qanda-emms" id="subtitle"]] +[[!template text="""when you have to deny implementing a feature""" start="00:26:45.660" video="qanda-emms" id="subtitle"]] +[[!template text="""for a freedom reason. This in fact happens""" start="00:26:48.480" video="qanda-emms" id="subtitle"]] +[[!template text="""all the time. A recent example of this was a""" start="00:26:56.140" video="qanda-emms" id="subtitle"]] +[[!template text="""YouTube download, right,""" start="00:26:58.380" video="qanda-emms" id="subtitle"]] +[[!template text="""the YouTube download feature.""" start="00:26:59.540" video="qanda-emms" id="subtitle"]] +[[!template text="""At the time, okay, so stepping back,""" start="00:27:04.040" video="qanda-emms" id="subtitle"]] +[[!template text="""the request was to have a YouTube download""" start="00:27:07.440" video="qanda-emms" id="subtitle"]] +[[!template text="""feature integrated strongly into eMMS so that""" start="00:27:11.940" video="qanda-emms" id="subtitle"]] +[[!template text="""you put in a YouTube URL and you can download""" start="00:27:16.260" video="qanda-emms" id="subtitle"]] +[[!template text="""the video and play it.""" start="00:27:17.640" video="qanda-emms" id="subtitle"]] +[[!template text="""And the question isn't really whether you can""" start="00:27:22.080" video="qanda-emms" id="subtitle"]] +[[!template text="""chain YouTube Downloader or 1 of those things""" start="00:27:24.660" video="qanda-emms" id="subtitle"]] +[[!template text="""into your EMMS configuration.""" start="00:27:26.600" video="qanda-emms" id="subtitle"]] +[[!template text="""You can do whatever you want.""" start="00:27:28.140" video="qanda-emms" id="subtitle"]] +[[!template text="""But the question is, does EMMS actually""" start="00:27:30.840" video="qanda-emms" id="subtitle"]] +[[!template text="""integrate with it really,""" start="00:27:33.340" video="qanda-emms" id="subtitle"]] +[[!template text="""really strongly to the extent where it tells""" start="00:27:35.740" video="qanda-emms" id="subtitle"]] +[[!template text="""you oh you don't need to download install""" start="00:27:37.800" video="qanda-emms" id="subtitle"]] +[[!template text="""please go ahead and install that or whatever""" start="00:27:40.320" video="qanda-emms" id="subtitle"]] +[[!template text="""and at the time we checked it we found out""" start="00:27:43.740" video="qanda-emms" id="subtitle"]] +[[!template text="""that you know the version that we were""" start="00:27:45.800" video="qanda-emms" id="subtitle"]] +[[!template text="""looking at of the YouTube download or YTDLP""" start="00:27:49.280" video="qanda-emms" id="subtitle"]] +[[!template text="""or whatever it was called,""" start="00:27:51.720" video="qanda-emms" id="subtitle"]] +[[!template text="""actually downloaded a good amount of""" start="00:27:56.200" video="qanda-emms" id="subtitle"]] +[[!template text="""proprietary JavaScript onto your machine and""" start="00:27:59.200" video="qanda-emms" id="subtitle"]] +[[!template text="""ran it, just as if you were going on to the""" start="00:28:02.300" video="qanda-emms" id="subtitle"]] +[[!template text="""YouTube page, which is not for me to tell""" start="00:28:06.560" video="qanda-emms" id="subtitle"]] +[[!template text="""people not to do if they want to do that,""" start="00:28:09.980" video="qanda-emms" id="subtitle"]] +[[!template text="""but it's absolutely for me not to cause to""" start="00:28:16.240" video="qanda-emms" id="subtitle"]] +[[!template text="""happen on the user's machine without them.""" start="00:28:18.540" video="qanda-emms" id="subtitle"]] +[[!template text="""1 of the last thing that I want to do in the""" start="00:28:21.480" video="qanda-emms" id="subtitle"]] +[[!template text="""world is have a user inside Emacs press a""" start="00:28:25.980" video="qanda-emms" id="subtitle"]] +[[!template text="""button and have proprietary software get""" start="00:28:29.760" video="qanda-emms" id="subtitle"]] +[[!template text="""downloaded behind their back and run on their""" start="00:28:32.300" video="qanda-emms" id="subtitle"]] +[[!template text="""machine that would be disastrous so we had to""" start="00:28:38.240" video="qanda-emms" id="subtitle"]] +[[!template text="""say no we had to say that's I'm sorry that's""" start="00:28:41.380" video="qanda-emms" id="subtitle"]] +[[!template text="""beyond the pale and in fact in doing so some""" start="00:28:47.060" video="qanda-emms" id="subtitle"]] +[[!template text="""people who were using this system said,""" start="00:28:51.100" video="qanda-emms" id="subtitle"]] +[[!template text="""actually I had no idea it was doing this""" start="00:28:53.900" video="qanda-emms" id="subtitle"]] +[[!template text="""behind my back. I thought it was just magic.""" start="00:28:56.660" video="qanda-emms" id="subtitle"]] +[[!template text="""I thought it was a YouTube video without any""" start="00:28:58.860" video="qanda-emms" id="subtitle"]] +[[!template text="""freedom issues. I'm going to look into it or""" start="00:29:01.580" video="qanda-emms" id="subtitle"]] +[[!template text="""I'm going to stop using it.""" start="00:29:03.120" video="qanda-emms" id="subtitle"]] +[[!template text="""So my advice would be Stand firm and just be""" start="00:29:11.180" video="qanda-emms" id="subtitle"]] +[[!template text="""Not not preachy. Don't tell people what they""" start="00:29:15.040" video="qanda-emms" id="subtitle"]] +[[!template text="""need to do be very clear about what you stand""" start="00:29:19.580" video="qanda-emms" id="subtitle"]] +[[!template text="""for and what the project stands for,""" start="00:29:21.900" video="qanda-emms" id="subtitle"]] +[[!template text="""and so they very clearly know where you""" start="00:29:28.660" video="qanda-emms" id="subtitle"]] +[[!template text="""stand. And I think that people actually""" start="00:29:30.460" video="qanda-emms" id="subtitle"]] +[[!template text="""appreciate that more than a political answer,""" start="00:29:36.540" video="qanda-emms" id="subtitle"]] +[[!template text="""right? That has been my experience.""" start="00:29:43.540" video="qanda-emms" id="subtitle"]] +[[!template text="""Now, excuse me, taking into account that 1 or""" start="00:29:49.800" video="qanda-emms" id="subtitle"]] +[[!template text="""2 people will tell you,""" start="00:29:52.200" video="qanda-emms" id="subtitle"]] +[[!template text="""this is terrible. I'm leaving.""" start="00:29:54.960" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: If you do this,""" start="00:30:00.550" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 1]: This is useless. you're free software or""" start="00:30:01.460" video="qanda-emms" id="subtitle"]] +[[!template text="""whatever, and just leave.""" start="00:30:03.400" video="qanda-emms" id="subtitle"]] +[[!template text="""But some people are ornery.""" start="00:30:05.860" video="qanda-emms" id="subtitle"]] +[[!template text="""That's not necessarily something bad that you""" start="00:30:09.360" video="qanda-emms" id="subtitle"]] +[[!template text="""did. But that has happened.""" start="00:30:11.680" video="qanda-emms" id="subtitle"]] +[[!template text="""There are multiple stories.""" start="00:30:14.200" video="qanda-emms" id="subtitle"]] +[[!template text="""Because the MMS is so old,""" start="00:30:16.840" video="qanda-emms" id="subtitle"]] +[[!template text="""there are multiple points in which non-free""" start="00:30:20.080" video="qanda-emms" id="subtitle"]] +[[!template text="""software intersected with the EMS because of""" start="00:30:23.940" video="qanda-emms" id="subtitle"]] +[[!template text="""multimedia and we had to go the other""" start="00:30:28.580" video="qanda-emms" id="subtitle"]] +[[!template text="""direction and so far it has served EMS well""" start="00:30:33.300" video="qanda-emms" id="subtitle"]] +[[!template text="""like the project has died as a result.""" start="00:30:38.240" video="qanda-emms" id="subtitle"]] +[[!template text="""Of course, can't prove a negative,""" start="00:30:39.800" video="qanda-emms" id="subtitle"]] +[[!template text="""don't know where we would be if we had taken,""" start="00:30:42.040" video="qanda-emms" id="subtitle"]] +[[!template text="""gone down that route. I'm pretty sure we""" start="00:30:44.760" video="qanda-emms" id="subtitle"]] +[[!template text="""would need a new ELPA,""" start="00:30:46.100" video="qanda-emms" id="subtitle"]] +[[!template text="""and I think being so clearly integrated with""" start="00:30:50.860" video="qanda-emms" id="subtitle"]] +[[!template text="""emacs is a huge benefit to eMMS because it's""" start="00:30:55.040" video="qanda-emms" id="subtitle"]] +[[!template text="""it allows people to install it very easily.""" start="00:30:57.660" video="qanda-emms" id="subtitle"]] +[[!template text="""And those are all the questions that I can""" start="00:31:08.760" video="qanda-emms" id="subtitle"]] +[[!template text="""see.""" start="00:31:09.020" video="qanda-emms" id="subtitle"]] +[[!template text="""[Speaker 2]: You""" start="00:31:15.060" video="qanda-emms" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20emms%3A%20Emacs%20MultiMedia%20System%20%28EMMS%29) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/emms-before.md b/2023/info/emms-before.md new file mode 100644 index 00000000..d45449c6 --- /dev/null +++ b/2023/info/emms-before.md @@ -0,0 +1,46 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 39-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="emms-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="emms-mainVideo" data=""" +00:00.000 Introduction +01:03.320 The structure of this talk +01:21.320 Introduction to Emms: The practical part +08:04.240 The modeline +11:01.200 Meta-playlist mode +11:29.860 The browser +13:19.920 How Emms works: The technical part +16:23.820 The Emms core +16:36.440 Tracks +17:18.460 Playlist +18:22.080 Sources +19:22.160 Players +20:20.520 Info +21:36.660 The cache +22:51.620 Healthy back and forth: mpv, mpd, and GNU.FM +23:31.560 MPV +24:47.470 MPD +26:07.440 GNU FM and Libre FM +27:12.560 How we work: Emms development +28:52.590 The Rime Of The Ancient Maintainer +29:06.080 The life and times of an Emms patch +31:24.080 Let It Go: The release process +32:23.400 It Is Not In Our Stars, But In Ourselves: Future directions +34:44.849 Development policies: Interface language +36:05.980 Development policies: Freedom +38:12.370 Acknowledgements + +"""]]<div></div>Duration: 38:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li><li><a href="https://toobnix.org/w/ppdF62LysvxpXgZVaeF9wk">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="emms-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="emms-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus"></audio></div><div></div>Duration: 32:38 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/emms-nav.md b/2023/info/emms-nav.md new file mode 100644 index 00000000..31d2bfad --- /dev/null +++ b/2023/info/emms-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a> +Next by track: <a href="/2023/talks/steno">Programming with steno</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/eval-after.md b/2023/info/eval-after.md new file mode 100644 index 00000000..d82abf2a --- /dev/null +++ b/2023/info/eval-after.md @@ -0,0 +1,231 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="eval-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""Hello, and welcome to EmacsConf 2023!""" start="00:00:04.880" video="mainVideo-eval" id="subtitle"]] +[[!template text="""My name is Musa Al-hassy,""" start="00:00:10.001" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and I will be talking about "REPL-driven development."""" start="00:00:12.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I like programming languages so much.""" start="00:00:15.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I want to use them all over the place.""" start="00:00:18.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I got a PhD in the topic.""" start="00:00:20.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So let's just dive in.""" start="00:00:23.069" video="mainVideo-eval" id="subtitle"]] +[[!template text="""This is a lightning talk,""" start="00:00:25.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""so the details will be available in the repository.""" start="00:00:27.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Links to longer videos and GIFs""" start="00:00:31.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""for those who are interested.""" start="00:00:33.469" video="mainVideo-eval" id="subtitle"]] + +[[!template new="1" text="""The wonders of C-x C-e""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""So the wonderful thing about Emacs""" start="00:00:35.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""is that you can execute Lisp anywhere.""" start="00:00:37.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""For example, I can go to this piece of Lisp,""" start="00:00:40.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""press Ctrl-x Ctrl-e (`C-x C-e`)""" start="00:00:42.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and get a little pop-up.""" start="00:00:45.576" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Alright, so here I pressed `C-x C-e`""" start="00:00:47.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and this is what it ran.""" start="00:00:49.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""And what this package gives you""" start="00:00:51.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""is the same ability""" start="00:00:52.776" video="mainVideo-eval" id="subtitle"]] +[[!template text="""for any language of your choosing.""" start="00:00:54.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So for example, here is some Java,""" start="00:00:56.909" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and I bound it to Ctrl-x, Ctrl-j (`C-x C-j`).""" start="00:00:59.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So I say `C-x C-j`, and this runs some code,""" start="00:01:02.469" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and over here I get a little pop-up.""" start="00:01:07.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""The wonderful thing about""" start="00:01:13.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""being able to run code from anywhere""" start="00:01:15.069" video="mainVideo-eval" id="subtitle"]] +[[!template text="""is that you can keep it in normal text files""" start="00:01:16.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""or any kind of file you like.""" start="00:01:19.029" video="mainVideo-eval" id="subtitle"]] +[[!template text="""For example, you can have hyperlinks,""" start="00:01:20.629" video="mainVideo-eval" id="subtitle"]] +[[!template text="""as it were…, like this one.""" start="00:01:23.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""`C-x C-e`, and now we can see this down here.""" start="00:01:25.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Learn about it.""" start="00:01:28.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""But being able to run other languages besides Emacs""" start="00:01:30.789" video="mainVideo-eval" id="subtitle"]] +[[!template text="""lets us do some interesting things.""" start="00:01:34.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""For example, in the middle of a JavaScript program,""" start="00:01:36.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you might write a line like this. `C-x C-n`.""" start="00:01:39.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""And that says down here""" start="00:01:43.429" video="mainVideo-eval" id="subtitle"]] +[[!template text="""`javascript-eval` in the mode line,""" start="00:01:45.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and so this just checks that some endpoint""" start="00:01:47.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""is working as intended.""" start="00:01:49.643" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So you don't need to use an external tool""" start="00:01:51.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""to check endpoints.""" start="00:01:52.749" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can just use Emacs in your favorite language.""" start="00:01:53.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You know, you can keep your spirit up.""" start="00:01:57.469" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So, `C-x C-a` runs `applescript-eval`.""" start="00:01:59.629" video="mainVideo-eval" id="subtitle"]] +[[!template text="""[Computer]: You can do it, buddy.""" start="00:02:03.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""[Musa]: Maybe you heard that in the background?""" start="00:02:06.376" video="mainVideo-eval" id="subtitle"]] +[[!template text="""The cool thing is, your code immediately takes form.""" start="00:02:13.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Right away, you see it doing things, you know,""" start="00:02:15.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""altering your environment.""" start="00:02:18.469" video="mainVideo-eval" id="subtitle"]] +[[!template text="""For example, this is JavaScript,""" start="00:02:20.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and JavaScript here is gonna change Emacs for us.""" start="00:02:24.429" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So `C-x C-n`. And you can see down here""" start="00:02:28.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""`javascript-eval` was invoked.""" start="00:02:32.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""It returned true, and this line of JavaScript""" start="00:02:34.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""altered our Emacs. So that's really nice.""" start="00:02:38.789" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So you don't need to use just Emacs Lisp if you like.""" start="00:02:41.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can use other systems.""" start="00:02:43.749" video="mainVideo-eval" id="subtitle"]] +[[!template text="""As you saw, the output is shown in overlays.""" start="00:02:46.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So here's, for example, `C-x C-p` to run""" start="00:02:50.069" video="mainVideo-eval" id="subtitle"]] +[[!template text="""some Python code.""" start="00:02:52.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Notice it blinked in red""" start="00:02:54.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""because I thought red was nice.""" start="00:02:55.476" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can configure as you like.""" start="00:02:56.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""And if you hover over it,""" start="00:02:58.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you can see the solution there,""" start="00:02:59.409" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and you can see it in a variety of familiar ways""" start="00:03:01.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""if you use `C-x C-e` regularly.""" start="00:03:04.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can insert the results.""" start="00:03:08.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can find documentation about them.""" start="00:03:09.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""The idea here is that""" start="00:03:14.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you have this familiar Lisp workflow""" start="00:03:15.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""with `C-x C-e`, and this package ports it over""" start="00:03:20.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""to your favorite language out.""" start="00:03:24.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So you can eval things,""" start="00:03:27.069" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you can insert them, and do as you like.""" start="00:03:28.343" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I think that's really neat.""" start="00:03:30.789" video="mainVideo-eval" id="subtitle"]] + +[[!template new="1" text="""An overview of REPL Driven Development""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""This package allows you to do""" start="00:03:35.809" video="mainVideo-eval" id="subtitle"]] +[[!template text="""REPL driven development.""" start="00:03:37.209" video="mainVideo-eval" id="subtitle"]] +[[!template text="""In that, you can use it to grow your program.""" start="00:03:39.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You don't need to restart it.""" start="00:03:42.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can see changes live.""" start="00:03:43.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So here's, for example, this is in a Java runtime.""" start="00:03:45.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""You can see some balls bouncing around.""" start="00:03:50.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I don't really know which one is the second one,""" start="00:03:52.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""but let's increase its size. `C-x C-j`.""" start="00:03:54.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""And this one increased in size,""" start="00:03:57.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and you can see down here I pressed `C-x C-j`.""" start="00:04:00.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Let's change the color to blue,""" start="00:04:02.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""`C-x C-j`, the color is blue.""" start="00:04:05.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So all these changes are happening live.""" start="00:04:09.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Three balls isn't really a ball pit.""" start="00:04:12.376" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Let's go to 50 balls. There you go.""" start="00:04:14.429" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So it's nice that you can do this""" start="00:04:18.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""without leaving your environment,""" start="00:04:21.469" video="mainVideo-eval" id="subtitle"]] +[[!template text="""without building, you can rapidly modify and see.""" start="00:04:23.209" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I think that's nice.""" start="00:04:26.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Unfortunately, I'm at the halfway point,""" start="00:04:29.776" video="mainVideo-eval" id="subtitle"]] +[[!template text="""so I won't be able to work through""" start="00:04:32.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""some of these nice problems,""" start="00:04:35.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""but you can see the videos""" start="00:04:37.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""or GIFs on the associated repo.""" start="00:04:38.676" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Likewise for this one.""" start="00:04:41.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""This one would have been a lot of fun,""" start="00:04:42.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""but unfortunately, we're running short on time.""" start="00:04:43.909" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Apologies.""" start="00:04:46.509" video="mainVideo-eval" id="subtitle"]] + +[[!template new="1" text="""REPL Driven Development with Java""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""The neat thing here is: this package tries to""" start="00:04:51.143" video="mainVideo-eval" id="subtitle"]] +[[!template text="""bring the feeling of Lisp to other languages.""" start="00:04:56.209" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So the idea of a REPL, or a Read Eval Print Loop""" start="00:05:00.269" video="mainVideo-eval" id="subtitle"]] +[[!template text="""is R and P are data interchange protocols.""" start="00:05:03.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Unfortunately, not every language has those,""" start="00:05:06.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""but this package kind of encourages us to""" start="00:05:09.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""implement them if we don't have them.""" start="00:05:12.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Let me show you an example.""" start="00:05:14.643" video="mainVideo-eval" id="subtitle"]] +[[!template text="""What do I mean here?""" start="00:05:16.909" video="mainVideo-eval" id="subtitle"]] +[[!template text="""This is a Java file.""" start="00:05:20.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I've loaded this definition in.""" start="00:05:22.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""We can press `C-x C-j`,""" start="00:05:25.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and you see it's a list of person.""" start="00:05:28.543" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I didn't give this a name, so its name is $59.""" start="00:05:30.909" video="mainVideo-eval" id="subtitle"]] +[[!template text="""If I hover over it, we can see the definition again.""" start="00:05:33.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So it's a person called Hamid, age 5,""" start="00:05:40.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""another person called Jaafar, age 6.""" start="00:05:44.429" video="mainVideo-eval" id="subtitle"]] +[[!template text="""This pretty printing is nice for me as a human,""" start="00:05:46.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""but I can't execute this. This isn't valid Java.""" start="00:05:52.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So I could do `C-u C-x C-j`.""" start="00:05:56.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""If I have the help of a read protocol inserted.""" start="00:06:00.609" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Sorry, `C-x C-j`. There it is.""" start="00:06:05.109" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So look, it gives me a `new Person`""" start="00:06:09.469" video="mainVideo-eval" id="subtitle"]] +[[!template text="""with the construction everything.""" start="00:06:12.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Now I can work with.""" start="00:06:14.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Java can work with this.""" start="00:06:16.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""So this can be quite useful for regression testing""" start="00:06:17.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""or just to find out what your method spits out.""" start="00:06:21.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""We can do the same thing. Here's a bigger example.""" start="00:06:25.749" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Trying to see it in the overlay is a bit cramped.""" start="00:06:29.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""We can say `C-u C-x C-j`.""" start="00:06:32.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""All right, and now we have executable code.""" start="00:06:34.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Okay, this is neat.""" start="00:06:38.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""If you want to do something with it.""" start="00:06:40.876" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I'm not really interested. I have four new persons.""" start="00:06:42.389" video="mainVideo-eval" id="subtitle"]] +[[!template text="""If I really want to look at this,""" start="00:06:45.789" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I can say `M-x java-eval-navigate-output`,""" start="00:06:49.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and now I see my output as this hierarchical tree.""" start="00:06:55.649" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I go down, I can see what's inside these,""" start="00:07:00.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""what's the type of this thing, what's in there.""" start="00:07:03.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""All right, so that's nice.""" start="00:07:06.709" video="mainVideo-eval" id="subtitle"]] +[[!template text="""The idea is that we're not limited to""" start="00:07:09.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""just textual output.""" start="00:07:14.189" video="mainVideo-eval" id="subtitle"]] +[[!template text="""We can render output,""" start="00:07:15.629" video="mainVideo-eval" id="subtitle"]] +[[!template text="""thanks to the power of Emacs, in any way we want.""" start="00:07:19.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""In a browser, in a LaTeX file, in an Org mode (file),""" start="00:07:22.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""however we really desire.""" start="00:07:26.749" video="mainVideo-eval" id="subtitle"]] + +[[!template new="1" text="""Bring your own Read Protocol""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""And if our language doesn't have an easy protocol,""" start="00:07:28.029" video="mainVideo-eval" id="subtitle"]] +[[!template text="""so what I did for Java in particular was:""" start="00:07:32.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you take a blob, and you use some""" start="00:07:36.143" video="mainVideo-eval" id="subtitle"]] +[[!template text="""parsing expression grammars, or if you really want""" start="00:07:38.643" video="mainVideo-eval" id="subtitle"]] +[[!template text="""regular expression pattern matching,""" start="00:07:43.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and you get some property list out,""" start="00:07:44.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and then you construct an executable expression""" start="00:07:46.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""out of that. Like this `new Person`.""" start="00:07:51.349" video="mainVideo-eval" id="subtitle"]] +[[!template text="""It's nice that you can do these kind of things""" start="00:07:53.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and that this software encourages you to do them.""" start="00:07:56.749" video="mainVideo-eval" id="subtitle"]] + +[[!template new="1" text="""Use Case: RDD & Job Interviews""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]] + +[[!template text="""So one use case I actually use""" start="00:07:59.669" video="mainVideo-eval" id="subtitle"]] +[[!template text="""besides learning things is…""" start="00:08:07.549" video="mainVideo-eval" id="subtitle"]] +[[!template text="""oops oops oopsies oopsies showing you metadata""" start="00:08:10.909" video="mainVideo-eval" id="subtitle"]] +[[!template text="""you shouldn't be looking at.""" start="00:08:14.776" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Don't look at my metadata. Sorry about that.""" start="00:08:15.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""One place I actually use this besides learning""" start="00:08:19.409" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and trying new libraries and APIs""" start="00:08:23.209" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and stuff like that is,""" start="00:08:25.029" video="mainVideo-eval" id="subtitle"]] +[[!template text="""for example, when I interviewed for jobs""" start="00:08:26.776" video="mainVideo-eval" id="subtitle"]] +[[!template text="""last year (I was changing jobs),""" start="00:08:29.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I would share my screen,""" start="00:08:33.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and if the interviewer gave me""" start="00:08:34.676" video="mainVideo-eval" id="subtitle"]] +[[!template text="""some inputs and outputs to play with,""" start="00:08:37.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I could do essentially""" start="00:08:39.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""some sort of test driven development""" start="00:08:41.576" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and constantly evaluate things""" start="00:08:42.976" video="mainVideo-eval" id="subtitle"]] +[[!template text="""right in front of the interviewer.""" start="00:08:45.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""For some design questions""" start="00:08:46.589" video="mainVideo-eval" id="subtitle"]] +[[!template text="""rather than sketching out my ideas in a Google Doc,""" start="00:08:49.949" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I would share my screen and be like,""" start="00:08:53.909" video="mainVideo-eval" id="subtitle"]] +[[!template text=""""Hey, here's actual executable code,""" start="00:08:55.509" video="mainVideo-eval" id="subtitle"]] +[[!template text="""we can stub some things out""" start="00:08:57.989" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and have some types,"""" start="00:08:59.229" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and the idea is we can still check things""" start="00:09:00.576" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and run them right there and then,""" start="00:09:03.476" video="mainVideo-eval" id="subtitle"]] +[[!template text="""which I thought was quite nice, and it helps to""" start="00:09:05.643" video="mainVideo-eval" id="subtitle"]] +[[!template text="""clarify your thought process, I guess.""" start="00:09:08.143" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Anyhow, so that's my time,""" start="00:09:10.309" video="mainVideo-eval" id="subtitle"]] +[[!template text="""I hope you've enjoyed this little package,""" start="00:09:15.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""and again, sorry for the rush,""" start="00:09:19.829" video="mainVideo-eval" id="subtitle"]] +[[!template text="""it's a lightning talk.""" start="00:09:22.869" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Feel free to find everything on the associated repo.""" start="00:09:24.149" video="mainVideo-eval" id="subtitle"]] +[[!template text="""And have a wonderful December Saturday.""" start="00:09:29.069" video="mainVideo-eval" id="subtitle"]] +[[!template text="""Take care! Bye bye, everyone.""" start="00:09:34.389" video="mainVideo-eval" id="subtitle"]] + + + +Captioner: bhavin192 + +Questions or comments? Please e-mail [Alhassy@gmail.com](mailto:Alhassy@gmail.com?subject=Comment%20for%20EmacsConf%202023%20eval%3A%20Editor%20Integrated%20REPL%20Driven%20Development%20for%20all%20languages) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/eval-before.md b/2023/info/eval-before.md new file mode 100644 index 00000000..3ea735b8 --- /dev/null +++ b/2023/info/eval-before.md @@ -0,0 +1,20 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="eval-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="eval-mainVideo" data=""" +00:04.880 Introduction +00:35.989 The wonders of C-x C-e +03:35.809 An overview of REPL Driven Development +04:51.143 REPL Driven Development with Java +07:28.029 Bring your own Read Protocol +07:59.669 Use Case: RDD & Job Interviews + +"""]]<div></div>Duration: 09:37 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/74srjNx1cgMr5MsJ9NWNNi">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/eval-nav.md b/2023/info/eval-nav.md new file mode 100644 index 00000000..346bbc65 --- /dev/null +++ b/2023/info/eval-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a> +Next by track: <a href="/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/extending-after.md b/2023/info/extending-after.md new file mode 100644 index 00000000..69f918bb --- /dev/null +++ b/2023/info/extending-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20extending%3A%20GNU%20Emacs%20for%20electronics%2C%20note-taking%2C%20and%20as%20lightweight%20IDE) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/extending-before.md b/2023/info/extending-before.md new file mode 100644 index 00000000..376dee32 --- /dev/null +++ b/2023/info/extending-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk followed by live web conference Q&A +Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf) +Status: Waiting for video from speaker + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/extending-nav.md b/2023/info/extending-nav.md new file mode 100644 index 00000000..5a84a12c --- /dev/null +++ b/2023/info/extending-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a> +Next by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/flat-after.md b/2023/info/flat-after.md new file mode 100644 index 00000000..c743ddf6 --- /dev/null +++ b/2023/info/flat-after.md @@ -0,0 +1,262 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="flat-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""That's how I came into this.""" start="00:00:01.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Finally, the next big thing was starting""" start="00:00:10.120" video="mainVideo-flat" id="subtitle"]] +[[!template text="""2005, I went fully Linux and then for Mac OS,""" start="00:00:16.100" video="mainVideo-flat" id="subtitle"]] +[[!template text="""and I switched to vanilla self-compiled""" start="00:00:19.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""versions of Emacs. So what do I want to show?""" start="00:00:25.279" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Couple of time ago in the development list""" start="00:00:30.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""there was a short exchange about the nil and""" start="00:00:34.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the flood button, flood button button styles,""" start="00:00:38.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""saying that it was equivalent and they are""" start="00:00:42.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""not. So instead of starting a Flame Wars,""" start="00:00:45.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I thought it was better to go and publicize""" start="00:00:49.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the goodies you get with Flood Button.""" start="00:00:54.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And this is what I'm going to be showing you""" start="00:00:57.260" video="mainVideo-flat" id="subtitle"]] +[[!template text="""practically. Why Flood Button?""" start="00:01:00.140" video="mainVideo-flat" id="subtitle"]] +[[!template text="""2005, more or less, I came across DOOM Emacs,""" start="00:01:06.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""which was nice. And I,""" start="00:01:07.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""especially I liked the DOOM mode line,""" start="00:01:12.180" video="mainVideo-flat" id="subtitle"]] +[[!template text="""which was, I think it is,""" start="00:01:13.740" video="mainVideo-flat" id="subtitle"]] +[[!template text="""it is, and it was cool at that time.""" start="00:01:15.560" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I was using other themes and it was not that""" start="00:01:20.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""easy to adapt for these other themes and even""" start="00:01:23.760" video="mainVideo-flat" id="subtitle"]] +[[!template text="""less when you are in an environment with""" start="00:01:26.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""dynamic themes like mine because I tend to""" start="00:01:30.060" video="mainVideo-flat" id="subtitle"]] +[[!template text="""adapt the theme to the light conditions in my""" start="00:01:36.500" video="mainVideo-flat" id="subtitle"]] +[[!template text="""working place. So what I did at the end was""" start="00:01:40.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""coming up with a style for faces called flood""" start="00:01:44.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""button for boxes, called flood button as a""" start="00:01:49.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""simple way to get modern looking buttons and""" start="00:01:52.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""bars. So flood button is a face style for""" start="00:01:59.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""boxes within buttons that automatically sets""" start="00:02:02.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the border color to the background of the""" start="00:02:05.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""face, as opposed to nil,""" start="00:02:08.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""which uses the foreground.""" start="00:02:10.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And this produces a very doom mode line-ish""" start="00:02:14.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""look and feel. And if you want to know where""" start="00:02:18.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I use it, basically for the mode line and I'm""" start="00:02:21.580" video="mainVideo-flat" id="subtitle"]] +[[!template text="""using tab line for a long time now.""" start="00:02:24.720" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So for the mode line and for tab line to""" start="00:02:28.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""organize my windows. And since an image is""" start="00:02:35.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""worth more than a thousand words,""" start="00:02:37.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm just going to stop this and start sharing""" start="00:02:40.860" video="mainVideo-flat" id="subtitle"]] +[[!template text="""a small Emacs environment I have ready for""" start="00:02:44.120" video="mainVideo-flat" id="subtitle"]] +[[!template text="""this talk where I'm going to show you a flat""" start="00:02:47.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""button in real life. So if you hold with me,""" start="00:02:50.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm going to share a window.""" start="00:02:56.100" video="mainVideo-flat" id="subtitle"]] +[[!template text="""It's going to be this 1.""" start="00:02:58.840" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Share and share. Here we are.""" start="00:03:01.386" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And share. Here we are.""" start="00:03:01.780" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So this is an Emacs which is recent,""" start="00:03:08.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""reasonably recent. Nothing especially it was""" start="00:03:13.460" video="mainVideo-flat" id="subtitle"]] +[[!template text="""compiled, it's Emacs 30.""" start="00:03:14.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And I think what I have here is something""" start="00:03:18.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""that I compiled last weekend.""" start="00:03:19.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I was tempted to use something compiled this""" start="00:03:24.940" video="mainVideo-flat" id="subtitle"]] +[[!template text="""morning, but I saw a patch by Ellie regarding""" start="00:03:28.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""something in the faces and I didn't want to""" start="00:03:30.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""live a too risky life here,""" start="00:03:34.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""so I'm going to use this.""" start="00:03:36.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm not starting the ZMAC from the normal""" start="00:03:40.740" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Emacs directory. I have my own,""" start="00:03:44.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I have a special customization directory for""" start="00:03:49.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Emacs, and this is this 1.""" start="00:03:51.560" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And here what I have is basically an early""" start="00:03:57.760" video="mainVideo-flat" id="subtitle"]] +[[!template text="""init and an init. So the early init,""" start="00:04:01.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""which is quite stupid as you see,""" start="00:04:03.680" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the only thing that it does is getting rid of""" start="00:04:07.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""most of the things that I'm not going to be""" start="00:04:10.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""using here. So I have no toolbar,""" start="00:04:12.740" video="mainVideo-flat" id="subtitle"]] +[[!template text="""no scroll bar, no tool tips.""" start="00:04:15.700" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I don't like global highlighting my line art,""" start="00:04:20.560" video="mainVideo-flat" id="subtitle"]] +[[!template text="""so I'm not using that.""" start="00:04:21.720" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm not using dialogues.""" start="00:04:22.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And to start up easier,""" start="00:04:25.560" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I don't inhibit, I don't use any startups""" start="00:04:29.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""screen. So just to make sure that everything""" start="00:04:34.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""is correct, that everything is as I want,""" start="00:04:41.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""just to show you my Emacs.""" start="00:04:44.840" video="mainVideo-flat" id="subtitle"]] +[[!template text="""As you see the Emacs 30,""" start="00:04:49.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""which was built on the 26th of November which""" start="00:04:53.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""was not very long ago.""" start="00:04:55.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And now here comes the real magic.""" start="00:04:57.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""My init and my init file.""" start="00:05:00.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Maybe I go to my init file here.""" start="00:05:04.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""What I have is just a variable saying that I""" start="00:05:11.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""want an extra 8 pixels for my mode line.""" start="00:05:15.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And I have 2 functions.""" start="00:05:18.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""1 is modifying the mode line,""" start="00:05:23.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""both the active and the inactive,""" start="00:05:25.920" video="mainVideo-flat" id="subtitle"]] +[[!template text="""using the nil style with this line width of 8""" start="00:05:32.180" video="mainVideo-flat" id="subtitle"]] +[[!template text="""pixels and to compare with it what I have""" start="00:05:36.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""here is another function which will customize""" start="00:05:39.140" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the face for mode line and instead of using""" start="00:05:42.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""nil I'm using here flat button.""" start="00:05:44.960" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So this is my all the magic that I need.""" start="00:05:49.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm going to copy that and I'm going to go to""" start="00:05:53.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the scratch buffer which is always the best""" start="00:05:57.340" video="mainVideo-flat" id="subtitle"]] +[[!template text="""way of checking these things.""" start="00:05:58.780" video="mainVideo-flat" id="subtitle"]] +[[!template text="""When I normally work with themes,""" start="00:06:05.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""what I do is if I want to further modify the""" start="00:06:09.320" video="mainVideo-flat" id="subtitle"]] +[[!template text="""themes, I add an advice to load a theme after""" start="00:06:13.620" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the theme is loaded. In this first case,""" start="00:06:17.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""what I'm going to be doing is adding the nil""" start="00:06:21.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""sign so that you can see it.""" start="00:06:22.680" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And once this is done,""" start="00:06:30.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm going to load 1 of the Modo Soprandi""" start="00:06:33.000" video="mainVideo-flat" id="subtitle"]] +[[!template text="""themes, the tinted 1. Here we are.""" start="00:06:42.600" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And as you can see, when I loaded the theme,""" start="00:06:56.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""what I see here is my mode line with the""" start="00:07:01.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""x-ray pixels using since I'm using the nil""" start="00:07:05.320" video="mainVideo-flat" id="subtitle"]] +[[!template text="""style it's using the background color and""" start="00:07:09.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""this gives you this thick black line there""" start="00:07:12.620" video="mainVideo-flat" id="subtitle"]] +[[!template text="""furthermore if you have the inactive line you""" start="00:07:17.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""see that it is grayed out so it's always""" start="00:07:20.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""using the foreground color.""" start="00:07:22.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So now what I'm going to do is to load the""" start="00:07:33.300" video="mainVideo-flat" id="subtitle"]] +[[!template text="""models we have any which is the dark theme""" start="00:07:35.200" video="mainVideo-flat" id="subtitle"]] +[[!template text="""and this case what you see is the love deal""" start="00:07:40.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the lines always using the foreground color""" start="00:07:43.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""use the Give you an extra 8 pixels of a white""" start="00:07:49.200" video="mainVideo-flat" id="subtitle"]] +[[!template text="""color here, which is not what we really want.""" start="00:07:53.000" video="mainVideo-flat" id="subtitle"]] +[[!template text="""At least not what I wanted to have.""" start="00:07:58.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So what I'm going to do now is I'm going to""" start="00:08:01.560" video="mainVideo-flat" id="subtitle"]] +[[!template text="""remove this advice and add the flat style""" start="00:08:08.940" video="mainVideo-flat" id="subtitle"]] +[[!template text="""thing, flat style function,""" start="00:08:12.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""so that we're going to do the same.""" start="00:08:15.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""But now when I load the themes I'm going to""" start="00:08:18.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""have a flat button style for the mode line""" start="00:08:20.760" video="mainVideo-flat" id="subtitle"]] +[[!template text="""and you'll see the difference.""" start="00:08:21.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So if I now load Modo Software Andy theme,""" start="00:08:29.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""tint it, what I get here is as you see I get""" start="00:08:35.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""a solid mode line which is a bit more which""" start="00:08:40.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""is wider than the normal mode line And if I""" start="00:08:49.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""go to the dark theme, I am going to see,""" start="00:08:53.140" video="mainVideo-flat" id="subtitle"]] +[[!template text="""you're going to see that now the theme""" start="00:08:55.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""changes and I have a mode line which is,""" start="00:08:59.860" video="mainVideo-flat" id="subtitle"]] +[[!template text="""if not the doom mode line,""" start="00:09:02.700" video="mainVideo-flat" id="subtitle"]] +[[!template text="""quite close to the Doom mode line.""" start="00:09:08.260" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Where do I use this? Personally,""" start="00:09:11.200" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I use it for the mode line and for the tab""" start="00:09:15.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""line, as I've said. And it gives me this""" start="00:09:18.960" video="mainVideo-flat" id="subtitle"]] +[[!template text="""clean themes with thicker mode line and tab""" start="00:09:27.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""lines which at least in my personal feeling""" start="00:09:33.620" video="mainVideo-flat" id="subtitle"]] +[[!template text="""look quite modern. And this will be my""" start="00:09:40.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""demonstration. So I'm going to stop sharing""" start="00:09:43.820" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the screen and I'm going to try and see if""" start="00:09:46.820" video="mainVideo-flat" id="subtitle"]] +[[!template text="""there's anything on the on the chat.""" start="00:09:49.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And I just wanted to know if there are any""" start="00:09:57.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""questions. Thank you Pedro.""" start="00:10:01.240" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Yeah We are now into the Q&A portion of the""" start="00:10:05.000" video="mainVideo-flat" id="subtitle"]] +[[!template text="""talk. So if folks have questions,""" start="00:10:06.420" video="mainVideo-flat" id="subtitle"]] +[[!template text="""please post them on IRC or on the pad and""" start="00:10:10.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""we'll take them up here.""" start="00:10:11.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Okay, I see a question here saying,""" start="00:10:25.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""do you plan to upstream the style into""" start="00:10:28.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""core-remix? It's part of core-remix since""" start="00:10:32.580" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Emacs 29, so you have it.""" start="00:10:35.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""How difficult to...I mean,""" start="00:10:49.060" video="mainVideo-flat" id="subtitle"]] +[[!template text="""you already have the flat button style in""" start="00:10:54.320" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Core Remax. And you've seen that the main""" start="00:10:57.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""thing is, if you want to have a thing like""" start="00:11:00.740" video="mainVideo-flat" id="subtitle"]] +[[!template text="""that, you just have to customize the face.""" start="00:11:06.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I don't think it's too difficult to do.""" start="00:11:10.920" video="mainVideo-flat" id="subtitle"]] +[[!template text="""It's adding the style that you want.""" start="00:11:13.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So if you want to see it again,""" start="00:11:17.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm going to go and share the screen once""" start="00:11:20.860" video="mainVideo-flat" id="subtitle"]] +[[!template text="""again and show you the only thing that you""" start="00:11:23.980" video="mainVideo-flat" id="subtitle"]] +[[!template text="""really need to do. And control X 1,""" start="00:11:31.740" video="mainVideo-flat" id="subtitle"]] +[[!template text="""control X buffer to init.""" start="00:11:34.680" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So this is what you would have to do to get""" start="00:11:41.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""your mode line or mode line inactive with a""" start="00:11:48.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""flat button style. So what you do is you get""" start="00:11:52.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""your face like this, the face that you want""" start="00:11:56.120" video="mainVideo-flat" id="subtitle"]] +[[!template text="""to modify. You say that you inherit from the""" start="00:11:59.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""original face and what you do is that you add""" start="00:12:02.920" video="mainVideo-flat" id="subtitle"]] +[[!template text="""a box with the line width that you want and""" start="00:12:06.820" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the style plug button.""" start="00:12:08.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I don't think it's too difficult to do.""" start="00:12:10.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""How much work was involved in implementing""" start="00:12:23.100" video="mainVideo-flat" id="subtitle"]] +[[!template text="""this style? It is not 1 of the biggest""" start="00:12:27.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""patches you have in Emacs.""" start="00:12:28.940" video="mainVideo-flat" id="subtitle"]] +[[!template text="""It was my first patch,""" start="00:12:32.260" video="mainVideo-flat" id="subtitle"]] +[[!template text="""so it was like 20 liners.""" start="00:12:34.500" video="mainVideo-flat" id="subtitle"]] +[[!template text="""It's not too much. Yes,""" start="00:12:40.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I am going to go and...""" start="00:12:44.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Oops. SKB and... There you are.""" start="00:12:54.733" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And there you are. I've checked it for copy""" start="00:12:58.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""and paste. Of course, then what you have to""" start="00:13:05.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""do is to add an advice and add this thing""" start="00:13:09.440" video="mainVideo-flat" id="subtitle"]] +[[!template text="""after the add this code after the well after""" start="00:13:16.680" video="mainVideo-flat" id="subtitle"]] +[[!template text="""you've loaded the theme.""" start="00:13:17.760" video="mainVideo-flat" id="subtitle"]] +[[!template text="""It says, ModeLine and ModeLineInactive.""" start="00:13:22.420" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'm also using it for TabLine and""" start="00:13:27.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""TabLineInactive and all this kind of things.""" start="00:13:29.820" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Thanks.""" start="00:13:30.060" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Thanks. Any other questions?""" start="00:14:00.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Reactions? Thank you. Thank you.""" start="00:14:35.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Okay, I think we still have about 6 or 7 more""" start="00:15:04.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""minutes of live Q&A on stream,""" start="00:15:05.840" video="mainVideo-flat" id="subtitle"]] +[[!template text="""so if folks have any more questions,""" start="00:15:07.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""please do feel free to post them on the pad.""" start="00:15:09.940" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Silence. Silence. Silence.""" start="00:15:30.060" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Well, do you teach eMAX to any of your""" start="00:16:02.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""university students? As such,""" start="00:16:04.700" video="mainVideo-flat" id="subtitle"]] +[[!template text="""there's no course that we teach,""" start="00:16:08.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""but in tutorships and in tutoring sessions,""" start="00:16:12.800" video="mainVideo-flat" id="subtitle"]] +[[!template text="""when we do practical things,""" start="00:16:15.460" video="mainVideo-flat" id="subtitle"]] +[[!template text="""and I do a lot, I tend to use Emacs for all""" start="00:16:21.100" video="mainVideo-flat" id="subtitle"]] +[[!template text="""the tasks so that the students get involved""" start="00:16:24.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""in it. I also have a small introduction to""" start="00:16:28.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Emacs that I share with my students.""" start="00:16:29.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So So every year I have 2 or 3 new adepts.""" start="00:16:33.400" video="mainVideo-flat" id="subtitle"]] +[[!template text="""We have a question on IRC.""" start="00:17:43.900" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Someone asking can you please show what the""" start="00:17:46.920" video="mainVideo-flat" id="subtitle"]] +[[!template text="""tab line looks like? Just a second.""" start="00:17:53.160" video="mainVideo-flat" id="subtitle"]] +[[!template text="""This would be like this.""" start="00:17:56.880" video="mainVideo-flat" id="subtitle"]] +[[!template text="""For that I'm going to use my regular Emacs.""" start="00:18:03.096" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Just my my regular emacs so just let me fire""" start="00:18:06.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""it up. Sure.""" start="00:18:09.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""And""" start="00:18:23.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""That's my current situation with the tab""" start="00:18:39.760" video="mainVideo-flat" id="subtitle"]] +[[!template text="""line. I do have a couple of functions.""" start="00:18:42.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So this is 1 of the things that I use.""" start="00:18:44.680" video="mainVideo-flat" id="subtitle"]] +[[!template text="""As you see, both the tab line here and the""" start="00:18:51.500" video="mainVideo-flat" id="subtitle"]] +[[!template text="""mode line change. And the other thing is I""" start="00:18:57.040" video="mainVideo-flat" id="subtitle"]] +[[!template text="""can, this is for some situations,""" start="00:19:00.520" video="mainVideo-flat" id="subtitle"]] +[[!template text="""not currently because it's just later,""" start="00:19:03.600" video="mainVideo-flat" id="subtitle"]] +[[!template text="""it's a bit too dark. But this is for light""" start="00:19:06.420" video="mainVideo-flat" id="subtitle"]] +[[!template text="""days. I have like 3 or 4 themes that I can""" start="00:19:10.260" video="mainVideo-flat" id="subtitle"]] +[[!template text="""switch to these are the themes that I""" start="00:19:15.020" video="mainVideo-flat" id="subtitle"]] +[[!template text="""normally use This is how the tab line looks.""" start="00:19:18.120" video="mainVideo-flat" id="subtitle"]] +[[!template text="""This is how the tab line here looks with the""" start="00:19:22.660" video="mainVideo-flat" id="subtitle"]] +[[!template text="""with a flat button style.""" start="00:19:28.280" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Looks great, Thank you for sharing.""" start="00:19:35.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""You're welcome.""" start="00:19:37.200" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Okay, I think we have 2 or 3 more minutes.""" start="00:19:50.720" video="mainVideo-flat" id="subtitle"]] +[[!template text="""So if folks, if you have any final questions""" start="00:19:53.600" video="mainVideo-flat" id="subtitle"]] +[[!template text="""for Pedro, please post them in.""" start="00:19:55.480" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Okay. Okay.""" start="00:20:37.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Okay.""" start="00:20:54.260" video="mainVideo-flat" id="subtitle"]] +[[!template text="""No further questions. Yeah,""" start="00:21:34.540" video="mainVideo-flat" id="subtitle"]] +[[!template text="""it seems we don't have any further questions.""" start="00:21:36.380" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Just another audience member also thanking""" start="00:21:39.100" video="mainVideo-flat" id="subtitle"]] +[[!template text="""you on the chat. So with that,""" start="00:21:44.060" video="mainVideo-flat" id="subtitle"]] +[[!template text="""I'll say Thank you very much,""" start="00:21:45.320" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Pedro, for your great talk and for the Q&A,""" start="00:21:47.080" video="mainVideo-flat" id="subtitle"]] +[[!template text="""for your work and for helping spreading the""" start="00:21:50.220" video="mainVideo-flat" id="subtitle"]] +[[!template text="""joy of Emacs. Okay, thanks.""" start="00:21:52.360" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Thank you. Bye-bye. It was a nice experience""" start="00:21:56.140" video="mainVideo-flat" id="subtitle"]] +[[!template text="""here. Very nice tool. Cheers.""" start="00:21:59.200" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Awesome. Take care. Bye.""" start="00:22:01.640" video="mainVideo-flat" id="subtitle"]] +[[!template text="""Bye. Bye.""" start="00:22:02.720" video="mainVideo-flat" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20flat%3A%20A%20modern%20Emacs%20look-and-feel%20without%20pain) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/flat-before.md b/2023/info/flat-before.md new file mode 100644 index 00000000..fdae80b7 --- /dev/null +++ b/2023/info/flat-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 23-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="flat-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1DRDY8vZK3SW5M8zAPJQSp">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/flat-nav.md b/2023/info/flat-nav.md new file mode 100644 index 00000000..02ba0748 --- /dev/null +++ b/2023/info/flat-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a> +Next by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/gc-after.md b/2023/info/gc-after.md new file mode 100644 index 00000000..90c0a853 --- /dev/null +++ b/2023/info/gc-after.md @@ -0,0 +1,964 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="gc-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]] + +[[!template text="""Hello everyone, my name is Ihor Radchenko,""" start="00:00:00.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you may know me from Org Mailing List.""" start="00:00:04.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""However, today I'm not going to talk about Org Mode.""" start="00:00:07.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Today I'm going to talk about""" start="00:00:09.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Emacs performance and how it's affected""" start="00:00:11.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""by its memory management code.""" start="00:00:14.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""First, I will introduce the basic concepts""" start="00:00:19.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of Emacs memory management and what garbage collection is.""" start="00:00:21.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Then I will show you user statistics""" start="00:00:26.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""collected from volunteer users over the last half year""" start="00:00:30.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and I will end with some guidelines""" start="00:00:34.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""on how to tweak Emacs garbage collection customizations""" start="00:00:39.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to optimize Emacs performance""" start="00:00:44.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and when it's necessary or not to do.""" start="00:00:47.480" video="mainVideo-gc" id="subtitle"]] + +[[!template new="1" text="""About garbage collection in Emacs""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]] + +[[!template text="""Let's begin. What is garbage collection?""" start="00:00:51.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""To understand what is garbage collection,""" start="00:00:54.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we need to realize that anything you do in Emacs""" start="00:00:56.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is some kind of command. Any command is most likely""" start="00:00:59.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""running some Elisp code. Every time you run Elisp code,""" start="00:01:02.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you most likely need to locate certain memory in RAM.""" start="00:01:05.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Some of this memory is retained for a long time""" start="00:01:09.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and some of this memory is transient.""" start="00:01:12.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Of course, Emacs has to clear this transient memory""" start="00:01:15.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""from time to time, to not occupy all the possible RAM""" start="00:01:19.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""in the computer. In this small example,""" start="00:01:21.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we have one global variable""" start="00:01:21.448" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that is assigned a value,""" start="00:01:28.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but when assigning the value,""" start="00:01:31.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we first allocate a temporary variable""" start="00:01:33.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then a temporary list""" start="00:01:35.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and only retain some part of this list""" start="00:01:37.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""in this global variable.""" start="00:01:40.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""In terms of memory graph""" start="00:01:42.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we can represent this as two variable slots,""" start="00:01:44.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""one transient, one permanent,""" start="00:01:50.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then a list of three cons cells,""" start="00:01:53.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""part of which is retained as a global variable""" start="00:01:56.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but part of it which is a temporary variable symbol.""" start="00:02:01.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""The first term of the list is not used""" start="00:02:05.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and it might be cleared at some point.""" start="00:02:07.680" video="mainVideo-gc" id="subtitle"]] + +[[!template new="1" text="""Garbage collection in Emacs""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]] + +[[!template text="""So that's what Emacs does.""" start="00:02:09.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Every now and then, Emacs goes through all the memory""" start="00:02:12.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and identifies which part of the memory are not used""" start="00:02:15.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then clear them so that it can free up the RAM.""" start="00:02:19.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""This process is called garbage collection""" start="00:02:23.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and Emacs uses a very simple and old algorithm""" start="00:02:25.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is called Mark & Sweep.""" start="00:02:28.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So doing this mark and sweep process""" start="00:02:30.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is basically two stages.""" start="00:02:33.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""First, Emacs scans all the memory that is allocated""" start="00:02:34.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then identifies which memory is still in use""" start="00:02:40.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is linked to some variables, for example,""" start="00:02:42.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and which memory is not used anymore""" start="00:02:45.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""even though it was allocated in the past.""" start="00:02:47.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""The second stage [??] whenever a memory is not,""" start="00:02:49.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that is not allocated. During the process""" start="00:02:53.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Emacs cannot do anything now.""" start="00:02:59.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So basically, every time Emacs scans the memory,""" start="00:03:00.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it freezes up and doesn't respond to anything,""" start="00:03:04.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if it takes too much time so that users can notice it,""" start="00:03:07.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then of course Emacs is not responsive at all,""" start="00:03:10.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if this garbage collection is triggered too frequently,""" start="00:03:13.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then it's not just not responsive every now and then.""" start="00:03:19.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""It's also not responsive all the time,""" start="00:03:22.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""almost all the time,""" start="00:03:24.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so it cannot even normally type or stuff""" start="00:03:26.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or do some normal commands.""" start="00:03:27.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""This mark and sweep algorithm is taking longer""" start="00:03:32.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the more memory Emacs uses. So basically,""" start="00:03:36.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the more buffers you open, the more packages you load,""" start="00:03:40.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the more complex commands you run, the more memory is used,""" start="00:03:44.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and basically, the longer Emacs takes""" start="00:03:48.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to perform a single garbage collection.""" start="00:03:52.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Of course, Emacs being Emacs""" start="00:03:57.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""this garbage collection can be tweaked.""" start="00:04:02.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""In particular users can tweak""" start="00:04:06.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""how frequently Emacs does garbage collection""" start="00:04:08.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""using two basic variables: `gc-cons-threshold`""" start="00:04:10.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and `gc-cons-percentage`.""" start="00:04:13.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""`gc-cons-threshold` is the raw number of kilobytes""" start="00:04:15.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Emacs needs to allocate""" start="00:04:21.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""before triggering another garbage collection,""" start="00:04:22.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and the `gc-cons-percentage` is similar,""" start="00:04:25.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but it's defined in terms of fraction""" start="00:04:27.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of already-allocated memory.""" start="00:04:30.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""If you follow various Emacs forums,""" start="00:04:34.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you may be familiar with people complaining about""" start="00:04:38.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""garbage collection. There are many many suggestions""" start="00:04:41.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""about what to do with it.""" start="00:04:46.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Most frequently, you see `gc-cons-threshold`""" start="00:04:48.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""recommended to be increased,""" start="00:04:54.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and a number of pre-packaged Emacs distributions""" start="00:04:56.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like Doom Emacs do increase it.""" start="00:05:01.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I have seen suggestions which are actually horrible""" start="00:05:04.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to disable garbage collection temporarily""" start="00:05:07.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or for a long time.""" start="00:05:10.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Which is nice... You can see it quite frequently,""" start="00:05:14.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which indicates there might be some problem.""" start="00:05:17.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""However, every time one user poses about this problem,""" start="00:05:19.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's just one data point and it doesn't mean""" start="00:05:23.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that everyone actually suffers from it.""" start="00:05:26.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""It doesn't mean that everyone should do it.""" start="00:05:28.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So in order to understand if this garbage collection""" start="00:05:33.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is really a problem which is a common problem""" start="00:05:35.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we do need some kind of statistics""" start="00:05:39.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and only using the actual statistics""" start="00:05:44.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we can understand if it should be recommended for everyone""" start="00:05:46.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to tweak the defaults or like whether""" start="00:05:52.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it should be recommended for certain users""" start="00:05:55.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or maybe it should be asked Emacs devs""" start="00:05:57.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to do something about the defaults.""" start="00:05:59.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And what I did some time ago is exactly this.""" start="00:06:01.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I tried to collect the user statistics.""" start="00:06:07.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So I wrote a small package on Elp""" start="00:06:09.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and some users installed this package""" start="00:06:14.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then reported back these statistics""" start="00:06:18.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of the garbage collection for their particular use.""" start="00:06:22.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""By now we have obtained 129 user submissions""" start="00:06:24.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""with over 1 million GC records in there.""" start="00:06:30.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So like some of these submissions""" start="00:06:34.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""used default GC settings without any customizations.""" start="00:06:38.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Some used increased GC cost threshold""" start="00:06:43.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and GC cost percentage.""" start="00:06:46.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So using this data we can try to draw""" start="00:06:47.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""some reliable conclusions on what should be done""" start="00:06:53.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and whether should anything be done about garbage collection""" start="00:06:56.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""on Emacs dev level or at least on user level.""" start="00:06:59.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Of course we need to keep in mind""" start="00:07:02.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that there's some kind of bias""" start="00:07:05.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because it's more likely""" start="00:07:07.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that users already have problems with GC""" start="00:07:09.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or they think they have problems with GC""" start="00:07:11.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""will report and submit the data.""" start="00:07:13.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""But anyway having s statistics is much more useful""" start="00:07:15.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""than just having anecdotal evidences""" start="00:07:20.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""from one or other reddit posts.""" start="00:07:22.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And just one thing I will do""" start="00:07:25.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""during the rest of my presentation""" start="00:07:28.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is that for all the statistics""" start="00:07:30.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I will normalize user data""" start="00:07:32.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so that every user contributes equally.""" start="00:07:35.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""For example if one user submits like""" start="00:07:37.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""100 hours Emacs uptime statistics""" start="00:07:40.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and other users submit one hour Emacs uptime""" start="00:07:43.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then I will anyway make it so that they contribute equally.""" start="00:07:46.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Let's start from one of the most obvious things""" start="00:07:52.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we can look into is""" start="00:07:56.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is the time it takes for garbage collection""" start="00:07:57.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to single garbage collection process.""" start="00:08:00.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Here you see frequency distribution of GC duration""" start="00:08:05.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for all the 129 users we got""" start="00:08:11.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you can see that most of the garbage collections""" start="00:08:15.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""are done quite quickly in less than 0.1 second""" start="00:08:22.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and less than 0.1 second is usually just not noticeable.""" start="00:08:27.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So even though there is garbage collection""" start="00:08:32.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it will not interrupt the work in Emacs.""" start="00:08:34.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""However there is a fraction of users""" start="00:08:39.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""who experience garbage collection""" start="00:08:43.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it takes like 0.2, 0.3 or even half a second""" start="00:08:45.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which will be quite noticeable.""" start="00:08:48.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""For the purposes of this study""" start="00:08:50.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I will consider that anything that is less than 0.1 second""" start="00:08:55.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is insignificant so like you will not notice it""" start="00:08:59.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and it's like obviously""" start="00:09:02.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""all the Emacs usage will be just normal.""" start="00:09:04.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""But if it's more than 0.1 or 0.2 seconds""" start="00:09:07.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then it will be very noticeable""" start="00:09:11.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you will see that Emacs hang for a little while""" start="00:09:13.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or not so little while. In terms of numbers""" start="00:09:16.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's better to plot the statistics not as a distribution""" start="00:09:21.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but as a cumulative distribution.""" start="00:09:26.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So like at every point of this graph""" start="00:09:28.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you'll see like for example here 0.4 seconds""" start="00:09:31.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have this percent of like almost 90% of users""" start="00:09:37.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""have no more than 0.4 gc duration.""" start="00:09:42.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So like we can look here if we take one""" start="00:09:49.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""gc critical gc duration which is 0.1 second""" start="00:09:53.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""0.1 second and look at how many users have""" start="00:09:56.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it so we have 56% which is like""" start="00:10:00.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""44% users have less than 0.1 second gc duration""" start="00:10:02.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and the rest 56% have more than 0.1 second.""" start="00:10:09.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So you can see like more than half of users""" start="00:10:12.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""actually have noticeable gc delay""" start="00:10:16.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so the Emacs freezes for some noticeable time""" start="00:10:20.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and a quarter of users actually have very noticeable""" start="00:10:23.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so like Emacs freezes such that you see an actual delay""" start="00:10:27.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that Emacs actually has""" start="00:10:31.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is quite significant and important point.""" start="00:10:36.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""But apart from the duration of each individual gc""" start="00:10:44.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it is important to see how frequent it is""" start="00:10:47.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because even if you do notice a delay""" start="00:10:49.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""even a few seconds delay""" start="00:10:52.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it doesn't matter if it happens once""" start="00:10:54.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""during the whole Emacs session.""" start="00:10:57.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So if you look into frequency distribution again here""" start="00:10:59.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I plot time between subsequent garbage collections""" start="00:11:05.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""versus how frequent it is and we have very clear trend""" start="00:11:13.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that most of the garbage collections are quite frequent""" start="00:11:17.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like we talk about every few seconds a few tens of seconds.""" start="00:11:21.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""There's a few outliers which are at very round numbers""" start="00:11:25.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like 60 seconds, 120 seconds, 300 seconds.""" start="00:11:30.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""These are usually timers so like""" start="00:11:35.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have something running on timer""" start="00:11:37.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then it is complex command""" start="00:11:40.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and it triggers garbage collection""" start="00:11:43.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but it's not the majority.""" start="00:11:45.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Again to run the numbers""" start="00:11:48.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's better to look into cumulative distribution""" start="00:11:51.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and see that 50% of garbage collections""" start="00:11:53.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""are basically less than 10 seconds apart.""" start="00:11:56.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And we can combine it with previous data""" start="00:11:58.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and we look into whatever garbage collection""" start="00:12:02.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""takes less than 10 seconds from each other""" start="00:12:07.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and also takes more than say 0.1 seconds.""" start="00:12:09.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So and then we see that""" start="00:12:13.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""one quarter of all garbage collections""" start="00:12:15.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""are just noticeable and also frequent""" start="00:12:17.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and 9% are not like""" start="00:12:21.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""more than 0.2% very noticeable and also frequent.""" start="00:12:23.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So basically it constitutes Emacs freezing.""" start="00:12:27.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So 9% of all the garbage collection Emacs freezing.""" start="00:12:30.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Of course if you remember there is a bias""" start="00:12:33.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but 9% is quite significant number.""" start="00:12:37.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So garbage collection can really slow down things""" start="00:12:40.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""not for everyone but for significant fraction of users.""" start="00:12:44.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Another thing I'd like to look into""" start="00:12:48.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is what I call agglomerated GCs.""" start="00:12:52.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""What I mean by agglomerated is""" start="00:12:55.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when you have one garbage collection""" start="00:12:57.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then another garbage immediately after it.""" start="00:13:00.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So in terms of numbers I took""" start="00:13:03.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""every subsequent garbage collection""" start="00:13:05.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is either immediately after""" start="00:13:08.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or no more than one second after each.""" start="00:13:10.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So from point of view of users is like""" start="00:13:13.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""multiple garbage collection they add up together""" start="00:13:16.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""into one giant garbage collection.""" start="00:13:20.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And if you look into numbers""" start="00:13:23.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of how many agglomerated garbage collections there are""" start="00:13:25.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you can see even numbers over 100.""" start="00:13:29.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So 100 garbage collection going one after another.""" start="00:13:32.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Even if you think about each garbage collection""" start="00:13:35.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""taking 0.1 second we look into 100 of them""" start="00:13:39.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's total 10 seconds.""" start="00:13:42.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""It's like Emacs hanging forever""" start="00:13:44.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or like a significant number is also 10.""" start="00:13:46.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So again this would be very annoying to meet such thing.""" start="00:13:53.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""How frequently does it happen?""" start="00:13:56.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Again we can plot cumulative distribution""" start="00:13:57.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and we see that 20 percent like 19 percent""" start="00:14:00.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of all the garbage collection are at least two together""" start="00:14:03.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and 8 percent like more than 10. So like you think about oh""" start="00:14:07.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""each garbage collection is not taking much time""" start="00:14:13.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but when you have 10 of them yeah that becomes a problem.""" start="00:14:15.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Another thing is to answer a question""" start="00:14:24.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that some people complain about is that""" start="00:14:29.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""longer you use Emacs the slower Emacs become.""" start="00:14:32.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Of course it may be caused by garbage collection""" start="00:14:35.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and I wanted to look into how garbage collection time""" start="00:14:43.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and other statistics,""" start="00:14:48.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""other parameters are evolving over time.""" start="00:14:49.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And what I can see here is a cumulative distribution""" start="00:14:53.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of GC duration for like first 10 minutes of Emacs uptime""" start="00:14:58.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""first 100 minutes first 1000 minutes.""" start="00:15:03.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And if you look closer then you see""" start="00:15:06.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that each individual garbage collection on average""" start="00:15:10.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""takes longer as you use Emacs longer.""" start="00:15:14.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""However this longer is not much it's like maybe 10 percent""" start="00:15:18.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like basically garbage collection gets like""" start="00:15:24.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""slow Emacs down more as you use Emacs more but not much.""" start="00:15:29.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So basically if you do you see Emacs""" start="00:15:34.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""being slower and slower over time""" start="00:15:38.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's probably not really garbage collection""" start="00:15:40.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because it doesn't change too much.""" start="00:15:43.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And if you look into time""" start="00:15:45.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""between individual garbage collections""" start="00:15:48.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you see that the time actually increases""" start="00:15:50.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""as you use Emacs longer which makes sense""" start="00:15:53.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because initially like first few minutes""" start="00:15:56.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have all kind of packages loading""" start="00:15:58.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like all the port loading and then later""" start="00:16:01.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""everything is loaded and things become more stable.""" start="00:16:04.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So the conclusion on this part is that""" start="00:16:07.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if Emacs becomes slower in a long session""" start="00:16:12.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's probably not caused by garbage collection.""" start="00:16:16.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And one word of warning of course is that""" start="00:16:18.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's all nice and all when I present the statistics""" start="00:16:23.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but it's only an average""" start="00:16:27.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if you are an actual user like here is one example""" start="00:16:29.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which shows a total garbage collection time""" start="00:16:34.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like accumulated together over Emacs uptime""" start="00:16:37.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you see different lines""" start="00:16:40.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which correspond to different sessions of one user""" start="00:16:43.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you see they are wildly different""" start="00:16:45.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like one time there is almost no garbage collection""" start="00:16:48.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""another time you see garbage collection""" start="00:16:51.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because probably Emacs is used more early""" start="00:16:54.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or like different pattern of usage""" start="00:16:57.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and even during a single Emacs session""" start="00:16:59.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you see a different slope""" start="00:17:03.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of this curve which means that""" start="00:17:04.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""sometimes garbage collection is infrequent""" start="00:17:06.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and sometimes it's much more frequent""" start="00:17:09.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so it's probably much more noticeable one time""" start="00:17:11.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and less noticeable other time.""" start="00:17:14.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""So if you think about these statistics of course""" start="00:17:15.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""they only represent an average usage""" start="00:17:19.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but sometimes it can get worse sometimes it can get better.""" start="00:17:23.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""The last parameter I'd like to talk about is""" start="00:17:26.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""garbage collection during Emacs init.""" start="00:17:33.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Basically if you think about what happens during Emacs init""" start="00:17:35.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like when Emacs just starting up""" start="00:17:40.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then whatever garbage collection""" start="00:17:41.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there it's one or it's several times""" start="00:17:44.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it all contributes to Emacs taking longer to start.""" start="00:17:46.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""And again we can look into the statistic""" start="00:17:51.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and see what is the total GC duration after Emacs init""" start="00:17:56.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and we see that 50% of all the submissions""" start="00:18:01.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""garbage collection adds up more than one second""" start="00:18:06.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to Emacs init time and for 20% of users""" start="00:18:10.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's extra three seconds Emacs start time""" start="00:18:14.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is very significant""" start="00:18:17.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""especially for people who are used to Vim""" start="00:18:18.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which can start in like a fraction of a second""" start="00:18:21.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and here it just does garbage collection""" start="00:18:23.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because garbage collection is not""" start="00:18:26.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""everything Emacs does during startup""" start="00:18:27.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""adds up more to the load.""" start="00:18:29.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Okay that's all nice and all""" start="00:18:32.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but what can we do about these statistics""" start="00:18:36.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""can we draw any conclusions""" start="00:18:38.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and the answer is of course""" start="00:18:40.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like the most important conclusion here is that""" start="00:18:43.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""yes garbage collection can slow down Emacs""" start="00:18:46.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""at least for some people and what to do about it""" start="00:18:49.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there are two variables which you can tweak""" start="00:18:52.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's because gcconce threshold gcconce percentage""" start="00:18:55.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and having the statistics I can at least look a little bit""" start="00:18:58.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""into what is the effect of increasing these variables""" start="00:19:03.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like most people just increase gcconce threshold""" start="00:19:08.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and like all the submissions people did increase""" start="00:19:12.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and doesn't make much sense to decrease it""" start="00:19:16.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like to make things worse""" start="00:19:19.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of course for these statistics""" start="00:19:21.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the exact values of this increased thresholds""" start="00:19:27.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""are not always the same""" start="00:19:31.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but at least we can look into some trends""" start="00:19:33.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so first and obvious thing we can observe""" start="00:19:36.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is when we compare""" start="00:19:44.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the standard gc settings standard thresholds""" start="00:19:46.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and increased thresholds for time between""" start="00:19:50.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""subsequent gcs and as one may expect""" start="00:19:54.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if you increase the threshold""" start="00:19:57.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Emacs will do garbage collection less frequently""" start="00:19:59.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so the spacing between garbage collection increases""" start="00:20:02.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""okay the only thing is that""" start="00:20:05.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if garbage collection is less frequent""" start="00:20:07.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then each individual garbage collection becomes longer""" start="00:20:10.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so if you think about increasing""" start="00:20:14.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""garbage collection thresholds be prepared""" start="00:20:18.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that in each individual time Emacs freezes will take longer""" start="00:20:22.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""this is one caveat when we talk about""" start="00:20:26.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""this agglomerated gcs which are one after other""" start="00:20:31.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like if you increase the threshold sufficiently""" start="00:20:34.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then whatever happened that garbage collections""" start="00:20:36.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""were like done one after other""" start="00:20:42.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we can now make it so that they are actually separated""" start="00:20:44.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so like you don't see one giant freeze caused by""" start="00:20:47.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like 10 gcs in a row""" start="00:20:51.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""instead you can make it so that they are separated""" start="00:20:52.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and in statistics it's very clear""" start="00:20:55.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that the number of agglomerated garbage collections""" start="00:20:59.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""decreases dramatically when you increase the thresholds""" start="00:21:02.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's particularly evident when we look into startup time""" start="00:21:06.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if you look at gc duration during Emacs startup""" start="00:21:11.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if we look into what happens""" start="00:21:17.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when you increase the thresholds""" start="00:21:19.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's very clear that Emacs startup become faster""" start="00:21:20.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when you increase gc thresholds""" start="00:21:23.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so that's all for actual user statistics""" start="00:21:26.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and now let's try to run into""" start="00:21:33.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""some like actual recommendations""" start="00:21:35.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""on what numbers to set and before we start""" start="00:21:38.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""let me explain a little bit about""" start="00:21:42.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the difference between these two variables""" start="00:21:44.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is gc constant threshold and gc constant percentage""" start="00:21:46.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so if you think about Emacs memory""" start="00:21:48.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like there's a certain memory allocated by Emacs""" start="00:21:52.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then as you run commands and turn using Emacs""" start="00:21:55.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there is more memory allocated""" start="00:21:58.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and Emacs decides when to do garbage collection""" start="00:22:00.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""according these two variables""" start="00:22:04.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and actually what it does it chooses the larger one""" start="00:22:06.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so say you have you are late in Emacs session""" start="00:22:08.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have a lot of Emacs memory allocated""" start="00:22:12.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then you have gc constant percentage""" start="00:22:14.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is percent of the already allocated memory""" start="00:22:17.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and that percent is probably going to be the largest""" start="00:22:19.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because you have more memory""" start="00:22:25.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and memory means that percent of it is larger""" start="00:22:28.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so like you have a larger number cost""" start="00:22:32.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""by gc constant percentage""" start="00:22:36.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so in this scenario when Emacs session is already running""" start="00:22:37.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for a long time and there is a lot of memory allocated""" start="00:22:43.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have gc constant percentage""" start="00:22:45.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""controlling the garbage collection""" start="00:22:50.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""while early in Emacs there is not much memory placed""" start="00:22:52.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""Emacs just starting up then gc constant threshold""" start="00:22:55.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is controlling how frequently garbage collection happens""" start="00:22:58.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because smaller allocated memory""" start="00:23:01.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""means its percentage will be a small number""" start="00:23:04.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so in terms of default values at least""" start="00:23:06.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""gc constant threshold is 800 kilobytes""" start="00:23:12.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and gc constant percentage is 10""" start="00:23:14.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so gc constant percentage becomes larger than that threshold""" start="00:23:18.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when you have more than eight megabytes of allocated memory""" start="00:23:24.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""by Emacs which is quite early""" start="00:23:28.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and it will probably hold just during the startup""" start="00:23:31.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and once you start using your maximum""" start="00:23:34.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and once you load all the histories""" start="00:23:36.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""all the kinds of buffers it's probably going to take""" start="00:23:38.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""more than much more than eight megabytes""" start="00:23:42.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so now we understand this""" start="00:23:43.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we can draw certain recommendations""" start="00:23:50.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""about tweaking the gc thresholds""" start="00:23:53.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so first of all I need to emphasize""" start="00:23:57.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that any time you increase gc threshold""" start="00:24:01.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""an individual garbage collection time increases""" start="00:24:03.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so it's not free at all""" start="00:24:07.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if you don't have problems with garbage collection""" start="00:24:08.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is half of the users don't have much problem""" start="00:24:11.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you don't need to tweak anything""" start="00:24:13.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""only when gc is frequent and slow""" start="00:24:15.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when Emacs is really really present frequently""" start="00:24:19.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you may consider increasing gc thresholds only""" start="00:24:23.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and in particular I recommend""" start="00:24:27.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""increasing gc constant percentage""" start="00:24:31.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because that's what mostly controls gc""" start="00:24:33.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when Emacs is running for long session""" start="00:24:36.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and the numbers are probably like""" start="00:24:40.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""yeah we can estimate the effect of these numbers""" start="00:24:43.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like for example if you have a default value of 0.1 percent""" start="00:24:46.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for gc constant percentage 0.1 which is 10 percent""" start="00:24:49.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and then increase it twice""" start="00:24:52.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""obviously you get twice less frequent gcs""" start="00:24:55.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but it will come at the cost of extra 10 percent gc time""" start="00:24:58.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if you increase 10 times you can think about""" start="00:25:02.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""10 less 10 x less frequent gcs""" start="00:25:05.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but almost twice longer individual garbage collection time""" start="00:25:08.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so probably you want to set the number closer to 0.1""" start="00:25:12.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""another part of the users may actually""" start="00:25:16.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""try to optimize Emacs startup time""" start="00:25:23.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which is quite frequent problem""" start="00:25:28.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""in this case it's probably better to increase gc constant""" start="00:25:30.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but not too much so like""" start="00:25:34.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""first of all it makes sense to check""" start="00:25:38.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""whether garbage collection is a problem at all""" start="00:25:40.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""during startup and there are two variables""" start="00:25:43.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which can show what is happening this garbage collection""" start="00:25:46.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so gc done is a variable that shows""" start="00:25:50.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""how many garbage collection""" start="00:25:53.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like what is the number of garbage collections triggered""" start="00:25:55.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like when you check the value""" start="00:26:00.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or right after you start Emacs""" start="00:26:02.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you will see that""" start="00:26:04.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""number and gc elapsed variable""" start="00:26:04.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which gives you a number of seconds""" start="00:26:08.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which Emacs spent in doing garbage collection""" start="00:26:11.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so this is probably the most important variable""" start="00:26:14.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if you see it's large then you may consider tweaking it""" start="00:26:16.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for the Emacs startup we can estimate some bounds""" start="00:26:20.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because in the statistics I never saw anything""" start="00:26:26.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that is more than 10 seconds extra""" start="00:26:30.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""which even 10 seconds is probably like""" start="00:26:32.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""a really really hard upper bound so""" start="00:26:34.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or say if you want to decrease the gc contribution""" start="00:26:39.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like order of magnitude or like two orders of magnitudes""" start="00:26:44.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""let's say like as a really hard top estimate""" start="00:26:47.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then it corresponds to 80 megabytes gc constant""" start="00:26:50.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and probably much less so like""" start="00:26:55.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there's no point setting it""" start="00:26:58.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to a few hundred megabytes of course""" start="00:27:00.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there's one caveat which is important to keep in""" start="00:27:04.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""mind though that increasing the gc thresholds""" start="00:27:08.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is not just increasing individual gc time""" start="00:27:14.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there's also an actual real impact on the RAM usage""" start="00:27:16.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so like if you increase gc threshold""" start="00:27:20.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it increases the RAM usage of Emacs""" start="00:27:23.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you shouldn't think that like okay""" start="00:27:26.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I increased the threshold by like 100 megabytes""" start="00:27:29.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then 100 megabytes extra RAM usage doesn't matter""" start="00:27:33.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's not 100 megabytes""" start="00:27:37.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because less frequent garbage collection means""" start="00:27:38.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it will lead to memory fragmentation""" start="00:27:42.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so in practice if you increase the thresholds""" start="00:27:45.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to tens or hundreds of megabytes""" start="00:27:50.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we are talking about gigabytes extra RAM usage""" start="00:27:52.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for me personally when I tried to play with gc thresholds""" start="00:27:55.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I have seen Emacs taking two gigabytes like""" start="00:27:59.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""compared to several times less""" start="00:28:02.880" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when with default settings so it's not free at all""" start="00:28:05.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and only like either when you have a lot of free RAM""" start="00:28:09.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you don't care or when your Emacs is really slow""" start="00:28:13.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then you may need to consider this""" start="00:28:16.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""tweaking these defaults so again don't tweak defaults""" start="00:28:19.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if you don't really have a problem""" start="00:28:23.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and of course this RAM problem is a big big deal""" start="00:28:24.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for Emacs devs because from from the point of single user""" start="00:28:29.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you have like normal laptop most likely like normal PC""" start="00:28:35.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""with a lot of RAM you don't care about these things too much""" start="00:28:38.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but Emacs in general can run on like all kinds of machines""" start="00:28:42.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""including low-end machines with very limited RAM""" start="00:28:49.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and anytime Emacs developers consider increasing""" start="00:28:51.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the defaults for garbage collection""" start="00:28:55.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's like they always have to consider""" start="00:28:57.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if you increase them too much""" start="00:29:01.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then Emacs may just stop running on certain platforms""" start="00:29:02.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so that's a very big consideration in terms""" start="00:29:07.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of the global defaults for everyone""" start="00:29:14.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""although I have to I would say that it might be related""" start="00:29:16.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to the safe to increase GCCons threshold""" start="00:29:22.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because it mostly affects startup and during startup""" start="00:29:24.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's probably not the peak usage of Emacs""" start="00:29:27.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and like as Emacs runs for longer""" start="00:29:31.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it's probably where most of RAM will be used later""" start="00:29:35.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""on the other hand GCCons percentage is much more debating""" start="00:29:38.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because it has pros and cons""" start="00:29:44.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it will increase the RAM usage""" start="00:29:46.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it will increase the individual GC time so""" start="00:29:47.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""if we consider changing it it's much more tricky""" start="00:29:51.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and we have discussing probably measure the impact on users""" start="00:29:56.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and a final note on or from the point of view""" start="00:29:59.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of Emacs development is""" start="00:30:05.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that this simple mark-and-sweep algorithm""" start="00:30:07.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is like a very old and not the state-of-the-art algorithm""" start="00:30:11.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there are variants of garbage collection""" start="00:30:14.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that are like totally non-blocking""" start="00:30:17.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so Emacs just doesn't have to freeze""" start="00:30:19.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""during the garbage collection""" start="00:30:22.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""or there are variants of garbage collection algorithm""" start="00:30:24.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that do not scan all the memory just fraction of it""" start="00:30:26.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and scan another fraction less frequently""" start="00:30:30.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so there are actually ways just to change""" start="00:30:33.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the garbage collection algorithm to make things much faster""" start="00:30:37.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""of course like just changing the numbers of variables""" start="00:30:39.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like the numbers of variable values""" start="00:30:44.200" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is much more tricky and one has to implement it""" start="00:30:47.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""obviously it would be nice if someone implements it""" start="00:30:50.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but so far it's not happening so yeah it would be nice""" start="00:30:52.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but maybe not not so quickly""" start="00:30:55.640" video="mainVideo-gc" id="subtitle"]] +[[!template text="""there is more chance to change the defaults here""" start="00:30:59.360" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to conclude let me reiterate the most important points""" start="00:31:02.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so from point of view of users you need to understand that""" start="00:31:07.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""yes garbage collection may be a problem""" start="00:31:11.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but not for everyone so like""" start="00:31:14.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you should only think about changing the variables""" start="00:31:16.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""when you really know that garbage collection""" start="00:31:21.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""is the problem for you so if you have slow Emacs startup""" start="00:31:23.560" video="mainVideo-gc" id="subtitle"]] +[[!template text="""slow Emacs startup and you know that it's caused by""" start="00:31:27.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""garbage collection like by""" start="00:31:30.920" video="mainVideo-gc" id="subtitle"]] +[[!template text="""you can check the GC elapsed variable""" start="00:31:32.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then you may increase GC count threshold""" start="00:31:36.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""like to few tens of megabytes not more""" start="00:31:39.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""it doesn't make sense to increase it much more""" start="00:31:42.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and if you really have major problems""" start="00:31:44.480" video="mainVideo-gc" id="subtitle"]] +[[!template text="""with Emacs being slaggy""" start="00:31:48.240" video="mainVideo-gc" id="subtitle"]] +[[!template text="""then you can increase GC count percentage""" start="00:31:49.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to like 0.2 0.3 maybe""" start="00:31:52.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""one is probably overkill""" start="00:31:56.000" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but do watch your Emacs ROM usage it may be really impacted""" start="00:31:57.680" video="mainVideo-gc" id="subtitle"]] +[[!template text="""for Emacs developers I'd like to emphasize""" start="00:32:02.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""that there is a real problem with garbage collection""" start="00:32:09.720" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and nine percent of all the garbage collection""" start="00:32:12.440" video="mainVideo-gc" id="subtitle"]] +[[!template text="""data points we have correspond""" start="00:32:17.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""to really slow noticeable Emacs precision""" start="00:32:22.080" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and really frequent less than 10 seconds""" start="00:32:24.960" video="mainVideo-gc" id="subtitle"]] +[[!template text="""I'd say that it's really worth""" start="00:32:28.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""increasing GC count threshold at least during startup""" start="00:32:32.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""because it really impacts the Emacs startup time""" start="00:32:35.280" video="mainVideo-gc" id="subtitle"]] +[[!template text="""making Emacs startup much faster""" start="00:32:40.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""ideally we need to reimplement""" start="00:32:41.520" video="mainVideo-gc" id="subtitle"]] +[[!template text="""the garbage collection algorithm of course it's not easy""" start="00:32:44.800" video="mainVideo-gc" id="subtitle"]] +[[!template text="""but it would be really nice""" start="00:32:48.600" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and for GC count percentage defaults it's hard to say""" start="00:32:50.160" video="mainVideo-gc" id="subtitle"]] +[[!template text="""we may consider changing it but it's up to discussion""" start="00:32:56.400" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and we probably need to be conservative here""" start="00:33:00.760" video="mainVideo-gc" id="subtitle"]] +[[!template text="""so we came to the end of my talk""" start="00:33:03.120" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and this presentation""" start="00:33:06.040" video="mainVideo-gc" id="subtitle"]] +[[!template text="""all the data will be available publicly""" start="00:33:09.320" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and you can reproduce all the statistic graphs if you wish""" start="00:33:11.840" video="mainVideo-gc" id="subtitle"]] +[[!template text="""and thank you for attention""" start="00:33:17.080" video="mainVideo-gc" id="subtitle"]] + +<a name="gc-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: And then, hi everyone.""" start="00:00:01.620" video="qanda-gc" id="subtitle"]] +[[!template text="""Thank you for your nice talk,""" start="00:00:03.760" video="qanda-gc" id="subtitle"]] +[[!template text="""I can say it's the Emacs GC.""" start="00:00:05.900" video="qanda-gc" id="subtitle"]] +[[!template text="""We have some questions on the pad and maybe""" start="00:00:09.280" video="qanda-gc" id="subtitle"]] +[[!template text="""before I would like to ask you something to""" start="00:00:11.580" video="qanda-gc" id="subtitle"]] +[[!template text="""the last 1 you have said,""" start="00:00:12.780" video="qanda-gc" id="subtitle"]] +[[!template text="""concerning changing the GC strategy,""" start="00:00:15.200" video="qanda-gc" id="subtitle"]] +[[!template text="""that it's unlikely that it will be happening""" start="00:00:18.500" video="qanda-gc" id="subtitle"]] +[[!template text="""in the next time. Yeah.""" start="00:00:20.380" video="qanda-gc" id="subtitle"]] +[[!template text="""Is there any discussion going on or why does""" start="00:00:22.760" video="qanda-gc" id="subtitle"]] +[[!template text="""the case it's not changing the strategy?""" start="00:00:24.320" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: It's mostly because it's difficult.""" start="00:00:26.640" video="qanda-gc" id="subtitle"]] +[[!template text="""I think, yesterday you heard from,""" start="00:00:29.439" video="qanda-gc" id="subtitle"]] +[[!template text="""1 of the dev talks that like there was 1""" start="00:00:33.400" video="qanda-gc" id="subtitle"]] +[[!template text="""small, short comment that,""" start="00:00:34.980" video="qanda-gc" id="subtitle"]] +[[!template text="""oh yeah, it would be nice to change this""" start="00:00:36.780" video="qanda-gc" id="subtitle"]] +[[!template text="""algorithm but it's hard.""" start="00:00:39.059" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: So I""" start="00:00:40.760" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: mean it's hard not because the algorithm is""" start="00:00:43.260" video="qanda-gc" id="subtitle"]] +[[!template text="""that hard but because it's a very low level""" start="00:00:45.400" video="qanda-gc" id="subtitle"]] +[[!template text="""code and it must be like very carefully""" start="00:00:48.000" video="qanda-gc" id="subtitle"]] +[[!template text="""weighted. So that can be,""" start="00:00:49.960" video="qanda-gc" id="subtitle"]] +[[!template text="""it needs to be made sure that the carousel""" start="00:00:53.239" video="qanda-gc" id="subtitle"]] +[[!template text="""will work. It's all bugs.""" start="00:00:55.280" video="qanda-gc" id="subtitle"]] +[[!template text="""If you have bugs and you can see that,""" start="00:00:57.440" video="qanda-gc" id="subtitle"]] +[[!template text="""so it's nothing to work anymore.""" start="00:00:58.660" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: So We have a lot of RAM usage.""" start="00:01:00.720" video="qanda-gc" id="subtitle"]] +[[!template text="""Yeah. Maybe sometime.""" start="00:01:02.240" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: There was like years ago,""" start="00:01:06.180" video="qanda-gc" id="subtitle"]] +[[!template text="""there was a branch on generational DC,""" start="00:01:09.640" video="qanda-gc" id="subtitle"]] +[[!template text="""if I remember correctly,""" start="00:01:11.100" video="qanda-gc" id="subtitle"]] +[[!template text="""but they didn't go anywhere,""" start="00:01:13.380" video="qanda-gc" id="subtitle"]] +[[!template text="""unfortunately.""" start="00:01:14.760" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: That's a pity. But let's come to the""" start="00:01:18.900" video="qanda-gc" id="subtitle"]] +[[!template text="""questions on the pad. So the first 1 is,""" start="00:01:21.500" video="qanda-gc" id="subtitle"]] +[[!template text="""are the GC duration statistics correlated""" start="00:01:24.340" video="qanda-gc" id="subtitle"]] +[[!template text="""with users? I mean, does the same user""" start="00:01:27.340" video="qanda-gc" id="subtitle"]] +[[!template text="""experience GC of various durations?""" start="00:01:29.440" video="qanda-gc" id="subtitle"]] +[[!template text="""Or Do some users experience GC of a greater""" start="00:01:32.900" video="qanda-gc" id="subtitle"]] +[[!template text="""0.26 exclusively, while others never""" start="00:01:36.680" video="qanda-gc" id="subtitle"]] +[[!template text="""experience them? So is it correlated to user""" start="00:01:40.440" video="qanda-gc" id="subtitle"]] +[[!template text="""behavior? I guess you said it in your talk.""" start="00:01:43.780" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, If you talk formally,""" start="00:01:46.160" video="qanda-gc" id="subtitle"]] +[[!template text="""then almost every user has like 1 or 2""" start="00:01:49.340" video="qanda-gc" id="subtitle"]] +[[!template text="""occasions when GC takes more than 0.2""" start="00:01:51.500" video="qanda-gc" id="subtitle"]] +[[!template text="""seconds, but it's like,""" start="00:01:53.040" video="qanda-gc" id="subtitle"]] +[[!template text="""maybe something else is using CPU and that's""" start="00:01:56.720" video="qanda-gc" id="subtitle"]] +[[!template text="""why, but in practice, there are users who""" start="00:02:00.720" video="qanda-gc" id="subtitle"]] +[[!template text="""don't have problem. Half of them that that's""" start="00:02:04.200" video="qanda-gc" id="subtitle"]] +[[!template text="""who that's what I looked from statistics.""" start="00:02:05.800" video="qanda-gc" id="subtitle"]] +[[!template text="""And dry users who have like really big""" start="00:02:10.240" video="qanda-gc" id="subtitle"]] +[[!template text="""problems, like 1 second GC time.""" start="00:02:12.520" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: This is dependent on you make some comments""" start="00:02:17.280" video="qanda-gc" id="subtitle"]] +[[!template text="""on us in the talk, but could you like extract""" start="00:02:19.960" video="qanda-gc" id="subtitle"]] +[[!template text="""on if it's a package, that's a problem or we""" start="00:02:23.000" video="qanda-gc" id="subtitle"]] +[[!template text="""as a user behavior are there.""" start="00:02:24.780" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Usually it's something that is,""" start="00:02:30.720" video="qanda-gc" id="subtitle"]] +[[!template text="""okay. I'm sharing my screen now,""" start="00:02:33.760" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: It's coming on, give it like 2 to 3 seconds.""" start="00:02:37.580" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: right? Yeah. So I can just click through""" start="00:02:41.480" video="qanda-gc" id="subtitle"]] +[[!template text="""different user statistics.""" start="00:02:42.940" video="qanda-gc" id="subtitle"]] +[[!template text="""So like you can see this duration for each""" start="00:02:48.840" video="qanda-gc" id="subtitle"]] +[[!template text="""individual user basically.""" start="00:02:49.960" video="qanda-gc" id="subtitle"]] +[[!template text="""So you can see like here for example it's""" start="00:02:54.240" video="qanda-gc" id="subtitle"]] +[[!template text="""like averages around 0.25""" start="00:02:56.320" video="qanda-gc" id="subtitle"]] +[[!template text="""seconds which is noticeable and here is like""" start="00:03:00.040" video="qanda-gc" id="subtitle"]] +[[!template text="""0.1 like someone is all over the place,""" start="00:03:03.640" video="qanda-gc" id="subtitle"]] +[[!template text="""probably some. Then like,""" start="00:03:09.560" video="qanda-gc" id="subtitle"]] +[[!template text="""what else can we see here?""" start="00:03:11.520" video="qanda-gc" id="subtitle"]] +[[!template text="""Yeah, some users like have sub 0.1,""" start="00:03:15.140" video="qanda-gc" id="subtitle"]] +[[!template text="""no problem at all. And I have seen some that""" start="00:03:23.320" video="qanda-gc" id="subtitle"]] +[[!template text="""really, really bad. I mean,""" start="00:03:30.180" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: if it's noticeable, it's all bad.""" start="00:03:31.880" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: So yeah. For example, here it's like 0.8""" start="00:03:36.960" video="qanda-gc" id="subtitle"]] +[[!template text="""seconds, 0.5 seconds. I don't know how that""" start="00:03:41.680" video="qanda-gc" id="subtitle"]] +[[!template text="""guy uses ZMax. Yeah. you can see it varies.""" start="00:03:48.600" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: So It varies quite a lot.""" start="00:03:51.160" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: What it depends on, like,""" start="00:03:52.760" video="qanda-gc" id="subtitle"]] +[[!template text="""usually the number of packages,""" start="00:03:54.120" video="qanda-gc" id="subtitle"]] +[[!template text="""like all kinds of timers going on under the""" start="00:03:58.440" video="qanda-gc" id="subtitle"]] +[[!template text="""hood. I think I tried to list...""" start="00:04:01.720" video="qanda-gc" id="subtitle"]] +[[!template text="""I'll go through this. I briefly outlined some""" start="00:04:12.520" video="qanda-gc" id="subtitle"]] +[[!template text="""important parts. Here,""" start="00:04:15.440" video="qanda-gc" id="subtitle"]] +[[!template text="""when you have something like an org agenda,""" start="00:04:18.480" video="qanda-gc" id="subtitle"]] +[[!template text="""it will most likely trigger a lot of GCs.""" start="00:04:20.680" video="qanda-gc" id="subtitle"]] +[[!template text="""When you have a lot of timers,""" start="00:04:23.900" video="qanda-gc" id="subtitle"]] +[[!template text="""when you have something calculated on""" start="00:04:27.800" video="qanda-gc" id="subtitle"]] +[[!template text="""modline, it will be frequently triggered.""" start="00:04:29.700" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Well,""" start="00:04:30.900" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: yeah. When you have so many packages and""" start="00:04:34.080" video="qanda-gc" id="subtitle"]] +[[!template text="""these packages are using a lot of memory.""" start="00:04:35.760" video="qanda-gc" id="subtitle"]] +[[!template text="""Like I remember I was surprised by this,""" start="00:04:41.120" video="qanda-gc" id="subtitle"]] +[[!template text="""package, home org that was,""" start="00:04:44.640" video="qanda-gc" id="subtitle"]] +[[!template text="""caching all the results.""" start="00:04:46.560" video="qanda-gc" id="subtitle"]] +[[!template text="""And for large org files,""" start="00:04:48.960" video="qanda-gc" id="subtitle"]] +[[!template text="""it was like several hundred megabytes of""" start="00:04:51.540" video="qanda-gc" id="subtitle"]] +[[!template text="""data. Well, it just becomes slower.""" start="00:04:55.160" video="qanda-gc" id="subtitle"]] +[[!template text="""Yeah.""" start="00:04:55.900" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah. Maybe, maybe a short side note.""" start="00:05:00.020" video="qanda-gc" id="subtitle"]] +[[!template text="""Someone asks, what software you're using for""" start="00:05:02.600" video="qanda-gc" id="subtitle"]] +[[!template text="""flipping through the PNGs.""" start="00:05:03.480" video="qanda-gc" id="subtitle"]] +[[!template text="""Maybe you could shortly throws it in.""" start="00:05:06.660" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: What do you mean? Here,""" start="00:05:08.800" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: I guess it was just simply,""" start="00:05:11.000" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: this, It's it's far. Yeah.""" start="00:05:13.480" video="qanda-gc" id="subtitle"]] +[[!template text="""So""" start="00:05:16.660" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: yeah. So, question 1 and 2 answered.""" start="00:05:23.900" video="qanda-gc" id="subtitle"]] +[[!template text="""To 1 statement you have made,""" start="00:05:35.740" video="qanda-gc" id="subtitle"]] +[[!template text="""there was a question concerning the timings.""" start="00:05:37.500" video="qanda-gc" id="subtitle"]] +[[!template text="""So you said, okay, everything above 0.1""" start="00:05:41.180" video="qanda-gc" id="subtitle"]] +[[!template text="""second is fine. Maybe There's a short story""" start="00:05:45.800" video="qanda-gc" id="subtitle"]] +[[!template text="""of someone who asked a question.""" start="00:05:48.480" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: I see the question is about scrolling,""" start="00:05:50.380" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, exactly.""" start="00:05:51.820" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: right? Again, there's not much you can do in""" start="00:05:55.580" video="qanda-gc" id="subtitle"]] +[[!template text="""terms of trying to adjust the GC time.""" start="00:05:58.620" video="qanda-gc" id="subtitle"]] +[[!template text="""I mean, if you make GCs less frequent,""" start="00:06:02.320" video="qanda-gc" id="subtitle"]] +[[!template text="""you increase the individual GC time.""" start="00:06:07.540" video="qanda-gc" id="subtitle"]] +[[!template text="""If you make them more frequent,""" start="00:06:08.860" video="qanda-gc" id="subtitle"]] +[[!template text="""you decrease the individual GC time,""" start="00:06:11.280" video="qanda-gc" id="subtitle"]] +[[!template text="""but then they are more frequent.""" start="00:06:12.400" video="qanda-gc" id="subtitle"]] +[[!template text="""So what is the point? I think the way to go""" start="00:06:15.920" video="qanda-gc" id="subtitle"]] +[[!template text="""here is you can rise to see the short for the""" start="00:06:19.940" video="qanda-gc" id="subtitle"]] +[[!template text="""duration of scrolling,""" start="00:06:20.740" video="qanda-gc" id="subtitle"]] +[[!template text="""like just for a comment.""" start="00:06:22.500" video="qanda-gc" id="subtitle"]] +[[!template text="""I think it's a recommendation from Emacs""" start="00:06:26.320" video="qanda-gc" id="subtitle"]] +[[!template text="""devs. So like You do something along the""" start="00:06:31.480" video="qanda-gc" id="subtitle"]] +[[!template text="""lines.""" start="00:06:31.660" video="qanda-gc" id="subtitle"]] +[[!template text="""Yeah, I'm surely doing something on my screen""" start="00:06:53.480" video="qanda-gc" id="subtitle"]] +[[!template text="""and I forgot that I'm not sharing anything.""" start="00:06:55.680" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Exactly.""" start="00:06:56.680" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Simply something like this.""" start="00:07:00.700" video="qanda-gc" id="subtitle"]] +[[!template text="""So, basically, if you have some command that""" start="00:07:08.140" video="qanda-gc" id="subtitle"]] +[[!template text="""is very important that it should run very""" start="00:07:10.920" video="qanda-gc" id="subtitle"]] +[[!template text="""quickly. You temporary increase that""" start="00:07:13.860" video="qanda-gc" id="subtitle"]] +[[!template text="""threshold, you run that comment,""" start="00:07:15.740" video="qanda-gc" id="subtitle"]] +[[!template text="""then that's all. That's probably the best.""" start="00:07:19.940" video="qanda-gc" id="subtitle"]] +[[!template text="""So basically, the best you can do is to delay""" start="00:07:21.660" video="qanda-gc" id="subtitle"]] +[[!template text="""it after the command.""" start="00:07:23.760" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: So afterwards, it takes a lot of time to do""" start="00:07:27.500" video="qanda-gc" id="subtitle"]] +[[!template text="""its stuff. OK. The third 1 has been already""" start="00:07:36.140" video="qanda-gc" id="subtitle"]] +[[!template text="""answered, but I just want to get your""" start="00:07:40.520" video="qanda-gc" id="subtitle"]] +[[!template text="""information from it. Opinions on the GCMH""" start="00:07:42.780" video="qanda-gc" id="subtitle"]] +[[!template text="""mode.""" start="00:07:43.940" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay. Yeah, I see that problem,""" start="00:07:48.280" video="qanda-gc" id="subtitle"]] +[[!template text="""but that's more like a technical problem.""" start="00:07:49.920" video="qanda-gc" id="subtitle"]] +[[!template text="""But there's another problem there.""" start="00:07:52.360" video="qanda-gc" id="subtitle"]] +[[!template text="""Yeah, I prepared a small snippet here.""" start="00:07:57.340" video="qanda-gc" id="subtitle"]] +[[!template text="""So if you look at the GCMH mode,""" start="00:08:02.160" video="qanda-gc" id="subtitle"]] +[[!template text="""it has this concept of low threshold and high""" start="00:08:05.800" video="qanda-gc" id="subtitle"]] +[[!template text="""threshold and most of the time it's running""" start="00:08:08.200" video="qanda-gc" id="subtitle"]] +[[!template text="""high threshold and then when Emacs is idle,""" start="00:08:14.120" video="qanda-gc" id="subtitle"]] +[[!template text="""it falls back to lower threshold and then it""" start="00:08:17.320" video="qanda-gc" id="subtitle"]] +[[!template text="""does the GC while Emacs is not used.""" start="00:08:19.400" video="qanda-gc" id="subtitle"]] +[[!template text="""That's a good idea, of course.""" start="00:08:22.040" video="qanda-gc" id="subtitle"]] +[[!template text="""That's the core idea of GCMH mode.""" start="00:08:24.380" video="qanda-gc" id="subtitle"]] +[[!template text="""Unfortunately, the most annoying GC is when""" start="00:08:30.520" video="qanda-gc" id="subtitle"]] +[[!template text="""you're actively using max.""" start="00:08:31.760" video="qanda-gc" id="subtitle"]] +[[!template text="""And then you have this huge value of GC""" start="00:08:37.120" video="qanda-gc" id="subtitle"]] +[[!template text="""counter show and look at the doc stream.""" start="00:08:38.799" video="qanda-gc" id="subtitle"]] +[[!template text="""This would be sector value that makes GC""" start="00:08:41.760" video="qanda-gc" id="subtitle"]] +[[!template text="""unlikely but does not cost OSP Asian.""" start="00:08:43.980" video="qanda-gc" id="subtitle"]] +[[!template text="""So yeah, no wonder like if you don't do GC,""" start="00:08:46.480" video="qanda-gc" id="subtitle"]] +[[!template text="""your arm usage will skyrocket.""" start="00:08:49.640" video="qanda-gc" id="subtitle"]] +[[!template text="""So they don't, they cannot put it too much,""" start="00:08:54.360" video="qanda-gc" id="subtitle"]] +[[!template text="""but this is like already like,""" start="00:08:57.720" video="qanda-gc" id="subtitle"]] +[[!template text="""how much was it?""" start="00:08:59.220" video="qanda-gc" id="subtitle"]] +[[!template text="""1 gigabyte, that's the default.""" start="00:09:10.800" video="qanda-gc" id="subtitle"]] +[[!template text="""And the problem is when you have 1 gigabyte""" start="00:09:15.220" video="qanda-gc" id="subtitle"]] +[[!template text="""to garbage collect, it causes really long GC""" start="00:09:18.680" video="qanda-gc" id="subtitle"]] +[[!template text="""time. So in GC image mode,""" start="00:09:22.040" video="qanda-gc" id="subtitle"]] +[[!template text="""when you're actually using Emacs,""" start="00:09:23.560" video="qanda-gc" id="subtitle"]] +[[!template text="""really heavily, the GCs become terrible,""" start="00:09:28.860" video="qanda-gc" id="subtitle"]] +[[!template text="""terribly slow. So it may help in case you""" start="00:09:34.640" video="qanda-gc" id="subtitle"]] +[[!template text="""don't have too much problems with GC,""" start="00:09:37.200" video="qanda-gc" id="subtitle"]] +[[!template text="""but I will say that in such situation,""" start="00:09:39.280" video="qanda-gc" id="subtitle"]] +[[!template text="""you can simply increase GC cost percentage,""" start="00:09:41.920" video="qanda-gc" id="subtitle"]] +[[!template text="""as I recommend, and it should do it.""" start="00:09:44.540" video="qanda-gc" id="subtitle"]] +[[!template text="""But in case of really big problems with""" start="00:09:48.480" video="qanda-gc" id="subtitle"]] +[[!template text="""garbage collection, no,""" start="00:09:50.080" video="qanda-gc" id="subtitle"]] +[[!template text="""I don't think that will help much.""" start="00:09:51.740" video="qanda-gc" id="subtitle"]] +[[!template text="""I used it myself and it didn't help much for""" start="00:09:54.800" video="qanda-gc" id="subtitle"]] +[[!template text="""my stuff.""" start="00:09:55.200" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: All right. The next question is concerning""" start="00:09:59.680" video="qanda-gc" id="subtitle"]] +[[!template text="""freeing up memory. Is there some way to free""" start="00:10:04.600" video="qanda-gc" id="subtitle"]] +[[!template text="""up memory such as via unload feature on""" start="00:10:07.200" video="qanda-gc" id="subtitle"]] +[[!template text="""Emacs? Often I only need a package loaded for""" start="00:10:09.960" video="qanda-gc" id="subtitle"]] +[[!template text="""a single task or short period by the""" start="00:10:12.240" video="qanda-gc" id="subtitle"]] +[[!template text="""persistent memory afterwards.""" start="00:10:13.320" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: So the packages are usually not that much of""" start="00:10:19.780" video="qanda-gc" id="subtitle"]] +[[!template text="""a problem. I mean, the libraries,""" start="00:10:22.060" video="qanda-gc" id="subtitle"]] +[[!template text="""the problem is some extra,""" start="00:10:25.280" video="qanda-gc" id="subtitle"]] +[[!template text="""like some variable contents or some""" start="00:10:30.060" video="qanda-gc" id="subtitle"]] +[[!template text="""histories, some caches.""" start="00:10:31.800" video="qanda-gc" id="subtitle"]] +[[!template text="""That's what's eating most of the memory.""" start="00:10:35.280" video="qanda-gc" id="subtitle"]] +[[!template text="""There is a package called memory usage and""" start="00:10:40.240" video="qanda-gc" id="subtitle"]] +[[!template text="""built in MX memory report.""" start="00:10:45.440" video="qanda-gc" id="subtitle"]] +[[!template text="""They allow to see which variables take a lot""" start="00:10:50.900" video="qanda-gc" id="subtitle"]] +[[!template text="""of memory. And that way you can try to see""" start="00:10:56.000" video="qanda-gc" id="subtitle"]] +[[!template text="""which packages are actually problematic.""" start="00:10:58.520" video="qanda-gc" id="subtitle"]] +[[!template text="""So for example, I recall,""" start="00:11:03.340" video="qanda-gc" id="subtitle"]] +[[!template text="""and that was not exactly,""" start="00:11:05.640" video="qanda-gc" id="subtitle"]] +[[!template text="""I remember there was a package that was""" start="00:11:09.720" video="qanda-gc" id="subtitle"]] +[[!template text="""literally in command line,""" start="00:11:11.040" video="qanda-gc" id="subtitle"]] +[[!template text="""like prompt history. I think it was in""" start="00:11:14.020" video="qanda-gc" id="subtitle"]] +[[!template text="""command. And when you do like,""" start="00:11:17.540" video="qanda-gc" id="subtitle"]] +[[!template text="""when you save every message in your chart""" start="00:11:20.440" video="qanda-gc" id="subtitle"]] +[[!template text="""into prompt history, that can grow very fast""" start="00:11:25.280" video="qanda-gc" id="subtitle"]] +[[!template text="""and can go to several hundred megabytes just""" start="00:11:29.220" video="qanda-gc" id="subtitle"]] +[[!template text="""in that history. And that can cause major""" start="00:11:31.720" video="qanda-gc" id="subtitle"]] +[[!template text="""problems. So, yes, profiling the largest""" start="00:11:37.960" video="qanda-gc" id="subtitle"]] +[[!template text="""variables with the largest buffers that might""" start="00:11:41.200" video="qanda-gc" id="subtitle"]] +[[!template text="""give some clues. Again,""" start="00:11:42.660" video="qanda-gc" id="subtitle"]] +[[!template text="""there is no silver bullet.""" start="00:11:43.740" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. I think the last question on the""" start="00:11:49.080" video="qanda-gc" id="subtitle"]] +[[!template text="""patterns. At first, very nice presentation.""" start="00:11:51.000" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: I can""" start="00:11:51.620" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: also only agree with that.""" start="00:11:53.980" video="qanda-gc" id="subtitle"]] +[[!template text="""I just experienced with a threshold and""" start="00:11:56.480" video="qanda-gc" id="subtitle"]] +[[!template text="""lowered my GCE lapse from 1.1""" start="00:11:58.200" video="qanda-gc" id="subtitle"]] +[[!template text="""to 0.06 seconds during startup.""" start="00:12:01.440" video="qanda-gc" id="subtitle"]] +[[!template text="""Interestingly, going to 10 megabytes""" start="00:12:03.600" video="qanda-gc" id="subtitle"]] +[[!template text="""increased the time. 4 megabytes was a sweet""" start="00:12:06.100" video="qanda-gc" id="subtitle"]] +[[!template text="""spot for my system. What is the recommended""" start="00:12:07.800" video="qanda-gc" id="subtitle"]] +[[!template text="""way to lower the value back to the default""" start="00:12:10.840" video="qanda-gc" id="subtitle"]] +[[!template text="""value after startup is completed?""" start="00:12:12.340" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: I think you just use after init hook.""" start="00:12:16.160" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: This was a relatively fast answer.""" start="00:12:23.940" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: So basically for example Doom does this,""" start="00:12:29.180" video="qanda-gc" id="subtitle"]] +[[!template text="""it temporary writes a gcconcert hold during""" start="00:12:31.940" video="qanda-gc" id="subtitle"]] +[[!template text="""startup and yeah after init hook the code is""" start="00:12:37.260" video="qanda-gc" id="subtitle"]] +[[!template text="""like it's 1 of the commonly suggested""" start="00:12:39.880" video="qanda-gc" id="subtitle"]] +[[!template text="""approaches and is I believe it's the right 1.""" start="00:12:43.940" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. To have joined us 1 was a microphone.""" start="00:12:49.180" video="qanda-gc" id="subtitle"]] +[[!template text="""So Peter, do you have any questions that you""" start="00:12:52.200" video="qanda-gc" id="subtitle"]] +[[!template text="""want to question? And maybe as a side note,""" start="00:12:55.240" video="qanda-gc" id="subtitle"]] +[[!template text="""we only have 4 minutes left and afterwards""" start="00:12:57.380" video="qanda-gc" id="subtitle"]] +[[!template text="""this happy weekend will still be open,""" start="00:12:59.240" video="qanda-gc" id="subtitle"]] +[[!template text="""but we will switch back to the talks.""" start="00:13:01.400" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, no more questions on garbage""" start="00:13:05.380" video="qanda-gc" id="subtitle"]] +[[!template text="""collection, but I just wanted to thank Ihor""" start="00:13:07.640" video="qanda-gc" id="subtitle"]] +[[!template text="""for his engagement in the community.""" start="00:13:10.440" video="qanda-gc" id="subtitle"]] +[[!template text="""And especially with, I'm a co-maintainer on""" start="00:13:15.300" video="qanda-gc" id="subtitle"]] +[[!template text="""orgnotor and he's helped us a lot with""" start="00:13:17.600" video="qanda-gc" id="subtitle"]] +[[!template text="""getting us up to date with newer versions of""" start="00:13:21.680" video="qanda-gc" id="subtitle"]] +[[!template text="""org and stuff like that.""" start="00:13:22.680" video="qanda-gc" id="subtitle"]] +[[!template text="""So just wanted to thank you in person.""" start="00:13:24.680" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Right.""" start="00:13:25.140" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Maybe 1 question for me,""" start="00:13:33.540" video="qanda-gc" id="subtitle"]] +[[!template text="""you had some bit talked about memory""" start="00:13:35.460" video="qanda-gc" id="subtitle"]] +[[!template text="""fragmentation. So is there any way to or is""" start="00:13:40.640" video="qanda-gc" id="subtitle"]] +[[!template text="""it fixed by Emacs itself?""" start="00:13:42.080" video="qanda-gc" id="subtitle"]] +[[!template text="""So you have like""" start="00:13:43.740" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: a chunk of memory fragmentation is basically""" start="00:13:46.520" video="qanda-gc" id="subtitle"]] +[[!template text="""your OS. Yeah, Emacs releases the memory and""" start="00:13:51.420" video="qanda-gc" id="subtitle"]] +[[!template text="""then OS can rearrange it depending on the""" start="00:13:55.020" video="qanda-gc" id="subtitle"]] +[[!template text="""implementation of its memory manager.""" start="00:13:58.320" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, so the GC just releases it really and""" start="00:14:01.520" video="qanda-gc" id="subtitle"]] +[[!template text="""not so it could be that a mix is like""" start="00:14:04.400" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: doing it. You have like memory pages,""" start="00:14:07.420" video="qanda-gc" id="subtitle"]] +[[!template text="""right? Yeah. And you see,""" start="00:14:09.560" video="qanda-gc" id="subtitle"]] +[[!template text="""can release a part of this page just like""" start="00:14:12.140" video="qanda-gc" id="subtitle"]] +[[!template text="""here and there. And depending on the exact""" start="00:14:14.760" video="qanda-gc" id="subtitle"]] +[[!template text="""situation is your arm at each moment of time,""" start="00:14:17.720" video="qanda-gc" id="subtitle"]] +[[!template text="""or as may or may not be able to arrange""" start="00:14:20.240" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: so""" start="00:14:25.160" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: things. So, how the exact the data you cannot""" start="00:14:27.620" video="qanda-gc" id="subtitle"]] +[[!template text="""really predict it. It really varies like you""" start="00:14:30.160" video="qanda-gc" id="subtitle"]] +[[!template text="""use Windows, you use Linux,""" start="00:14:31.120" video="qanda-gc" id="subtitle"]] +[[!template text="""you use like malloc, something else,""" start="00:14:33.240" video="qanda-gc" id="subtitle"]] +[[!template text="""but it has nothing to do with Emacs.""" start="00:14:36.260" video="qanda-gc" id="subtitle"]] +[[!template text="""It's just something you have to deal with.""" start="00:14:38.040" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, but my question was in the way that we""" start="00:14:41.780" video="qanda-gc" id="subtitle"]] +[[!template text="""are giving the memory back to the operating""" start="00:14:43.460" video="qanda-gc" id="subtitle"]] +[[!template text="""system, not just holding it as used and then""" start="00:14:46.020" video="qanda-gc" id="subtitle"]] +[[!template text="""to our own memory, like stuff as Emacs that""" start="00:14:49.960" video="qanda-gc" id="subtitle"]] +[[!template text="""we do not need to interact with the operating""" start="00:14:51.680" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Emacs does not really hold anything.""" start="00:14:56.040" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: system. That was the question.""" start="00:14:59.160" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay. I was really hoping it does,""" start="00:15:01.920" video="qanda-gc" id="subtitle"]] +[[!template text="""but yeah, unfortunately,""" start="00:15:02.760" video="qanda-gc" id="subtitle"]] +[[!template text="""because nothing much can be done on Emacs.""" start="00:15:05.640" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. it's not Probably a lot faster if it's""" start="00:15:08.800" video="qanda-gc" id="subtitle"]] +[[!template text="""just holding it and when it needs more,""" start="00:15:10.580" video="qanda-gc" id="subtitle"]] +[[!template text="""then just get more from the OS.""" start="00:15:12.380" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: There are certain caveats,""" start="00:15:14.220" video="qanda-gc" id="subtitle"]] +[[!template text="""for example, there's something called image""" start="00:15:16.720" video="qanda-gc" id="subtitle"]] +[[!template text="""cache. And because Emacs stores images in""" start="00:15:20.560" video="qanda-gc" id="subtitle"]] +[[!template text="""uncompressed format, it can occupy quite a""" start="00:15:23.720" video="qanda-gc" id="subtitle"]] +[[!template text="""lot of memory. In particular,""" start="00:15:25.020" video="qanda-gc" id="subtitle"]] +[[!template text="""when you will like view PDFs,""" start="00:15:26.520" video="qanda-gc" id="subtitle"]] +[[!template text="""like you open 10, like 20 PDFs in 1 session,""" start="00:15:30.140" video="qanda-gc" id="subtitle"]] +[[!template text="""you may have like some image cache blowing""" start="00:15:33.460" video="qanda-gc" id="subtitle"]] +[[!template text="""up, But that's not common for people.""" start="00:15:36.720" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: So, guess we are on our time exactly.""" start="00:15:41.420" video="qanda-gc" id="subtitle"]] +[[!template text="""So in the next""" start="00:15:43.580" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: I think I was not exactly accurate.""" start="00:15:46.680" video="qanda-gc" id="subtitle"]] +[[!template text="""This 1 command, which is,""" start="00:15:49.200" video="qanda-gc" id="subtitle"]] +[[!template text="""I think, Nemax 30, is called a malloc trim.""" start="00:15:53.500" video="qanda-gc" id="subtitle"]] +[[!template text="""A max malloc trim. It's interactive.""" start="00:15:57.520" video="qanda-gc" id="subtitle"]] +[[!template text="""So that can help to release some memory.""" start="00:16:04.080" video="qanda-gc" id="subtitle"]] +[[!template text="""I think the way it works is like forces OS to""" start="00:16:08.200" video="qanda-gc" id="subtitle"]] +[[!template text="""make use of the released memory.""" start="00:16:12.040" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. That would be like,""" start="00:16:14.960" video="qanda-gc" id="subtitle"]] +[[!template text="""we are by the way, switch back to the next""" start="00:16:18.420" video="qanda-gc" id="subtitle"]] +[[!template text="""talk. But""" start="00:16:21.420" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: so basically what happens here is that OS may""" start="00:16:24.220" video="qanda-gc" id="subtitle"]] +[[!template text="""not release like, even Emacs says,""" start="00:16:27.440" video="qanda-gc" id="subtitle"]] +[[!template text="""okay, this memory is free,""" start="00:16:28.740" video="qanda-gc" id="subtitle"]] +[[!template text="""depending on the implementation,""" start="00:16:30.060" video="qanda-gc" id="subtitle"]] +[[!template text="""I might think, okay, but I still hold that""" start="00:16:32.760" video="qanda-gc" id="subtitle"]] +[[!template text="""memory associated with Emacs just in case""" start="00:16:34.860" video="qanda-gc" id="subtitle"]] +[[!template text="""Emacs needs more memories,""" start="00:16:35.800" video="qanda-gc" id="subtitle"]] +[[!template text="""and I can immediately put the data there""" start="00:16:38.940" video="qanda-gc" id="subtitle"]] +[[!template text="""without like more arrangement to allocate""" start="00:16:41.420" video="qanda-gc" id="subtitle"]] +[[!template text="""more. And this analog stream basically forces""" start="00:16:45.480" video="qanda-gc" id="subtitle"]] +[[!template text="""the OS to release it, like no matter what.""" start="00:16:48.740" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Because most people, when they are using""" start="00:16:52.360" video="qanda-gc" id="subtitle"]] +[[!template text="""Emacs, I have the feeling they are only using""" start="00:16:54.320" video="qanda-gc" id="subtitle"]] +[[!template text="""Emacs. So it would be kind of interesting if""" start="00:16:56.160" video="qanda-gc" id="subtitle"]] +[[!template text="""you just take like, I don't know,""" start="00:16:57.880" video="qanda-gc" id="subtitle"]] +[[!template text="""2 gigabytes or something of memory and Emacs""" start="00:17:00.060" video="qanda-gc" id="subtitle"]] +[[!template text="""like does what it wants on that and the OS""" start="00:17:02.900" video="qanda-gc" id="subtitle"]] +[[!template text="""cannot really take it back.""" start="00:17:04.079" video="qanda-gc" id="subtitle"]] +[[!template text="""This was my idea when I""" start="00:17:05.920" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: was So when you see 2 gigabytes in OS,""" start="00:17:08.000" video="qanda-gc" id="subtitle"]] +[[!template text="""it doesn't mean that OS cannot take it back.""" start="00:17:10.359" video="qanda-gc" id="subtitle"]] +[[!template text="""It may still like allocate certain portion,""" start="00:17:13.859" video="qanda-gc" id="subtitle"]] +[[!template text="""even technically free,""" start="00:17:15.640" video="qanda-gc" id="subtitle"]] +[[!template text="""but just for future. So this is where Malloc""" start="00:17:20.940" video="qanda-gc" id="subtitle"]] +[[!template text="""Dream works. It's like,""" start="00:17:22.339" video="qanda-gc" id="subtitle"]] +[[!template text="""it says, yes, OS, I really not going to hold""" start="00:17:25.319" video="qanda-gc" id="subtitle"]] +[[!template text="""this for this free memory.""" start="00:17:26.500" video="qanda-gc" id="subtitle"]] +[[!template text="""For sure. If you try this MX Malloc Gene,""" start="00:17:31.700" video="qanda-gc" id="subtitle"]] +[[!template text="""you will see like a few times to hundreds of""" start="00:17:33.960" video="qanda-gc" id="subtitle"]] +[[!template text="""megabytes of read immediately.""" start="00:17:35.200" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: Have a look when I have the time.""" start="00:17:38.560" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: I""" start="00:17:41.480" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 0]: guess if nobody has any questions,""" start="00:17:43.260" video="qanda-gc" id="subtitle"]] +[[!template text="""I guess on the pad, there was Nothing else.""" start="00:17:45.660" video="qanda-gc" id="subtitle"]] +[[!template text="""I guess we can just close it.""" start="00:17:47.900" video="qanda-gc" id="subtitle"]] +[[!template text="""Thanks for the discussion.""" start="00:17:49.140" video="qanda-gc" id="subtitle"]] +[[!template text="""Thanks for answering the questions.""" start="00:17:50.640" video="qanda-gc" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you for the great conference.""" start="00:17:56.020" video="qanda-gc" id="subtitle"]] +[[!template text="""And yeah, for your volunteer work.""" start="00:17:59.340" video="qanda-gc" id="subtitle"]] +[[!template text="""And yeah, for quietly panicking in the""" start="00:18:02.230" video="qanda-gc" id="subtitle"]] +[[!template text="""background, right? Yeah,""" start="00:18:02.262" video="qanda-gc" id="subtitle"]] +[[!template text="""I mean... You have to be quiet,""" start="00:18:02.337" video="qanda-gc" id="subtitle"]] +[[!template text="""you're panicking in the background.""" start="00:18:02.560" video="qanda-gc" id="subtitle"]] + +Questions or comments? Please e-mail [yantar92@posteo.net](mailto:yantar92@posteo.net?subject=Comment%20for%20EmacsConf%202023%20gc%3A%20emacs-gc-stats%3A%20Does%20garbage%20collection%20actually%20slow%20down%20Emacs%3F) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/gc-before.md b/2023/info/gc-before.md new file mode 100644 index 00000000..035db20a --- /dev/null +++ b/2023/info/gc-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 34-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="gc-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 33:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ngenUPBLDDkZGmsxK8vimJ">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/gc-nav.md b/2023/info/gc-nav.md new file mode 100644 index 00000000..0bef707f --- /dev/null +++ b/2023/info/gc-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a> +Next by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/hn-after.md b/2023/info/hn-after.md new file mode 100644 index 00000000..fe58de2b --- /dev/null +++ b/2023/info/hn-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [mickael@kerjean.me](mailto:mickael@kerjean.me?subject=Comment%20for%20EmacsConf%202022%20hn%3A%20The%20many%20ways%20to%20browse%20Hacker%20News%20from%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/hn-before.md b/2023/info/hn-before.md new file mode 100644 index 00000000..2700a0ea --- /dev/null +++ b/2023/info/hn-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sun 2023-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="hn"> +<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(122,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:55- 2:25 Programming at 200 wpm</title> <rect x="462" y="15" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect stroke-width="3" x="564" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(577,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:25- 4:05 Emacs saves the Web</title> <rect x="603" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(663,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 4:20- 4:40 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="690" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(719,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:55- 5:05 Sunday closing remarks</title> <rect x="745" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(758,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 11:10-11:30 GNU Emacs: A World of Possibilities</title> <rect x="203" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(232,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:45-11:55 A modern Emacs look-and-feel without pain</title> <rect x="258" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(271,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:20 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:35- 2:15 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="431" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(491,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:30- 2:40 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="517" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 2:55- 3:35 Windows into Freedom</title> <rect x="556" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(616,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:50- 4:10 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="643" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(672,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 10-min talk followed by live web conference Q&A +Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf) +Status: Waiting for video from speaker +<div>Times in different timezones:</div><div class="times" start="2023-12-03T20:00:00Z" end="2023-12-03T20:00:00Z"><div class="conf-time">Sunday, Dec 3 2023, ~3:00 PM - 3:00 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 3 2023, ~2:00 PM - 2:00 PM CST (US/Central)<br />Sunday, Dec 3 2023, ~1:00 PM - 1:00 PM MST (US/Mountain)<br />Sunday, Dec 3 2023, ~12:00 PM - 12:00 PM PST (US/Pacific)<br />Sunday, Dec 3 2023, ~8:00 PM - 8:00 PM UTC <br />Sunday, Dec 3 2023, ~9:00 PM - 9:00 PM CET (Europe/Paris)<br />Sunday, Dec 3 2023, ~10:00 PM - 10:00 PM EET (Europe/Athens)<br />Monday, Dec 4 2023, ~1:30 AM - 1:30 AM IST (Asia/Kolkata)<br />Monday, Dec 4 2023, ~4:00 AM - 4:00 AM +08 (Asia/Singapore)<br />Monday, Dec 4 2023, ~5:00 AM - 5:00 AM JST (Asia/Tokyo)</div></div><div><a href="/2023/watch/gen/">Find out how to watch and participate</a></div> + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/hn-nav.md b/2023/info/hn-nav.md new file mode 100644 index 00000000..72fa004e --- /dev/null +++ b/2023/info/hn-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2023/talks/windows">Windows into Freedom</a> +Next by time: <a href="/2023/talks/web">Emacs saves the Web</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/hyperamp-after.md b/2023/info/hyperamp-after.md new file mode 100644 index 00000000..051a5dad --- /dev/null +++ b/2023/info/hyperamp-after.md @@ -0,0 +1,1351 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="hyperamp-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""[Speaker 0]: 5 seconds. Oh, actually,""" start="00:00:01.719" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Sorry, I keep delaying.""" start="00:00:07.279" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I keep forgetting that we have an""" start="00:00:08.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""introduction now. The introduction is flying.""" start="00:00:09.559" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: a little more. You're going to give a""" start="00:00:02.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, it's about 5 seconds now.""" start="00:00:22.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: 30-second, right? Just say go when you want""" start="00:00:19.675" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure. You'll hear me anyway.""" start="00:00:29.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: me to go. Okay.""" start="00:00:27.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, I think we are live now.""" start="00:00:33.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So hi again, everyone.""" start="00:00:35.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I promised you we would be back in about 30""" start="00:00:36.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""seconds. I lied, it was actually 1 minute,""" start="00:00:37.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but we are here with Bob.""" start="00:00:40.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hi, Bob, how are you doing?""" start="00:00:41.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Hi, doing great. Glad to""" start="00:00:43.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: be with you. Yeah, glad to be here,""" start="00:00:46.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and so are we. We're glad to have you again""" start="00:00:50.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this year. So what we're going to do,""" start="00:00:52.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we're not going to waste any time right now""" start="00:00:54.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with chit-chats. What we're going to do,""" start="00:00:56.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we're going to move straight into your""" start="00:00:57.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""presentation, Bob, so that you have as much""" start="00:00:59.059" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""time as you can. I'm going to recede into the""" start="00:01:01.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""background. I am going to full screen your""" start="00:01:04.239" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""presentation on a stream.""" start="00:01:07.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And Bob, the floor is all yours.""" start="00:01:09.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you very much, Leo.""" start="00:01:12.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Glad to be here. I hope everybody has an idea""" start="00:01:15.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of what Hyperbole is, but it's a broad""" start="00:01:18.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""information management system inside Emacs""" start="00:01:22.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that works in all major modes.""" start="00:01:26.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's a global minor mode that you can turn on""" start="00:01:28.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and off very rapidly so that you can just get""" start="00:01:31.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in and out of hyperbole.""" start="00:01:34.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And it works mostly from a mini buffer menu""" start="00:01:36.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that if we just hit ctrl H H we see at the""" start="00:01:41.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bottom of the screen here and as you see in""" start="00:01:44.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""some of this text right here,""" start="00:01:47.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Dee will show you a demo with all these video""" start="00:01:51.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""links of Hyperbole now.""" start="00:01:55.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But let's just get into the top 10 reasons to""" start="00:01:57.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""use Hyperbole. Number 10 is a key series""" start="00:02:01.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""curly braces. So you just put curly braces""" start="00:02:10.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""around any set of key sequences that you want""" start="00:02:12.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and hyperbole magically turns that into what""" start="00:02:19.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we call an implicit button a hyper button and""" start="00:02:22.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""any kind of text that you have so if we go""" start="00:02:25.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""down here and we just click click here we see""" start="00:02:28.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it that was a complex button that said let's""" start="00:02:35.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""start a shell, let's set an environment""" start="00:02:40.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""variable as you see the command right up""" start="00:02:43.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""there, and then let's do a grep over the""" start="00:02:45.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole code and find all instances of a""" start="00:02:47.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""particular label. So if we hit made a return,""" start="00:02:50.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that's called the action key.""" start="00:02:55.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""That's what you use throughout hyperbole when""" start="00:02:57.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you just want to activate any kind of button.""" start="00:02:59.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So you see it jumped to the grep output and""" start="00:03:02.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this is in a shell buffer it's not in a""" start="00:03:06.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""compilation buffer so anywhere that you have""" start="00:03:08.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this sort of thing it's also an implicit""" start="00:03:11.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button and any sort of grep output or""" start="00:03:13.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""compiler output you can just jump to with the""" start="00:03:17.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""same key, made a return.""" start="00:03:22.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's key series, the first part.""" start="00:03:23.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And then just to note that you can also just""" start="00:03:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""do a, well I'll just do it here and show you""" start="00:03:33.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that you can do a recursive grep with this""" start="00:03:39.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole command, HYPBR grep.""" start="00:03:43.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And if you're in an Emacs list buffer,""" start="00:03:46.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it will only grep across the Emacs list.""" start="00:03:50.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So a very handy way to just go through your""" start="00:03:54.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""code very rapidly and then jump to various""" start="00:03:58.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""points in it. So we have a lot to cover""" start="00:04:01.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""today, so I'm going to go through this""" start="00:04:04.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""rapidly. This isn't a tutorial,""" start="00:04:05.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's just to get you interested in some of""" start="00:04:07.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the features, and then there's a ton of""" start="00:04:10.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""reference material and videos now available""" start="00:04:13.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for Hyperlink. So let's go to number 9.""" start="00:04:15.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Path names become implicit buttons.""" start="00:04:20.019" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You don't even have to quote them.""" start="00:04:22.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can add environment variables or elist""" start="00:04:24.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""variables with the syntax right here.""" start="00:04:26.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So here we have a shell script that's""" start="00:04:29.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""somewhere on our path.""" start="00:04:32.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And notice path is an environment variable""" start="00:04:33.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with many different paths within it,""" start="00:04:36.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""right? But Hyperbole knows that and it""" start="00:04:39.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""searches the path, gets the first match,""" start="00:04:42.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""finds it, and finds the actual shell script.""" start="00:04:45.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So you can just embed that anywhere.""" start="00:04:48.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Here we have a list variable,""" start="00:04:50.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbdur, which is the home directory for""" start="00:04:52.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole, and then a markdown file,""" start="00:04:54.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and a link to a direct section in the file,""" start="00:04:58.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and the 5 colon 5 means go to line 5 within""" start="00:05:01.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that section and column 5.""" start="00:05:05.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's just try it. Boom,""" start="00:05:07.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we're right there, and we're on another link""" start="00:05:09.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that we could activate as well.""" start="00:05:11.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So notice the next line is the same link but""" start="00:05:13.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this is how you normally have to do it in a""" start="00:05:17.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""markdown file. You have to change the section""" start="00:05:20.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""header to have dashes but with hyperbole you""" start="00:05:23.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""don't have to. You can just put it exactly""" start="00:05:25.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like you see it in your file.""" start="00:05:28.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Here the pound syntax for sections is really""" start="00:05:30.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a generic syntax in the hyperbole.""" start="00:05:34.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And so it works in all different kinds of""" start="00:05:37.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""files, your programming files.""" start="00:05:39.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Here's a shell script and we said let's just""" start="00:05:42.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""go to the first comment that has alias in it.""" start="00:05:45.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Notice we didn't have to say the whole line,""" start="00:05:49.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just the first part of it.""" start="00:05:51.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And it matched to it. Here we have a link to""" start="00:05:53.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""our hyperbole structured outliner called the""" start="00:05:58.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""K Outliner. And you can see it auto-numbers""" start="00:06:01.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""all these cells. But in addition to just""" start="00:06:05.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""displaying, you can also add a pipe symbol""" start="00:06:08.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""near the end and use this view syntax to clip""" start="00:06:10.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to 2 lines and show blank lines.""" start="00:06:14.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's see if each node gets clipped to 2""" start="00:06:17.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""lines. So you see they're all just 2 now with""" start="00:06:19.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the ellipses and then we can expand them.""" start="00:06:22.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So a lot of power there just with path names.""" start="00:06:25.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Let's continue to number 8.""" start="00:06:29.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Can I just interrupt you just a bit?""" start="00:06:31.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes.""" start="00:06:33.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: I think your phone, so we have your phone set""" start="00:06:34.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""up in case your internet misbehaves and we've""" start="00:06:37.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""set this up before we started,""" start="00:06:40.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I think the vibration is a little loud""" start="00:06:42.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""whenever it does. Can you maybe move it a""" start="00:06:44.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""little bit? I think so.""" start="00:06:46.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It will have to vibrate again.""" start="00:06:50.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Is that okay? No, my phone...""" start="00:06:47.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Okay. It shouldn't have been vibrating.""" start="00:06:54.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: have been another device,""" start="00:06:59.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but definitely we had vibration.""" start="00:07:01.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Anyway, carry on. Sorry for the interruption.""" start="00:07:02.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: It could be me. It might So number 8,""" start="00:06:57.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""special prefixes. There are 3 prefixes you""" start="00:07:07.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can attach to path names.""" start="00:07:10.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""The first, if you want to load,""" start="00:07:11.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""instead of just finding a file,""" start="00:07:13.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""an ELIST file, you can actually load it.""" start="00:07:16.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And so I can just hit made a return on this,""" start="00:07:19.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you see in the mini buffer,""" start="00:07:22.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it loaded it as compiled e-list.""" start="00:07:25.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I could put a .el on here,""" start="00:07:27.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a .elc, .gz, all of that'll work,""" start="00:07:29.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and just put a dash in front to load it.""" start="00:07:33.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""If you want to run a shell command,""" start="00:07:36.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just put an exclamation mark in front of""" start="00:07:38.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""something and again you can have the""" start="00:07:41.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""environment variable. So here we're saying""" start="00:07:42.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""run the program date and you see,""" start="00:07:44.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""let's see, let's do it again.""" start="00:07:48.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""There we go. It ran date and you see the""" start="00:07:50.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""output right there. And what if you want to""" start="00:07:53.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""run a graphical program on your system?""" start="00:07:55.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Well here, we want to open a PDF file and I'm""" start="00:07:58.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just using XDG Open on Linux,""" start="00:08:01.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you could use Open on Mac and you just put an""" start="00:08:05.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""ampersand in front and there's the Hyperbole""" start="00:08:09.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""manual instantly displayed.""" start="00:08:14.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So lots of power there and all of that""" start="00:08:16.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""actually .pdf's and many other file types are""" start="00:08:18.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""automatically linked to various programs by""" start="00:08:22.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole. So you could just use the path""" start="00:08:25.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""name itself and it would probably behave the""" start="00:08:27.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""same way. Number 7, bookmarks on steroids.""" start="00:08:29.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So Hyperbole gives you a personal button""" start="00:08:35.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""file, which is on the menu you see here under""" start="00:08:37.419" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button files, and then personal.""" start="00:08:40.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So here we'll just display it.""" start="00:08:43.039" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And you can put whatever you want in here,""" start="00:08:45.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""these implicit buttons of any type.""" start="00:08:47.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can name them the way here and you can""" start="00:08:49.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""activate either the name with MetaReturn or""" start="00:08:52.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the button itself. So,""" start="00:08:55.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of course, if we did MetaReturn here,""" start="00:08:56.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we'd just display that in a web browser.""" start="00:08:59.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'll just do a few of these.""" start="00:09:03.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So here's a section of line.""" start="00:09:05.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Let's just jump there.""" start="00:09:07.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But these can be all sorts of different""" start="00:09:09.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""actions that are going on.""" start="00:09:11.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And you just, whatever cross references you""" start="00:09:13.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""want, you put in here.""" start="00:09:16.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And the neat thing is that this then becomes""" start="00:09:17.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a list of what we call global buttons.""" start="00:09:20.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So when I go into the menu and I go control""" start="00:09:23.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""HHGA to activate a global button,""" start="00:09:26.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can see that all the names from this file""" start="00:09:30.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""appear here. So only the name buttons appear,""" start="00:09:33.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and I could like go to the hyperbole to-do""" start="00:09:36.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""list and things like that.""" start="00:09:40.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So very, very quick access to all your""" start="00:09:42.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""information whenever you need it.""" start="00:09:45.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And that could be an org file as well if you""" start="00:09:47.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""prefer that. So we just took care of that.""" start="00:09:49.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Number 6, instant test case running and""" start="00:09:53.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""debugging. This is a fairly new feature.""" start="00:09:57.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""What we're seeing here is a pre-release of""" start="00:10:00.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""version 9, which should be out within the""" start="00:10:02.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next week. But the instructions at the""" start="00:10:04.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""beginning of the presentation tell you how to""" start="00:10:07.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""get the development version of HyperBlade,""" start="00:10:10.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which is right now 8.01""" start="00:10:14.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""pre, but that's virtually the same as what 9""" start="00:10:15.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""will be. So you can grab that as of today.""" start="00:10:19.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's just jump to a test file.""" start="00:10:24.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""What you see here is called an explicit""" start="00:10:27.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button. You can actually make buttons where""" start="00:10:30.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""similar to org, where you just see a bit of""" start="00:10:33.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the button and all of the metadata is hidden.""" start="00:10:35.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I can say control A J and I see all about""" start="00:10:39.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that button, exactly what it's going to do""" start="00:10:42.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""before I activate it and even who created it""" start="00:10:43.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""or last modified it. Then just queue out of""" start="00:10:47.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""here and you're back where you were.""" start="00:10:50.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So now, what this did is link us to an ERT""" start="00:10:52.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""test. If you write tests in Emacs,""" start="00:10:56.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you probably use ERT tests.""" start="00:10:59.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So if I hit made a return on here it'll just""" start="00:11:02.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""run the test tell me it passed great okay but""" start="00:11:05.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""maybe I had a problem so let me use control""" start="00:11:08.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you made a return and that will e-debug the""" start="00:11:11.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""test instantly. So now I'll step through it""" start="00:11:17.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it says, well, let's,""" start="00:11:20.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this single line actually creates that""" start="00:11:23.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""explicit button. You see we have an empty""" start="00:11:25.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffer here that we're in.""" start="00:11:27.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Now I step through that and now there's the""" start="00:11:29.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""explicit button that got put in there.""" start="00:11:31.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Now the next line I step through it and this""" start="00:11:34.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is going to check if we have the right action""" start="00:11:36.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""type and it returns true so that's good and""" start="00:11:39.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""now we should be it should be associated with""" start="00:11:42.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the temp buffer returns true good And that's""" start="00:11:45.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""why what you saw before is this passed.""" start="00:11:48.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""The whole thing passed.""" start="00:11:51.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So lots of power there.""" start="00:11:53.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Simple to use. You're just using your made a""" start="00:11:55.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""return and prefix arguments.""" start="00:11:57.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's something everybody who develops should""" start="00:12:00.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""have. So number, let's go on.""" start="00:12:03.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I think we're making pretty good time here,""" start="00:12:07.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I turned off my timer.""" start="00:12:09.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Let's go to number 5. This is a very new""" start="00:12:13.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feature, which is very cool too.""" start="00:12:15.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You used to have to use the mouse probably""" start="00:12:17.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you could drag across windows to go from""" start="00:12:20.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a source to a referent buffer and that would""" start="00:12:23.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""create a hyperlink for you.""" start="00:12:26.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But now we've installed it and made it even""" start="00:12:28.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""easier on, we've installed it on a,""" start="00:12:30.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""on the hyperbole menus.""" start="00:12:34.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's just go back to our presentation""" start="00:12:37.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""here and say we want to link to this line""" start="00:12:40.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that we're on there. And I'll just create the""" start="00:12:43.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button in our scratch buffer here so it""" start="00:12:46.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""doesn't really mess anything up.""" start="00:12:48.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I just put my point in where I want the""" start="00:12:50.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button to appear and then I put point where I""" start="00:12:53.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""want it to link to in the other the other""" start="00:12:56.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffer and then I just say control HH to get""" start="00:13:00.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""my menu, I for implicit button,""" start="00:13:02.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and then L for link. Boom,""" start="00:13:05.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it inserts it, right at point.""" start="00:13:07.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""What did it do? It knew that this was in the""" start="00:13:10.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole directory and I have a variable for""" start="00:13:12.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that, so that if you sent this link to your""" start="00:13:15.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""friend who uses Hyperbole,""" start="00:13:17.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it would still work right because they have a""" start="00:13:19.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""different hyperbole there.""" start="00:13:21.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And then I want to go directly to line 116.""" start="00:13:23.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So boom, it just took me there.""" start="00:13:28.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's it. And Hyperbole is doing all this""" start="00:13:30.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for you. You just say I want a link to this""" start="00:13:33.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""thing and it figures out what's at point and""" start="00:13:36.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it determines the right type of implicit link""" start="00:13:38.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to put there. And that's the whole point is""" start="00:13:42.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that you're just working like when you're""" start="00:13:45.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""programming or you're writing an article and""" start="00:13:47.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you just hit made a return or or pull up a""" start="00:13:50.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""menu and hit a key binding and you're off to""" start="00:13:53.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the races. So that was implicit linking We""" start="00:13:57.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can also create those explicit link buttons,""" start="00:14:02.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and as well as the global link,""" start="00:14:06.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""where we would just give it a name,""" start="00:14:07.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it would automatically put it in our""" start="00:14:09.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""global button file without us even having""" start="00:14:11.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that on screen. So lots of power there as""" start="00:14:14.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well, lots of consistency.""" start="00:14:18.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Now let's take a look at the K Outliner a""" start="00:14:21.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""little more. I'm just going to show you 1""" start="00:14:25.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feature actually. I don't have time to show""" start="00:14:28.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you the K Outliner in detail,""" start="00:14:29.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it's a really cool structured outliner""" start="00:14:31.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that even if you love Org Mode,""" start="00:14:34.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you should try it. And this is 1 thing that""" start="00:14:36.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can't get with Org Mode,""" start="00:14:39.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is let's say Hyperlink comes with an example""" start="00:14:41.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""file which teaches you about the K Outliner.""" start="00:14:45.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So we'll just use that right here.""" start="00:14:48.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And when you're in the K Outliner,""" start="00:14:51.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can bring up and go into the K Outliner""" start="00:14:53.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""menu right here at the bottom.""" start="00:14:55.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And there's a format menu there.""" start="00:14:58.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You always take the first letter of a menu,""" start="00:15:00.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the first capital letter of a menu item.""" start="00:15:02.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So F for format and then D for display in""" start="00:15:05.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""browser. So just let's do it.""" start="00:15:08.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We have with 1 button or 1 key we've produced""" start="00:15:12.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the entire outline in a collapsible outline""" start="00:15:17.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in HTML. So I can go here.""" start="00:15:23.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I just have to use my mouse.""" start="00:15:27.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I can expand and collapse these trees live""" start="00:15:29.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with very basic coding.""" start="00:15:34.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We tried to keep this as simple as possible.""" start="00:15:39.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But you see it maintains the structure of the""" start="00:15:42.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""outline and even tables.""" start="00:15:45.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So all the formatting is maintained and again""" start="00:15:55.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's instant. Or you can just export it to a""" start="00:15:57.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""file without displaying it.""" start="00:16:00.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Very efficient kinds of operations.""" start="00:16:03.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that was number 4. Number 3 is a""" start="00:16:06.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""subsystem, another subsystem in Hyperbole""" start="00:16:10.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""called Hycontrol, which is for window and""" start="00:16:13.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""frame management. And I just wanted to show""" start="00:16:16.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you 1 thing in there. It's got a lot of""" start="00:16:18.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""capabilities. But I always had the problem""" start="00:16:20.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that Emacs wouldn't let me scale my fonts,""" start="00:16:24.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""all of my faces at the same time.""" start="00:16:28.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I wanted to zoom. I didn't want to increase""" start="00:16:30.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the default font size and all the others stay""" start="00:16:33.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the same. So let's just display our faces""" start="00:16:36.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""right here and then we have a choice of""" start="00:16:41.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""either controlling frames or windows.""" start="00:16:45.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's start by controlling frames.""" start="00:16:47.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So you get another submenu when you're in""" start="00:16:50.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""high control to tell you what to do here.""" start="00:16:52.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And there's just lowercase z and uppercase z.""" start="00:16:56.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's try it. So it's scaling the entire""" start="00:16:59.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""frame. And you can see from the list of faces""" start="00:17:03.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that they're all scaling at the same time.""" start="00:17:06.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I can go back down.""" start="00:17:08.599" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Now if I switch to window mode,""" start="00:17:10.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and there's a special fast way to do that,""" start="00:17:13.619" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just hit T to toggle. And if you look at the""" start="00:17:16.099" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bottom menu it says frames right now now it""" start="00:17:18.819" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""says windows when I hit T so now if I do the""" start="00:17:21.819" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""same Z to increase it's just this window and""" start="00:17:25.599" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it's you know it's the faces in there so""" start="00:17:30.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a lot of power again but I just haven't found""" start="00:17:37.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""anywhere else that you can get that kind of""" start="00:17:40.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""control over your faces very rapidly.""" start="00:17:43.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's number 3. Now number 2,""" start="00:17:45.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""let's put that in there.""" start="00:17:55.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So the HiROLO is the final subsystem in""" start="00:17:58.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole and this has gotten much cooler.""" start="00:18:03.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it started off as a contact management""" start="00:18:06.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""system, but it's really just a hierarchical""" start="00:18:08.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""record management system that lets you have""" start="00:18:11.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""as many files, directories as you want,""" start="00:18:15.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you can search across all of them without""" start="00:18:18.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""any external utilities necessary,""" start="00:18:20.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just what's built into Emacs and Hyperlink.""" start="00:18:23.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So as you can see, we've expanded it to""" start="00:18:26.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""handle org files, markdown,""" start="00:18:29.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""K outlines, Emacs outlines.""" start="00:18:32.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So what I'm going to do is just say,""" start="00:18:34.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I want to search using my Hyberlo file list.""" start="00:18:36.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You just set that to what you wanted to""" start="00:18:40.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""search. But now you have all this""" start="00:18:43.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""flexibility. You can use environment""" start="00:18:44.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""variables in it. You can just specify a""" start="00:18:46.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""directory and it will find all those matching""" start="00:18:48.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""files below that directory recursively.""" start="00:18:51.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can give it the markdown file here and""" start="00:18:55.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can use file wildcards as well.""" start="00:18:58.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I mean, look at this. It's got a list""" start="00:19:01.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""variable in it and a wildcard,""" start="00:19:04.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's just all I'm gonna do is I change""" start="00:19:06.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this from a Lisp expression to make it a""" start="00:19:09.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyper button. You just change the outer""" start="00:19:13.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""parens to angle brackets,""" start="00:19:15.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and then it's automatically an implicit""" start="00:19:17.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button that you can activate with made a""" start="00:19:21.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""return so just ran that and now I've set my""" start="00:19:22.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""file list so now let's do a search it would""" start="00:19:26.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""be ctrl H H roll it X R and then S for search""" start="00:19:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But I'll just do it this way.""" start="00:19:34.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And boom, it found everything that fast.""" start="00:19:37.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I can just get like,""" start="00:19:41.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""show the top items in there.""" start="00:19:43.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I kind of have outlining in this buffer.""" start="00:19:45.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I can just move to each match that I hit.""" start="00:19:48.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And notice, although everything was""" start="00:19:51.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""collapsed, it's expanding here.""" start="00:19:53.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""When I move in and out of each of the entry""" start="00:19:55.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""matches, it expands or collapses as I move to""" start="00:19:58.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the next 1. So a lot of power there.""" start="00:20:02.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""What else? So just tabbing through these""" start="00:20:06.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""things. And you notice that it's working""" start="00:20:09.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""across all of these different types,""" start="00:20:11.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's telling you which file everything""" start="00:20:13.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""came from right up here.""" start="00:20:16.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I could just made a return here,""" start="00:20:17.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""should work. Yes, revisit the file normally.""" start="00:20:20.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And it just pulls it right up.""" start="00:20:23.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So everything is live and hyperbole.""" start="00:20:25.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You've got hyperlinks everywhere.""" start="00:20:28.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Let's just get rid of that.""" start="00:20:31.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Go back to our demo. So if you are fans of""" start="00:20:34.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Vertico and Consult, you can now use that""" start="00:20:41.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with the High Rollo. So all you have to do is""" start="00:20:46.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""let's just format our windows,""" start="00:20:49.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and then I'll say, let's use ConsultGrep over""" start="00:20:51.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the Rolodex. Now, it found all the matches""" start="00:20:55.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""there, and I can just move live through them""" start="00:20:58.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in the buffer like you may be used to or I""" start="00:21:02.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can filter back down and say using orderless""" start="00:21:04.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""joystick or anything that has joy in it just""" start="00:21:10.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""match to those lines and then I can you know""" start="00:21:13.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""either jump there or quit out of here.""" start="00:21:17.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'll just quit out of it right now.""" start="00:21:20.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So very cool. And all of that is using""" start="00:21:22.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""whatever you personally set as the set of""" start="00:21:25.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""files and directories you want to search.""" start="00:21:28.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And finally, our number 1 feature of""" start="00:21:31.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole is you can customize this to give""" start="00:21:35.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you these kinds of implicit buttons,""" start="00:21:40.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""whatever kind you want.""" start="00:21:44.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And there are 3 levels of doing this.""" start="00:21:46.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""The first is for non-programmers.""" start="00:21:49.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can just set a string,""" start="00:21:51.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like a URL with a parameter in it.""" start="00:21:54.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So the %s represents the parameter,""" start="00:21:57.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and This is how you do a search on""" start="00:21:59.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""DuckDuckGo. So all I have to do is evaluate""" start="00:22:01.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this defal for action link.""" start="00:22:04.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And now I have a new implicit button type""" start="00:22:07.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that I can put between angle brackets.""" start="00:22:11.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I just give it that name,""" start="00:22:13.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""DDG, and some parameter,""" start="00:22:16.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""whatever I want to search for,""" start="00:22:18.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and this is a button that does that search.""" start="00:22:20.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Very cool, right? So you can embed these.""" start="00:22:25.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""This could be a hyperlink in,""" start="00:22:28.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, a comment in a programming file.""" start="00:22:32.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Anything on the entire web that you want to""" start="00:22:35.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""link to, whatever kind of compact notation""" start="00:22:38.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you want to give it. So that's what we're""" start="00:22:42.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""going to learn as we get more advanced here""" start="00:22:44.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can give it even more compact notations.""" start="00:22:47.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So as you get more advanced you can say,""" start="00:22:49.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well I don't like this angle bracket,""" start="00:22:52.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I want to have an implicit button that uses""" start="00:22:54.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""these square brackets and then an angle""" start="00:22:57.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bracket inside it. So then you need the""" start="00:22:59.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""defile for implicit link.""" start="00:23:02.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""This lets you specify your start and end""" start="00:23:06.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""delimiters for your new type and and then you""" start="00:23:08.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can give it a function that you wanted to run""" start="00:23:12.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and that will take the text of whatever is in""" start="00:23:15.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the button, in this case,""" start="00:23:18.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""test release here, and feed it to the""" start="00:23:19.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""function that I gave here.""" start="00:23:23.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So what this function does is grep over my""" start="00:23:26.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""git log and find any commits that include the""" start="00:23:29.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""term test release in it.""" start="00:23:33.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let's try it. First I have to add the""" start="00:23:35.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button type and that's all it takes and it""" start="00:23:38.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""defined it now. So anywhere in Emacs now I""" start="00:23:41.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can use this button type essentially.""" start="00:23:44.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let me try to activate it.""" start="00:23:47.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Okay, and it says yeah let's save it.""" start="00:23:49.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Okay so now it's running a git log command.""" start="00:23:53.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It found all the commits and now of course if""" start="00:23:56.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I had made a return on this commit it""" start="00:23:59.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""recognizes it as an implicit link,""" start="00:24:02.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and if I search for what was a test release,""" start="00:24:05.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""there it is. So this commit had that in""" start="00:24:09.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""there. So all these matches,""" start="00:24:11.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""so I don't know how other people do this,""" start="00:24:14.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but for me this makes it a lot simpler.""" start="00:24:16.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So a lot of power that any programmer can""" start="00:24:21.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""use. And finally, if you've mastered Emacs""" start="00:24:24.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Lisp, or you're starting to,""" start="00:24:27.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can look in the hib types file in""" start="00:24:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole and see all sorts of uses of defib,""" start="00:24:33.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which is defined implicit button.""" start="00:24:37.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And that's the full power of e-LISP when you""" start="00:24:39.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""want to define 1. So what we're going to do""" start="00:24:42.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""here is I wanted to know,""" start="00:24:45.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""given a date, what the day of the week is.""" start="00:24:47.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And because the date primitives weren't quite""" start="00:24:49.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""written the way I might like,""" start="00:24:53.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's a little longer than some.""" start="00:24:55.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But I'm just going to evaluate this list.""" start="00:24:57.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I've now defined DOW as an action type.""" start="00:25:00.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Now, how do I know I'm doing that?""" start="00:25:06.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I can always say Control-H,""" start="00:25:08.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""capital A here to see what a button's going""" start="00:25:11.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to do. And it tells me When I'm there,""" start="00:25:13.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm at a hyperbole button,""" start="00:25:15.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and the type is from category DOW.""" start="00:25:18.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And what's it gonna do?""" start="00:25:24.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It takes a mark, it's gonna do a message""" start="00:25:25.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""action. Okay, so let's try it.""" start="00:25:27.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It tells me that's a date,""" start="00:25:31.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it falls on a Sunday,""" start="00:25:32.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which is today. That's correct.""" start="00:25:34.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So 2 days from today is a Tuesday.""" start="00:25:36.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Beautiful. So we've just totally transformed""" start="00:25:39.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""what we can do with text.""" start="00:25:44.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You notice there's no markup here.""" start="00:25:46.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And this is working with all of the other""" start="00:25:49.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""implicit types that we have everywhere in""" start="00:25:53.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Emacs. It's only going to match to this kind""" start="00:25:55.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of pattern and anywhere else,""" start="00:25:57.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, it just won't trigger that type.""" start="00:26:00.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So lots of power. You just need to get""" start="00:26:03.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""started with Hyperbole.""" start="00:26:06.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""There's great documentation both inside the""" start="00:26:07.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""code and in the manual.""" start="00:26:10.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""There's a fast demo that you can start with""" start="00:26:12.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and there's about 10 different videos.""" start="00:26:15.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""There'll be 3 presentations on hyperbole here""" start="00:26:18.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""at the conference, and I hope you've enjoyed""" start="00:26:21.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this presentation. I'd love to answer your""" start="00:26:25.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions and get some new users for""" start="00:26:28.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole. So lastly, I'd like to thank my""" start="00:26:31.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""co-maintainer, Matt, who's going to speak""" start="00:26:36.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""later about the extensive test protocols we""" start="00:26:38.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""have in Hyperbole. Hyperbole works on every""" start="00:26:42.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""version of Emacs from 27.1""" start="00:26:46.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""up, and every operating system and Windows""" start="00:26:48.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""system that you use. And thanks so much to""" start="00:26:52.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the volunteers and the speakers at EmacsConf.""" start="00:26:56.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You do a great job, and we're all really""" start="00:26:59.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""appreciative that you take all the time that""" start="00:27:02.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you do to make this happen.""" start="00:27:04.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:27:06.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: And thank you so much Bob.""" start="00:27:09.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I'll let you do the gymnastics to join us""" start="00:27:11.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""back on BBB and put your webcam.""" start="00:27:14.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""In the meantime, I'll invite people,""" start="00:27:17.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""as Sasha told you in the introduction,""" start="00:27:19.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to go put your question in the pad.""" start="00:27:21.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""The link is on the talks page and also on""" start="00:27:23.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""IRC. So take your time.""" start="00:27:25.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We've already got some people who've asked""" start="00:27:28.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions. You can also start joining the""" start="00:27:29.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""room. Let me just ping Sasha.""" start="00:27:33.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Ping to open ID HyperAmp.""" start="00:27:35.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, you'll be able to join us on""" start="00:27:39.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""BigBlueButton as well to go chat with Bob""" start="00:27:41.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""more directly. I'm not sure if people have""" start="00:27:43.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""joined already. Not yet.""" start="00:27:45.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, Bob, what I'll do,""" start="00:27:50.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we already have 4 questions.""" start="00:27:51.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm gonna read them to you and you can take""" start="00:27:52.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""your time answering them,""" start="00:27:54.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but we do have about 7 minutes until we go to""" start="00:27:54.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the next talk, so we need to be a little bit""" start="00:27:57.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay.""" start="00:28:00.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: chop-chop. All right, so reading the first""" start="00:27:59.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions, and I'm also going to display them""" start="00:28:03.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for the stream to see,""" start="00:28:05.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""do buttons keep their metadata within the""" start="00:28:07.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""same file? E.g., would I see it if I change""" start="00:28:09.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to fundamental mode, for instance?""" start="00:28:12.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: So all of the things that I was showing you,""" start="00:28:15.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""implicit buttons have no metadata.""" start="00:28:19.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""That's the great thing about them,""" start="00:28:21.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is you just type them in the buffer and what""" start="00:28:23.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you see is all there is to that button and""" start="00:28:27.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole generates all the smarts associated""" start="00:28:30.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with them. When you create an explicit""" start="00:28:33.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""button, which I showed you 1 or 2 examples""" start="00:28:35.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of, that metadata is, there is metadata with""" start="00:28:38.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that, and that is stored in a separate file""" start="00:28:42.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in the same directory called .hypb.""" start="00:28:45.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it's hidden away and it doesn't affect the""" start="00:28:49.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""format of the buffer that it's in.""" start="00:28:51.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So again, what you see is what you get.""" start="00:28:53.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You just see the delimiters around the""" start="00:28:56.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""explicit button and that's it.""" start="00:28:58.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So Hyperbole takes care of all that for you.""" start="00:29:01.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""However, if you embed them into like a mail""" start="00:29:04.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""message, which you can,""" start="00:29:08.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can mail buttons, then there is a hidden""" start="00:29:09.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""area at the end of the mail message that""" start="00:29:12.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""encodes the metadata for the explicit""" start="00:29:14.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buttons.""" start="00:29:17.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Ok, great. Next question.""" start="00:29:19.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Is it possible to link to a file by its ID,""" start="00:29:21.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like the node, org ID or some similar unique""" start="00:29:24.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""string inside?""" start="00:29:27.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, In fact, that's 1 of the new features in""" start="00:29:29.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""9. You just made a return on an ID and it""" start="00:29:33.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""takes you right to the org node,""" start="00:29:37.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""works with org Rome and org straight out of""" start="00:29:40.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the box. We're looking at ways to make it""" start="00:29:44.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""easier to just insert those in places,""" start="00:29:47.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but since you have word keys that do that""" start="00:29:50.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""already, you can just insert them in any""" start="00:29:52.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""documents and Hyperbole will recognize them.""" start="00:29:55.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I think In some cases you may need to put ID""" start="00:29:58.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""colon in front of the ID as well.""" start="00:30:02.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Generally it works.""" start="00:30:05.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Ok, great. Moving on to the next question.""" start="00:30:08.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Regarding the frames example,""" start="00:30:12.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""any thoughts or considerations for a""" start="00:30:14.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""transient interface or is this something 1""" start="00:30:16.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""could already toggle? Are you familiar with""" start="00:30:19.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""transient interface?""" start="00:30:22.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, we don't use transient because we,""" start="00:30:23.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, Hyperbole started out in 1991,""" start="00:30:26.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""though it's had much much work since then so""" start="00:30:30.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we predate a lot of newer things in Emacs and""" start="00:30:34.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""then we just use them as as they Become""" start="00:30:37.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""useful too hyperbole We think the The mini""" start="00:30:41.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffer menu is pretty good.""" start="00:30:45.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We could rewrite stuff in transient,""" start="00:30:46.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but we haven't seen the need yet.""" start="00:30:48.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Maybe high control, that might be a good""" start="00:30:52.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""candidate, because there are so many keys in""" start="00:30:54.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it. So we'll think about that.""" start="00:30:58.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But it would be a while before we got to it.""" start="00:31:00.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Moving on to the next question.""" start="00:31:04.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Sorry I got really confused because there's a""" start="00:31:07.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""French salut, you know,""" start="00:31:08.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in the text of it. Is someone saying hi to me""" start="00:31:10.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""or something? All right,""" start="00:31:12.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next question. Regarding multi-file search""" start="00:31:14.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""functionality, why not implement it within""" start="00:31:16.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the existing framework of MetaX grep or""" start="00:31:22.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""similar built-in commands?""" start="00:31:24.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Yet another search interface sounds a bit""" start="00:31:26.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""redundant.""" start="00:31:28.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Multi-file search, so HiRolo I guess you're""" start="00:31:30.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""talking about. I think what you missed there""" start="00:31:34.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is that High Rollo matches to records,""" start="00:31:36.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""multi-line records, so it's not a""" start="00:31:40.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""line-oriented match, it's a record-oriented""" start="00:31:42.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""match. So Grep, you can say maybe give me 3""" start="00:31:45.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""lines of context, but what if I have a""" start="00:31:50.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""20-line record? I want to see the whole""" start="00:31:52.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""thing. And so, it's a full-text search""" start="00:31:56.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""interface, which lets you have any size""" start="00:31:59.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""entries or nodes in the match buffer.""" start="00:32:04.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's 1 reason. MADAX grep works with""" start="00:32:07.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole. I mean, you use it if you want and""" start="00:32:10.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""then you can hit MADA return on grep lines.""" start="00:32:13.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So we basically take everything from POSIX""" start="00:32:16.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and everything in Emacs and we try to make a""" start="00:32:20.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""lot of it simpler to use.""" start="00:32:24.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We don't take away any of the functionality,""" start="00:32:26.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we just augment it.""" start="00:32:29.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, and I think that's the logic for a lot""" start="00:32:32.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of the packages, you know,""" start="00:32:35.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the philosophy is just you create your little""" start="00:32:36.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bit, your little island where you do your""" start="00:32:38.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""stuff. And if you can resonate with other""" start="00:32:40.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""islands so much the better.""" start="00:32:42.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And it feels like between those islands,""" start="00:32:43.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, hyperbole is a great way to connect""" start="00:32:45.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""things that are just text.""" start="00:32:48.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it's always been a lovely philosophy.""" start="00:32:50.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""There's always been a lovely philosophy""" start="00:32:52.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""behind it.""" start="00:32:53.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: 1 other point I'd make there is that the""" start="00:32:55.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyrolo also contains logical search""" start="00:32:58.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""operators. So when I typed in that string you""" start="00:33:01.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""could just as well type with like Lisp""" start="00:33:04.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""expressions, semi Lisp expressions.""" start="00:33:07.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can say open paren and word 1,""" start="00:33:09.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""word 2, close paren. You know you can have or""" start="00:33:13.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and XOR and not and it'll do the search and""" start="00:33:17.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just retrieve the entries,""" start="00:33:22.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""again, multi-line entries that match all of""" start="00:33:24.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the criteria that you specified there.""" start="00:33:27.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's fairly unique,""" start="00:33:29.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I think. So you basically got a full text""" start="00:33:31.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""search platform with logical operators,""" start="00:33:33.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""instantly, you know, fast moving,""" start="00:33:36.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""rapid keys that you can control everything""" start="00:33:38.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with and it's all integrated into this larger""" start="00:33:42.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""framework.""" start="00:33:45.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, great. Well, Bob,""" start="00:33:47.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you have 2 more questions,""" start="00:33:49.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but there's a big 1 about what inspired you""" start="00:33:50.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to write it back. It's being hyperbole around""" start="00:33:53.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the time of its birth,""" start="00:33:56.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but sadly, we only have about 1 more minute.""" start="00:33:57.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So what I'm going to ask you to do,""" start="00:34:00.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feel free to answer the question.""" start="00:34:01.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""If you go on BBB, I've pasted the link to the""" start="00:34:02.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""other pad. I think you can see it on your""" start="00:34:05.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: I have the ether pad up.""" start="00:34:08.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: computer as well. Right,""" start="00:34:06.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""so what are we going to do?""" start="00:34:11.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm Sorry, I'm just a little bit pressed by""" start="00:34:14.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""time because it's not me controlling when we""" start="00:34:16.679" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""move on to the next talk,""" start="00:34:18.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""as was evidenced yesterday when we got yonked""" start="00:34:19.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to the next talk. So Bob,""" start="00:34:21.719" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feel free to take all the time you want to""" start="00:34:24.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""answer questions. People,""" start="00:34:25.679" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""if you wanna join the Big Blue Button room,""" start="00:34:26.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the links are available and open on the talk""" start="00:34:28.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""page. You can join and ask as many questions""" start="00:34:30.239" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""as you want to Bob. And for us,""" start="00:34:31.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with a live stream, we'll be moving on to the""" start="00:34:33.679" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next talk in about 30 seconds.""" start="00:34:35.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So Bob, all that's left is for me to thank""" start="00:34:37.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you for your presentation again this year and""" start="00:34:39.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you, Leo.""" start="00:34:43.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: for all your answers. All right.""" start="00:34:41.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Bye bye, Bob. And we'll be moving on to the""" start="00:34:45.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next talk in about 10 seconds.""" start="00:34:47.699" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""See you in a bit. All right,""" start="00:34:49.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Bob, we are off air I think now.""" start="00:34:53.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Thank you so much. I need to get moving for""" start="00:34:56.139" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, is somebody gonna keep writing answers""" start="00:34:59.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in here or I need to type them in?""" start="00:35:02.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: the next talk. It's probably best now if you""" start="00:34:57.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""read the questions on your own and answer""" start="00:35:06.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""them. We'll collate everything together,""" start="00:35:09.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we'd just like to have your answers.""" start="00:35:11.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: I hope some people will join the BBB.""" start="00:35:15.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: it in my... All right,""" start="00:35:19.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bye-bye.""" start="00:35:21.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: But I'll start. I'll put Bye-bye.""" start="00:35:17.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So let me take a second here to see what""" start="00:35:24.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions we have. Did we cover that?""" start="00:35:28.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""OK. The point is why not upstream search""" start="00:35:36.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""interface? Could you clarify that question?""" start="00:35:42.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I don't quite know what that means.""" start="00:35:46.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I'll go on to the next 1 and come back to""" start="00:35:51.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that. Hyperlinks been around for a number of""" start="00:35:53.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""years now. What inspired you to write it back""" start="00:35:57.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""around the time of its birth?""" start="00:35:59.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Well, that's a great question.""" start="00:36:01.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It was born before the World Wide Web,""" start="00:36:04.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""actually. And it was right before.""" start="00:36:07.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I remember we were in the midst of a version""" start="00:36:10.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""when the first version of the web occurred.""" start="00:36:13.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I was thinking that there was going to be""" start="00:36:16.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""an information explosion of unstructured""" start="00:36:19.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""information. And like we needed to have much""" start="00:36:22.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""better tools to be able to manage say like""" start="00:36:27.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""5,000 email messages coming in and all sorts""" start="00:36:30.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of non-database-oriented information""" start="00:36:36.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""structures. So I said we need an advanced""" start="00:36:39.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""interactive hypertext system and it needs to""" start="00:36:42.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""work with all the general capabilities that""" start="00:36:46.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we use like email and our document production""" start="00:36:49.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""systems. So I was doing research at the time""" start="00:36:54.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""at a university And I decided to work on""" start="00:36:58.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""something that we called personalized""" start="00:37:04.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""information environments.""" start="00:37:06.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And there's a paper about this out there if""" start="00:37:07.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you want to dig it out on the web.""" start="00:37:10.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So Pies, as they were called,""" start="00:37:12.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""was an architecture which would have a bunch""" start="00:37:16.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of managers, like Hyperbole was 1 of the""" start="00:37:20.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""managers, the hypertext manager,""" start="00:37:24.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and then a bunch of point tools that would""" start="00:37:26.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""leverage the managers,""" start="00:37:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like an email reader would be a point tool""" start="00:37:30.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that would leverage the hypertext manager.""" start="00:37:33.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And so the first, I did in fact write""" start="00:37:36.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""something called PyMail,""" start="00:37:39.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which was very much Gmail-like,""" start="00:37:41.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""before Gmail. And so inside,""" start="00:37:44.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and I did a, it was like our mail in a way,""" start="00:37:48.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but inside your our mail summaries,""" start="00:37:51.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for example, you could have explicit buttons""" start="00:37:54.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""embedded and that were drawn from the subject""" start="00:37:57.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of your email message,""" start="00:38:01.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and they'd work just like the regular button.""" start="00:38:02.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it was very flexible,""" start="00:38:06.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it had rule-based processing and things.""" start="00:38:07.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So Hyperbole came out of that,""" start="00:38:11.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's come a long way,""" start="00:38:13.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it's still a very useful core hypertext""" start="00:38:15.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""system, hypermedia system,""" start="00:38:20.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I should say. Are you familiar with the""" start="00:38:22.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Embark package? I am a bit.""" start="00:38:26.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I've just started using it.""" start="00:38:28.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I think there's some overlapping""" start="00:38:30.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""functionality with hyperbole.""" start="00:38:32.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Yes, we've found that people over time have""" start="00:38:34.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""enjoyed hyperbole and have started""" start="00:38:39.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""replicating some of its features,""" start="00:38:41.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, small amounts of the features.""" start="00:38:43.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I talked to, I hope I don't miss his name,""" start="00:38:47.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but O'Adam who writes that once in a while we""" start="00:38:51.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""dialogue and I think Embark is great,""" start="00:38:56.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, I'll give him some pointers too and""" start="00:38:59.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""he thinks that Embark and hyperbole are quite""" start="00:39:04.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""compatible too, just like organ hyperbole.""" start="00:39:08.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So that's how we like to keep it.""" start="00:39:11.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Some people prefer just a small package of""" start="00:39:14.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mBARC, and it does different things than what""" start="00:39:18.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole does. So I think you use all of""" start="00:39:21.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""these tools together, and they can work very""" start="00:39:23.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well together. Any other questions?""" start="00:39:27.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Anybody still here? If not,""" start="00:39:34.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""probably people are off to another talk.""" start="00:39:38.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So thank you very much And again look for""" start="00:39:41.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole version 9 in the next week.""" start="00:39:47.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Thanks very much. Bye.""" start="00:39:53.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Should I leave BBB? Oh Alpha Papa's here.""" start="00:40:00.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hey. Good to see you. Alright,""" start="00:40:07.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well... Well, I'll stay for another minute,""" start="00:40:16.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I think I'm going to go off video 2 and""" start="00:40:22.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""start listening to another talk.""" start="00:40:27.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Thanks, everyone. Thanks everyone.""" start="00:40:30.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Yes, I can hear you. Yes,""" start="00:40:56.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Have you been answering questions?""" start="00:40:58.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: I can hear you. finished answering the""" start="00:40:56.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions. We're all done.""" start="00:41:03.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: I Okay, cool. Well, what I'm going to do,""" start="00:41:00.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm going to close the room unless you want""" start="00:41:07.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to go a little longer,""" start="00:41:09.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""because this talk that we're playing right""" start="00:41:10.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""now is finishing really quick and we don't""" start="00:41:11.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""have a Q&A afterwards.""" start="00:41:13.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, do you want to stay on air or something?""" start="00:41:15.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, if you let people know to come back,""" start="00:41:19.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""because someone went to go hear that""" start="00:41:21.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""presentation, I can stay.""" start="00:41:23.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure, I'll make an announcement then.""" start="00:41:25.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And you can stay, we'll just put on BBB.""" start="00:41:27.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can stay muted until people join,""" start="00:41:29.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but this way it opens up menus for people to""" start="00:41:31.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""join and if no 1 shows up in 5 minutes we'll""" start="00:41:33.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""all go on break. Does that sound okay?""" start="00:41:36.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Great, thank you.""" start="00:41:38.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, I'll go back to the management in the""" start="00:41:40.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""background and I'll let you know.""" start="00:41:44.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Okay, Bob, I've won the stream.""" start="00:43:25.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We are joining it now.""" start="00:43:27.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We've got about 5 seconds.""" start="00:43:28.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I think we are back.""" start="00:43:41.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""so we are gone, Bob, please.""" start="00:43:49.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Hi. So, yeah, I was going to say,""" start="00:43:45.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can we see if anybody comes back in the room?""" start="00:43:54.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""How do you tell?""" start="00:43:57.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: You should be able to show on the left,""" start="00:44:01.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you've got on BbBlueButton,""" start="00:44:03.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you've got a button, I'm showing it on the""" start="00:44:04.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""screen, but you've got a little button that""" start="00:44:06.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""allows you to show the people joining.""" start="00:44:08.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, hello everyone. Let's see if you had more""" start="00:44:10.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""question on your pad that we could be taking""" start="00:44:15.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in the meantime, just give me a second to""" start="00:44:17.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""find""" start="00:44:19.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: your pad. Here we go, an error occurred.""" start="00:44:19.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, it's loading up.""" start="00:44:31.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. Wow. Feels like there's an AI writing""" start="00:44:25.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this stuff on the pad.""" start="00:44:37.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Has it? Is this the last pad?""" start="00:44:41.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Oh no, this is a different 1,""" start="00:44:45.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Which question are you looking at now?""" start="00:44:49.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: sorry. It was a different pad,""" start="00:44:47.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh right.""" start="00:44:55.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: that was the problem. Okay,""" start="00:44:53.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""here we go. Okay, I'm back.""" start="00:44:57.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, yeah, it looks like...""" start="00:45:00.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Is anybody back? Send,""" start="00:45:02.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""if you're here, send a chat message.""" start="00:45:04.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, because it's been something.""" start="00:45:08.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You have, apparently, whenever we leave those""" start="00:45:10.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""BBB chat room open, the moment we go off air,""" start="00:45:14.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""people start joining and asking a lot of very""" start="00:45:18.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""interesting questions and you know that's all""" start="00:45:20.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well and good, we'll be able to put them on""" start="00:45:22.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the page later on. But it'd be great if you""" start="00:45:24.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""could also have those discussions when we are""" start="00:45:26.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""live because a lot of people would benefit""" start="00:45:28.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""from the brilliance that goes on in this""" start="00:45:30.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""room. So please don't be shy,""" start="00:45:32.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: So we're on the general stream now?""" start="00:45:37.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: join and talk. Yep, we are back on the""" start="00:45:34.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""general stream. We have about until 10 of the""" start="00:45:41.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next hour, which is 19 minutes.""" start="00:45:46.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Just- Why don't you and I talk?""" start="00:45:48.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So have you ever tried hyperbole,""" start="00:45:52.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Leo?""" start="00:45:56.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: I have never, but You know,""" start="00:45:58.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it feels like every year when you present""" start="00:46:00.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""something, it feels like I already know so""" start="00:46:03.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""much. Because of the buttons,""" start="00:46:05.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it feels like it's also something that we've""" start="00:46:08.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""reinvented many times in Emacs.""" start="00:46:10.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's like conversion to evolution,""" start="00:46:12.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""except you're the 1 who started ahead of""" start="00:46:14.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""everyone else.""" start="00:46:16.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, that's a good point because,""" start="00:46:17.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, we have, Emacs itself has push""" start="00:46:19.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buttons, which you see like in the help""" start="00:46:23.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffers. And those used to,""" start="00:46:25.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we didn't really do anything with those,""" start="00:46:27.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but now we've subsumed them as implicit""" start="00:46:30.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buttons as well. So you're made a return,""" start="00:46:32.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we'll work on those anywhere too.""" start="00:46:35.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So, we're trying to get,""" start="00:46:38.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you use 1 key, right? To control every type""" start="00:46:42.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of button that you have.""" start="00:46:45.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It works on org links,""" start="00:46:47.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""org buttons anywhere, or URLs.""" start="00:46:48.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Because it's so simple.""" start="00:46:53.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""All you need is like 5 to 10 lines of code to""" start="00:46:54.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""map. You map the pattern that represents a""" start="00:46:58.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""concept, right? And then you can create an""" start="00:47:02.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""infinite number of those buttons from that""" start="00:47:05.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""type. That's what's really cool about""" start="00:47:07.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole, is say I have a 500 page document""" start="00:47:09.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it uses a really weird format for""" start="00:47:13.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""cross-referencing, right?""" start="00:47:15.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I write my 3 lines of pattern match to work""" start="00:47:17.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with that. And then everywhere throughout""" start="00:47:22.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that document and the hundreds of other""" start="00:47:24.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""documents that will be created with that""" start="00:47:25.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""format, they're all live buttons instantly.""" start="00:47:27.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Nothing changed about the document.""" start="00:47:31.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""That's really cool. You know,""" start="00:47:34.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""word mode, we have global word buttons,""" start="00:47:35.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but mostly it has to be embedded within an""" start="00:47:37.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""org file, right? And follow that syntax.""" start="00:47:42.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""With hyperbole, it's like we can adapt as the""" start="00:47:45.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""world adapts around us to whatever formats""" start="00:47:51.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""people want to use that day.""" start="00:47:55.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And you can even change things to look the""" start="00:47:56.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""way you want, right, and have your own""" start="00:47:59.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""cross-references. There's something built""" start="00:48:02.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""into Hyperbole that's not really active,""" start="00:48:04.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which was sort of along the Zettelkasten way.""" start="00:48:08.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We wrote this a long time ago.""" start="00:48:13.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's called hib-doc.el,""" start="00:48:15.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's a card catalog notion.""" start="00:48:19.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it uses the high rollo in the background""" start="00:48:22.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it lets you create these forms that are""" start="00:48:26.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""cards that you fill out with whatever kind of""" start="00:48:30.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""data you want and then it gives you the full""" start="00:48:32.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""text searching across the cards and each card""" start="00:48:35.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""has a unique ID that you can reference""" start="00:48:38.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""similar to org IDs but these are human""" start="00:48:41.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""readable and human typable and so you can you""" start="00:48:45.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can just have a cross-reference to any doc ID""" start="00:48:49.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and essentially create what Engelbart used to""" start="00:48:52.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""call a journal, which is all these IDs on""" start="00:48:56.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""documents that point you directly to the""" start="00:49:00.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""document archive so that you could have like""" start="00:49:03.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""your internal publishing system and you know""" start="00:49:05.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's very simple to do and it's just 1 module""" start="00:49:10.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""added on to Hyperbole.""" start="00:49:13.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah it's especially interesting for me you""" start="00:49:15.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""know because coming back to the side of""" start="00:49:19.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""convergent evolutions it's funny because the""" start="00:49:21.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""parameters are a little different.""" start="00:49:23.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""For us with org buttons,""" start="00:49:24.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we're very happy. A lot of the stuff during""" start="00:49:26.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""EmacsConf is run with org mode,""" start="00:49:29.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like we have Elisp going everywhere to""" start="00:49:31.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""compile a lot of org properties,""" start="00:49:34.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like speaker information,""" start="00:49:38.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for instance, how long the talk is,""" start="00:49:39.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the title, and all this.""" start="00:49:41.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We have all of this in an org file,""" start="00:49:42.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which we use as a database,""" start="00:49:44.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but then we can do so much stuff.""" start="00:49:46.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We can send email and we can update the""" start="00:49:47.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""schedule. By the way, if you're interested in""" start="00:49:50.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this, we'll have a talk on the DevTrack in""" start="00:49:52.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the afternoon today that Sacha did and it's""" start="00:49:54.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""wonderful. I'm just teasing it.""" start="00:49:56.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, that's great.""" start="00:49:58.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: But coming back to Hyperbole,""" start="00:50:00.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for you, it feels like the parameters were""" start="00:50:01.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""slightly different because the feeling was,""" start="00:50:04.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I just want a tunnel that can work between""" start="00:50:06.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""any type of files. Now,""" start="00:50:09.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's all well and good.""" start="00:50:10.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Org-Rome, D-Note, and all the stuff like""" start="00:50:11.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this, they create bidirectional links.""" start="00:50:14.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But it's only between org-mode files.""" start="00:50:17.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Whereas what you're achieving with Hyperbole,""" start="00:50:19.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you've done it much earlier than everyone""" start="00:50:22.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""else, is that you have this concept""" start="00:50:24.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""regardless of the type of file that you're""" start="00:50:27.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""using. And I find this to be beautiful.""" start="00:50:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Like 5 years ago, whenever you were talking""" start="00:50:32.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""about hyperbole, I did not have a concrete""" start="00:50:35.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""idea of what was happening.""" start="00:50:37.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But ever since I've gone through the journey""" start="00:50:38.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of really understanding what the El Caster""" start="00:50:40.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""method were about, it feels like you were""" start="00:50:42.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""foreigners in the topic.""" start="00:50:45.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Obviously, you've mentioned the mother of all""" start="00:50:46.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""demos by Edward Engelbart,""" start="00:50:48.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but those ideas are not novel,""" start="00:50:50.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it feels like only now are they starting""" start="00:50:54.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to be appropriated by people,""" start="00:50:56.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""especially in free software,""" start="00:50:58.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's really good to see.""" start="00:50:59.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm really excited to,""" start="00:51:01.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well, have my small part to play in this.""" start="00:51:02.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I'm also excited to be able to chat with""" start="00:51:04.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you and people like Bastien and other people""" start="00:51:06.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""about all those topics.""" start="00:51:10.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I think, you know,""" start="00:51:12.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's fun that we can laugh now about when""" start="00:51:13.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""people say people are still using Emacs,""" start="00:51:16.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, is because they're not used,""" start="00:51:20.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""certain people aren't using it.""" start="00:51:22.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""They have no idea of how far it's come and""" start="00:51:24.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""how powerful it is. And,""" start="00:51:26.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, we're leveraging Elisp heavily,""" start="00:51:28.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""obviously, but if you look at the definition""" start="00:51:31.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of our types, they look exactly like DIP""" start="00:51:34.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""funds in ELisp. And we've been able to do""" start="00:51:37.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that because of Lisp macros.""" start="00:51:41.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You know, we so we basically have our own""" start="00:51:43.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""domain specific language there,""" start="00:51:46.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but there's almost nothing to learn because""" start="00:51:48.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's just like what you know from UList.""" start="00:51:51.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So again, you know, taking the concept and""" start="00:51:54.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""leveraging it, abstracting it and leveraging""" start="00:51:57.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it multiple times gives you a lot of power.""" start="00:51:59.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And people, you know, somebody said the other""" start="00:52:03.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""day, and I said, finally,""" start="00:52:06.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""this quote happened. He said,""" start="00:52:07.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""there's so many things that I do with""" start="00:52:11.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole every day that I forget that I'm""" start="00:52:15.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""using hyperbole. Because it's just so""" start="00:52:17.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""embedded in this guy's workflow.""" start="00:52:21.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And that's really how I use it.""" start="00:52:23.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You know, there are features in there,""" start="00:52:25.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""can't use everything, right?""" start="00:52:27.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So there are features that I don't use,""" start="00:52:29.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I use a lot of things and it's all like""" start="00:52:32.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""muscle memory, just like the keyboard,""" start="00:52:35.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the Emacs key bindings.""" start="00:52:38.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it's very exciting to get to that level.""" start="00:52:39.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And now, you know, we haven't started with""" start="00:52:42.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the chatbots or any of the AI integration,""" start="00:52:44.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I'm starting to think about that a little""" start="00:52:47.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bit and how we'll interface to that world and""" start="00:52:49.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I think it's going to be very exciting.""" start="00:52:53.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, likewise and I think it harks back to""" start="00:52:56.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""what we were talking about before when we""" start="00:52:58.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mentioned Hyperbole being a package inside of""" start="00:53:00.660" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""an ecosystem that is Emacs.""" start="00:53:03.700" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But it's not because something is well""" start="00:53:05.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""circumscribed in terms of feature set that it""" start="00:53:08.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""does not influence everything around it.""" start="00:53:10.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Like Hyperbole can be used with something""" start="00:53:12.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""completely at the opposite end of what it was""" start="00:53:15.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""intended for, just because it provides a good""" start="00:53:18.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""set of tools that can be used wherever else""" start="00:53:21.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you want in Emacs. And it's the same thing""" start="00:53:23.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with Org Mode, it's the same thing with many,""" start="00:53:26.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""many different things.""" start="00:53:27.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And it feels like integrating AIs,""" start="00:53:29.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""or generative AIs, into Emacs would provide""" start="00:53:33.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""such a tool that could apply to any kind of""" start="00:53:39.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""other major mode or any kind of other use.""" start="00:53:42.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I'm also excited to see this.""" start="00:53:45.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It feels like we are sitting at the brink of""" start="00:53:46.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a revolution. I'm not going to say the acne""" start="00:53:50.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""stuff, but it definitely feels like right""" start="00:53:52.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""now, by trying to see what we can do with AI,""" start="00:53:54.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it's definitely going to change the way not""" start="00:53:57.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""only we program, but also the way we take""" start="00:53:59.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""notes and the way we design stuff,""" start="00:54:01.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""arcing back to what John Wigley said""" start="00:54:03.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""yesterday about his draft program on macOS.""" start="00:54:05.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Bob, if you don't mind,""" start="00:54:09.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I see people typing questions and I also see""" start="00:54:11.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""people joining on people buttons,""" start="00:54:13.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""so I'm going to read you the 2 questions that""" start="00:54:14.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""have been added. Is that okay?""" start="00:54:16.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Great, go for it.""" start="00:54:19.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, so first question.""" start="00:54:21.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Wow, what you're describing now,""" start="00:54:23.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and that's when you were talking about the""" start="00:54:25.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""bi-directional links and especially the last""" start="00:54:27.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""question in its entirety,""" start="00:54:31.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""What you're describing now reminds me a lot""" start="00:54:33.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""about HyperCard that I grew up on.""" start="00:54:35.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Do you know if Hyperbole inspired Bill""" start="00:54:37.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Atkinson or if you were inspired by""" start="00:54:39.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""HyperCard? Or were there just a lot of""" start="00:54:41.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""thoughts about hyper-contextuality around""" start="00:54:43.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that time?""" start="00:54:44.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Alright, well this is another interesting""" start="00:54:46.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""anecdote. I don't know if it's true or not,""" start="00:54:50.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I think HyperCard predated our stuff.""" start="00:54:52.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It was right around the same time when""" start="00:54:57.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole was starting out.""" start="00:55:00.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But when I was doing the Pi research,""" start="00:55:02.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I worked at, when I left school,""" start="00:55:06.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I worked at Motorola, and we did a lot of""" start="00:55:08.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""work with Apple back then.""" start="00:55:11.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And somebody came back and he said,""" start="00:55:13.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, the people over there have seen""" start="00:55:15.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""your Pi research and they really liked it a""" start="00:55:19.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""lot. And so they were leveraging that when""" start="00:55:21.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""they decided to create the division that they""" start="00:55:26.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""called Apple Pi, which was the originator of""" start="00:55:28.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the Newton which eventually led to the""" start="00:55:33.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""iPhone. So it all kind of is interconnected""" start="00:55:36.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""just like the impact that free software has""" start="00:55:41.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""had around the world. So you never know where""" start="00:55:44.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""your stuff is gonna go or end up.""" start="00:55:47.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. All right, moving on to the next""" start="00:55:51.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""question. Is it possible to only use 1""" start="00:55:53.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feature of hyperbole without the others,""" start="00:55:55.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""i.e. Using only the implicit explicit buttons""" start="00:55:57.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""without I control I roller or without having""" start="00:56:00.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to rewrite part of the code in hyperbole in""" start="00:56:03.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""order to be able to load a smaller hyperbole.""" start="00:56:05.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Does it make sense?""" start="00:56:08.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes we get asked this all the time.""" start="00:56:10.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So you can use any little bit that you want""" start="00:56:12.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""anywhere right you can even just call code""" start="00:56:16.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""from Hyperbole. I mean you don't use""" start="00:56:19.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""everything in Emacs, right?""" start="00:56:23.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But you still install Emacs on your machine.""" start="00:56:25.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's exactly the same thing.""" start="00:56:28.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Those libraries don't take up any memory,""" start="00:56:30.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""they take up a little disk space and it's so""" start="00:56:33.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""trivial compared to the amount of disk we""" start="00:56:36.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""have today. So a lot of things are not loaded""" start="00:56:38.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""unless you activate them.""" start="00:56:41.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And so I know that you do have to build all""" start="00:56:45.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""those things. So maybe that's what bothers""" start="00:56:48.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""people. It takes 2 minutes if you're using,""" start="00:56:51.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it depends how fast your computer is.""" start="00:56:56.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But you build it once on install like every""" start="00:56:58.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""other package. And it used to be that there""" start="00:57:01.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""would be a lot of warnings just because of""" start="00:57:04.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the way we wrote the code and we didn't""" start="00:57:06.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""really have to deal with some of those""" start="00:57:09.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""warnings. But with this new release,""" start="00:57:11.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""we've gotten rid of almost all of them,""" start="00:57:13.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""including the native compiler messages.""" start="00:57:15.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it should be a very clean install now,""" start="00:57:20.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and just use 1 part at a time.""" start="00:57:22.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""But the other parts are there in case you""" start="00:57:26.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""make a link to something and you use a""" start="00:57:29.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""facility just like I was showing as I went""" start="00:57:32.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""across subsystems today.""" start="00:57:34.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It may take you a year,""" start="00:57:36.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but then all of a sudden you find the use""" start="00:57:38.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""case for Hyrule and you say,""" start="00:57:40.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""oh, I'm glad I have it there.""" start="00:57:42.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And yes, some of these things could be split""" start="00:57:44.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""into sub packages like you do in the org""" start="00:57:47.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""ecosystem. But given our limited resources on""" start="00:57:49.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the team, we find having them all in 1 gives""" start="00:57:52.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""us a higher level of quality and lets us""" start="00:57:56.400" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""deliver a better integrated system for your""" start="00:57:59.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""use.""" start="00:58:02.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, exactly. And I think,""" start="00:58:04.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you know, it's, it's not a monolith.""" start="00:58:06.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I mean, it's usually easier,""" start="00:58:10.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""easy, more easy, more easy.""" start="00:58:12.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Sorry, I was right on the first try.""" start="00:58:14.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's usually easier to maintain a monolith""" start="00:58:16.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that contains many bits of functionality like""" start="00:58:20.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""org. You have plenty of people using org""" start="00:58:23.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mode, not using org-agenda,""" start="00:58:25.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for instance, or you've got plenty of people""" start="00:58:27.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""using org-mode and barely using Babel because""" start="00:58:29.142" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it doesn't really translate to their use.""" start="00:58:31.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I feel like I very much agree with you.""" start="00:58:35.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's okay to install a package and only use""" start="00:58:37.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""some of the functions.""" start="00:58:39.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I was reminded, as you were discussing this,""" start="00:58:40.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""of the consults package,""" start="00:58:43.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which is part of the VertiCo,""" start="00:58:45.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mbark and marginalia and all this.""" start="00:58:48.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Consult, it replaces a lot of the Emacs""" start="00:58:51.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""built-in commands like for finding your""" start="00:58:54.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffers or finding text inside of your""" start="00:58:56.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buffer. It's great. And you do not need to""" start="00:58:59.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""completely move to consult as you get""" start="00:59:04.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""started. You can start colonizing 1 step at a""" start="00:59:06.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""time the function that you usually use.""" start="00:59:09.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I highly recommend to people to not let""" start="00:59:12.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the size of a project deter them from trying""" start="00:59:15.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it out because, again,""" start="00:59:18.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in Emacs, everything is horizontal.""" start="00:59:20.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""If somehow you want to use something that was""" start="00:59:23.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""not intended primarily for this,""" start="00:59:28.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""or if you only want to use 10% of a package,""" start="00:59:29.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well, do it. An example that I have for me is""" start="00:59:32.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that Lispy is the minor mode that I use for""" start="00:59:35.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""editing Elisp documents,""" start="00:59:39.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and it's great. Elisp provides similar""" start="00:59:42.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""functions to ParaEdit,""" start="00:59:45.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which might be a little more popular,""" start="00:59:46.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which allows you to have modal editing when""" start="00:59:47.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you are on specific parts of a file,""" start="00:59:50.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""like the opening parenthesis or the closing""" start="00:59:52.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""parenthesis. It's great,""" start="00:59:55.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it provides modal editing for those modes,""" start="00:59:56.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but I certainly do not know everything,""" start="00:59:58.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""every modal command associated to it.""" start="01:00:02.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I just use the 1 that makes the most sense to""" start="01:00:04.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""me. So feel free to explore.""" start="01:00:06.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: I'll just say we get this so much.""" start="01:00:11.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's not that large. I mean there's a fair""" start="01:00:13.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""number of files but it's just like 1 major""" start="01:00:16.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""directory and then the KOutliner directory.""" start="01:00:19.680" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And when you look at these things,""" start="01:00:24.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you install web applications,""" start="01:00:25.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""everything else, just when you download the""" start="01:00:27.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""source code, it's much,""" start="01:00:30.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""much smaller than any of that.""" start="01:00:31.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So I don't know why people you know accept""" start="01:00:34.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that it's larger than your typical package.""" start="01:00:37.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Why there's really an issue there.""" start="01:00:39.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: I think it's because people tend to assume""" start="01:00:43.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that a paradigm like the 1 you're describing,""" start="01:00:46.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""which seems to be changing the way you use""" start="01:00:48.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Emacs in a way because you're no longer""" start="01:00:51.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""thinking of as buffers as separate entities,""" start="01:00:53.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can tunnel between them.""" start="01:00:56.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You know, it feels like a huge paradigm shift""" start="01:00:57.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you assume that the code behind it is""" start="01:01:00.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""going to be humongous as well,""" start="01:01:02.300" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but it's usually not the case.""" start="01:01:04.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It's just that the idea is very pure at the""" start="01:01:05.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""start, and the paradigm shift that it allows""" start="01:01:07.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is also magnificent. But at the end of the""" start="01:01:10.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""day, the code is fairly simple,""" start="01:01:14.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""because it does 1 thing and it does it well.""" start="01:01:16.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: 1 thing I noticed too,""" start="01:01:19.780" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I mean I'm a big believer in turnkey kind of""" start="01:01:21.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""systems. In fact a long time ago when I built""" start="01:01:23.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""an IDE on Emacs called InfoDoc that was""" start="01:01:27.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""delivered pre-compiled.""" start="01:01:31.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So it's like you download it like every other""" start="01:01:33.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""app and you run it. And so I think""" start="01:01:35.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""eliminating all the friction that occurs,""" start="01:01:39.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and you know, I just got going recently with""" start="01:01:42.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the wonderful packages that you just""" start="01:01:46.380" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mentioned, VertiCo and Consult,""" start="01:01:49.160" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but they don't have a manual that covers all""" start="01:01:51.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that. They use sort of like a cookbook,""" start="01:01:55.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""a wiki online to answer a lot of the""" start="01:01:58.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""questions that people have and everybody has""" start="01:02:02.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to figure out their configurations you know""" start="01:02:04.600" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""to make these things all work together.""" start="01:02:07.640" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We'd like to do that engineering and say here""" start="01:02:12.800" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it is you know it's like if you want to""" start="01:02:16.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""configure it and make it your own,""" start="01:02:18.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you can do it. But there is a default""" start="01:02:20.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""configuration that handles all the typical""" start="01:02:23.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""use cases and you can just load it up and run""" start="01:02:26.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""because it's made to use,""" start="01:02:30.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you don't have to hack it to make it useful""" start="01:02:32.840" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for you.""" start="01:02:36.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it reminds me of the discussion we had""" start="01:02:37.900" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""with Stéphane yesterday about sane defaults.""" start="01:02:40.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And I think the question was,""" start="01:02:43.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Emacs should probably ship with sane defaults""" start="01:02:46.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""for people. And Stéphane's answer was,""" start="01:02:49.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well, my sane defaults might not be the same""" start="01:02:51.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""thing as your sane defaults.""" start="01:02:53.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And that's why I think it's important,""" start="01:02:55.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""really, to have a core set of features,""" start="01:02:57.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""be it with hyperbole of org mode,""" start="01:02:59.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""that is well-documented,""" start="01:03:01.360" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""as you mentioned. But what I like about this""" start="01:03:02.880" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in a way, and I think hyperbole is perhaps""" start="01:03:05.460" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""taking more benefits of this than Org Mode,""" start="01:03:07.260" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is that the self-documentation aspect of it""" start="01:03:09.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""feels like it's easier with hyperbole because""" start="01:03:12.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you're not bound by Org Mode buffers.""" start="01:03:14.540" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You can link to just about everything.""" start="01:03:17.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""And for me, this ability to self-document is,""" start="01:03:19.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""well, first, very true to the philosophy of""" start="01:03:24.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Emacs in the first place,""" start="01:03:26.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""but also opens up those resonance cycles""" start="01:03:27.500" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""where, oh, you get interested and then you""" start="01:03:32.020" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""start reading up and then the documentation""" start="01:03:34.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""is so good that it feeds into your practice""" start="01:03:35.820" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""and then it goes nuclear and you gain so much""" start="01:03:38.320" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""knowledge as a result of this.""" start="01:03:41.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""All right, Bob, we are about out of time.""" start="01:03:42.620" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""We only have about 1 minute until we go to""" start="01:03:44.480" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the next talk. Do you have any passing words?""" start="01:03:46.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: I do. I think, you know,""" start="01:03:50.180" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""the world's complex, it's getting more""" start="01:03:54.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""complex. I think that's why people use Emacs""" start="01:03:57.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""in the first place, because it's a big""" start="01:04:00.520" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""system. You wouldn't use it unless you wanted""" start="01:04:02.560" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it to simplify your life.""" start="01:04:04.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Hyperbole is built with the same idea in""" start="01:04:07.580" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""mind. You may not get it just like Lisp.""" start="01:04:10.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""A lot of people don't understand when they""" start="01:04:13.740" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""first encounter it, but when they do""" start="01:04:15.720" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""understand it, they're blown away.""" start="01:04:17.420" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""It changes their life.""" start="01:04:19.960" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""You know, when you really understand implicit""" start="01:04:22.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""buttons, I think that's 1 of the things in""" start="01:04:25.120" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""hyperbole that can change your Emacs working""" start="01:04:28.100" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""life. So just give that a try and I think""" start="01:04:30.860" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you'll be pleasantly surprised across time.""" start="01:04:34.080" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: you so much Bob. We'll be moving on to the""" start="01:04:39.220" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""next talk in about 20 seconds so everyone see""" start="01:04:40.920" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""you in a bit and Bob thank you so much again.""" start="01:04:42.980" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Thanks very much. And thank Thank you.""" start="01:04:37.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: All right I think we are off here now.""" start="01:04:51.140" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""So thank you so much, Bob.""" start="01:04:53.040" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm going to need to step out and get ready""" start="01:04:53.940" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, do your thing. You do a great job at""" start="01:04:56.609" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""it. But I wanted to ask you where in London""" start="01:04:59.240" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: for the next talk. I'm not in London,""" start="01:04:55.440" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""I'm in France, and I just moved to London.""" start="01:05:05.280" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 0]: you are. Oh, okay, got it.""" start="01:05:01.760" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Sorry, I thought you were.""" start="01:05:11.200" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Take care.""" start="01:05:13.000" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, bye-bye, Bob.""" start="01:05:14.340" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Thanks a lot. Bye-bye.""" start="01:05:15.060" video="mainVideo-hyperamp" id="subtitle"]] +[[!template text="""Bye-bye.""" start="01:05:15.750" video="mainVideo-hyperamp" id="subtitle"]] + +Questions or comments? Please e-mail [rsw@gnu.org](mailto:rsw@gnu.org?subject=Comment%20for%20EmacsConf%202023%20hyperamp%3A%20Top%2010%20ways%20Hyperbole%20amps%20up%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/hyperamp-before.md b/2023/info/hyperamp-before.md new file mode 100644 index 00000000..12a070f0 --- /dev/null +++ b/2023/info/hyperamp-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 66-min talk; Q&A: BigBlueButton conference room +Status: TO_REVIEW_QA + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="hyperamp-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 1:05:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4Cpb89zHKgQjob3gHUs73C">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/hyperamp-nav.md b/2023/info/hyperamp-nav.md new file mode 100644 index 00000000..f56bde9c --- /dev/null +++ b/2023/info/hyperamp-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/core">Emacs core development: how it works</a> +Next by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/hyperdrive-after.md b/2023/info/hyperdrive-after.md new file mode 100644 index 00000000..8c26acc8 --- /dev/null +++ b/2023/info/hyperdrive-after.md @@ -0,0 +1,1338 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="hyperdrive-mainVideo-transcript"></a> +# Transcript + +[[!template text="""Hello, I'm Joseph Turner.""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This talk is about hyperdrive.el,""" start="00:00:02.600" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""peer-to-peer file system in Emacs.""" start="00:00:05.107" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrive is a JavaScript library""" start="00:00:09.100" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""developed by the Holepunch team""" start="00:00:11.480" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for sharing files on a peer-to-peer network.""" start="00:00:13.360" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's released under the Apache 2.0 license.""" start="00:00:16.500" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Hyperdrives introduction""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Here's how it works.""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""To participate as a peer, you run a node,""" start="00:00:21.640" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""a lightweight local server that allows you""" start="00:00:24.581" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to connect with other nodes on the network.""" start="00:00:27.281" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can create a hyperdrive or multiple hyperdrives,""" start="00:00:29.960" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and you can author files within them.""" start="00:00:33.123" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Each hyperdrive is automatically assigned""" start="00:00:36.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""a globally unique link""" start="00:00:38.700" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that starts with `hyper://`.""" start="00:00:40.906" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""When you share that link with someone,""" start="00:00:44.580" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""they have access to your hyperdrive.""" start="00:00:47.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Anyone who has that link can load the hyperdrive""" start="00:00:49.160" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""from the network and view its content.""" start="00:00:52.820" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""When you load a Hyperdrive file from the network,""" start="00:00:56.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""your node caches that data locally""" start="00:00:59.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and automatically begins seeding it""" start="00:01:02.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""back to the network,""" start="00:01:04.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""making it available for others to download from you.""" start="00:01:05.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are single writer.""" start="00:01:12.620" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that when you create a new drive,""" start="00:01:14.520" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you are the only one who can make changes to it.""" start="00:01:16.880" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Others can view it""" start="00:01:19.720" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and can seed it back to the network,""" start="00:01:21.267" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but you're the only one who can modify it.""" start="00:01:23.800" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are offline first.""" start="00:01:27.340" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that when you load data from the network,""" start="00:01:29.740" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it's stored locally on your machine""" start="00:01:33.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for you to view later,""" start="00:01:34.900" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""even when you're disconnected from other peers.""" start="00:01:36.180" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can also create new drives""" start="00:01:38.800" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and modify your drives when you're offline,""" start="00:01:40.800" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then share those changes""" start="00:01:43.600" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""once you connect with peers later.""" start="00:01:45.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are local first.""" start="00:01:47.920" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that when you are connected with""" start="00:01:50.300" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""other peers on a local area network,""" start="00:01:52.400" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""even if none of the peers involved""" start="00:01:54.740" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""are connected to the broader Internet,""" start="00:01:56.940" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can still share files.""" start="00:01:58.980" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are sparsely replicated.""" start="00:02:02.060" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that you can download individual files""" start="00:02:04.800" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""from a hyperdrive without having to download""" start="00:02:07.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the whole thing.""" start="00:02:10.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This saves on disk space and also allows you""" start="00:02:11.720" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to quickly load just the files""" start="00:02:15.471" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that you're interested in.""" start="00:02:17.233" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are mutable.""" start="00:02:20.540" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can add files, change files,""" start="00:02:22.467" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""remove files from a hyperdrive.""" start="00:02:25.500" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And when peers load your drive""" start="00:02:28.120" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""using the very same link,""" start="00:02:30.667" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""they will be able to load""" start="00:02:32.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the latest changes that you've published.""" start="00:02:34.025" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrives are versioned.""" start="00:02:37.320" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that when you make changes to a file,""" start="00:02:39.460" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the previous versions of those files are not lost.""" start="00:02:42.429" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Peers can load the old versions of a file""" start="00:02:46.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that was changed or deleted, for example,""" start="00:02:49.360" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""simply by specifying the version number""" start="00:02:52.440" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""of the hyperdrive when the file still existed""" start="00:02:55.067" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or existed in a previous state.""" start="00:02:58.167" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""About USHIN and the contributors""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""I'm presenting this talk on behalf of USHIN.""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""USHIN is a tiny nonprofit whose mission is to""" start="00:03:07.380" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""promote personal, community and global health""" start="00:03:10.680" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""through free and open universal shared information""" start="00:03:14.032" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for everybody.""" start="00:03:17.367" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""USHIN was founded in the early 90s""" start="00:03:19.700" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""by Paula Maas, Steve Nash and others""" start="00:03:21.551" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""with the goal of creating""" start="00:03:24.860" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""a distributed health information network""" start="00:03:26.400" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that would allow people to find, share, compare""" start="00:03:29.131" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and deliberate health information""" start="00:03:33.429" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""from a variety of sources.""" start="00:03:35.667" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Since then, the scope of the project has broadened""" start="00:03:37.780" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to include all kinds of information.""" start="00:03:40.700" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And in recent years, we've been focusing on""" start="00:03:43.260" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""building with peer-to-peer software.""" start="00:03:45.780" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""About three years ago,""" start="00:03:49.500" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""we started working with Mauve Signweaver,""" start="00:03:50.534" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""who has since then been our steadfast""" start="00:03:52.634" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""peer-to-peer explorer and guide.""" start="00:03:54.767" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This year, we started working on""" start="00:03:58.260" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""this hyperdrive.el Emacs package,""" start="00:04:00.080" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and Adam has been the powerhouse""" start="00:04:02.800" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""behind the Emacs Lisp development.""" start="00:04:05.060" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""About a month ago,""" start="00:04:08.080" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Jonas Bernoulli started joining with us,""" start="00:04:08.967" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and he has been offering his expertise""" start="00:04:11.100" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the realm of user interface design""" start="00:04:14.420" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""using his Transient library.""" start="00:04:15.640" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And Protesilaos Stavrou has been not only valuable""" start="00:04:18.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in terms of user design and feedback,""" start="00:04:22.140" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but he created a wonderful""" start="00:04:25.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""basic introduction to Hyperdrive. Take a look.""" start="00:04:27.120" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Basic introduction to Hyperdrive""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""[Prot]: Hello everyone!""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""My name is Protesilaos, also known as Prot.""" start="00:04:33.586" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In this video, I want to show you""" start="00:04:36.366" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the basics of hyperdrive.el.""" start="00:04:37.806" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is a package for Emacs that lets us connect to""" start="00:04:40.746" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the Hyperdrive peer-to-peer network.""" start="00:04:44.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We can browse existing drives on the network,""" start="00:04:47.833" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""meaning existing file systems,""" start="00:04:51.573" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or create and maintain our own hyperdrive,""" start="00:04:53.880" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to which we can add, remove or edit files.""" start="00:04:59.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We will see this together.""" start="00:05:03.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What I have here in front of me is a basic""" start="00:05:05.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""use-package declaration for hyperdrive.el.""" start="00:05:08.733" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""All I am doing is binding `hyperdrive-menu`""" start="00:05:12.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to a key and also activating""" start="00:05:16.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the menu bar entry of hyperdrive.""" start="00:05:19.793" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me show you very quickly, `hyperdrive-menu`.""" start="00:05:23.613" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And this is the sort of interface that it brings up.""" start="00:05:26.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We will take a closer look at it.""" start="00:05:31.293" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""As for the menu bar,""" start="00:05:33.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""we have `hyperdrive-menu` over here,""" start="00:05:35.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and we will take a look at this as well.""" start="00:05:41.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Suffice to say that""" start="00:05:44.193" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can get the same functionality""" start="00:05:45.693" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""with the menu bar or with `hyperdrive-menu`,""" start="00:05:48.273" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as by calling the commands directly""" start="00:05:51.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""with `M-x` or their respective key bindings.""" start="00:05:55.893" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I won't cover everything in that regard,""" start="00:06:00.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but please bear this fact in mind.""" start="00:06:02.980" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Managing files with Hyperdrive.el""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Let's start then with what I have here""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in this other tab, which is a set of files.""" start="00:06:09.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I have prepared in my local file system - a hyperdrive.""" start="00:06:13.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This contains a set of files""" start="00:06:18.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I ultimately want to share""" start="00:06:20.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""on the peer-to-peer network,""" start="00:06:22.653" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""meaning that I want this to eventually be""" start="00:06:24.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""reflected in my own hyperdrive.""" start="00:06:28.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What I did to get started is""" start="00:06:31.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I invoked `hyperdrive-menu`.""" start="00:06:34.054" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The very first thing you need to do""" start="00:06:36.493" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to get started with Hyperdrive,""" start="00:06:38.573" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""either to browse or to create,""" start="00:06:40.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is to start the gateway,""" start="00:06:43.633" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""meaning to be able to connect to""" start="00:06:46.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the peer-to-peer network.""" start="00:06:48.693" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You see here in `hyperdrive-menu` that there is""" start="00:06:50.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""an indicator next to the "Gateway" heading""" start="00:06:53.493" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""telling me that the gateway is on.""" start="00:06:56.293" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I started it with `G` and then `s`.""" start="00:06:59.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Once you start it,""" start="00:07:04.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can type `h` to visit an existing drive,""" start="00:07:06.573" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""`N` to create a drive,""" start="00:07:10.153" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or `L` to open a link to an existing hyperdrive.""" start="00:07:12.113" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You may get this link via email, for example.""" start="00:07:17.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In this case, let me be over here""" start="00:07:21.154" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and let me just kill this buffer.""" start="00:07:24.933" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What I want in this case is to select a hyperdrive.""" start="00:07:27.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You see here I have my own hyperdrive""" start="00:07:32.953" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and also the hyperdrive of USHIN,""" start="00:07:35.453" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the developers of hyperdrive.el.""" start="00:07:37.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What I want to do in this case,""" start="00:07:41.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you see there are various options available.""" start="00:07:43.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I want to type `v` to view a file.""" start="00:07:46.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And in this case,""" start="00:07:50.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will just type the forward slash,""" start="00:07:50.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which means to view the root directory""" start="00:07:53.633" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""of this hyperdrive. And I am here.""" start="00:07:56.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It is an empty drive apart from""" start="00:08:00.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""my credentials over here.""" start="00:08:04.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""There is nothing more really to see.""" start="00:08:06.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But what I want to do is""" start="00:08:10.113" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to start adding files to this drive.""" start="00:08:12.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me use the menu bar for this.""" start="00:08:15.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will hover over to the menu bar,""" start="00:08:18.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I will find the "Hyperdrive" submenu.""" start="00:08:21.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Then I will go find where the drives are.""" start="00:08:24.773" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And you see that there are writable drives,""" start="00:08:27.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""meaning drives that I manage,""" start="00:08:30.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and read-only drives, meaning drives of other users.""" start="00:08:32.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In this case, USHIN is read-only, of course,""" start="00:08:37.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and Protesilaos is writable.""" start="00:08:40.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So what I want to do is upload a file to Protesilaos.""" start="00:08:42.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And it prompts me in the Minibuffer for a file.""" start="00:08:48.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will just add the README.""" start="00:08:52.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It is asking me, "Where do you want to add it?"""" start="00:08:55.293" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And in square brackets, the default is to add it""" start="00:08:58.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to the root directory of the hyperdrive.""" start="00:09:00.553" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I will just type `RET` to select the default.""" start="00:09:03.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And there it is. It is already in the drive.""" start="00:09:07.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me add the COPYING file as well,""" start="00:09:11.393" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""using the same method.""" start="00:09:14.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will go find my drive. "Upload File."""" start="00:09:16.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And let's add the COPYING.""" start="00:09:21.393" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And I also want to add it to the root directory.""" start="00:09:23.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So already I have two files.""" start="00:09:29.433" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is looking good.""" start="00:09:30.633" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now I am opening the file inside of hyperdrive.""" start="00:09:31.953" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is not the same file""" start="00:09:37.014" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as I have in my local directory.""" start="00:09:39.033" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What I can do here, for example, is I can...""" start="00:09:42.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me open another file here, the COPYING.""" start="00:09:47.433" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I can create an Org link.""" start="00:09:49.893" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Notice that these are Org files.""" start="00:09:52.113" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I will use the standard `org-store-link` command.""" start="00:09:54.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can see the key binding I invoked""" start="00:09:58.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and the command it calls""" start="00:10:01.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""on the top right corner of my screen.""" start="00:10:03.533" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So what I did is""" start="00:10:05.893" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I copied a link to this hyperdrive file.""" start="00:10:07.413" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And in this other file over here,""" start="00:10:11.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I want to say "Free/libre."""" start="00:10:15.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I am editing my hyperdrive terms:""" start="00:10:22.153" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text=""""Check the," and I will paste the link here,""" start="00:10:27.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text=""""for how to use my files."""" start="00:10:35.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If we check what is here,""" start="00:10:40.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you will see that this is a link""" start="00:10:44.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""inside of the hyperdrive.""" start="00:10:47.813" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And it's pointing specifically""" start="00:10:50.880" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to that heading over there,""" start="00:10:52.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which has this unique identifier,""" start="00:10:54.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as you can see over here.""" start="00:10:58.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So this is wonderful.""" start="00:11:00.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I want to rename it to "Check the COPYING""" start="00:11:03.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for how to use my files."""" start="00:11:09.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will save this.""" start="00:11:11.953" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now what I want to do is,""" start="00:11:13.933" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I want to invoke `hyperdrive-menu`.""" start="00:11:16.840" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And you will see now the menu, unlike earlier,""" start="00:11:20.493" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""has more commands, more stuff we can do with it.""" start="00:11:23.153" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For example, I can type `w` to copy a URL.""" start="00:11:27.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And by typing `w`, you will notice...""" start="00:11:31.793" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me go to the `*scratch*` buffer to paste this in.""" start="00:11:34.500" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You will notice what the URL is.""" start="00:11:37.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It is my hyperdrive, my unique identifier,""" start="00:11:40.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then forward slash, meaning the root directory,""" start="00:11:44.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then README.org.""" start="00:11:47.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""That is the file I was editing.""" start="00:11:49.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's do `hyperdrive-menu` again.""" start="00:11:54.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's remove the `*scratch*` buffer.""" start="00:11:56.573" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And let's do `hyperdrive-menu`.""" start="00:11:58.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And you will notice that there are options""" start="00:11:59.933" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to download the file, for example.""" start="00:12:02.380" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If you are reading somebody else's file,""" start="00:12:05.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can download it to your own file system.""" start="00:12:07.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me do that. "Download."""" start="00:12:10.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And it is asking me, "Where do you want to save this?"""" start="00:12:12.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For now, I will save it in the `/tmp/`, like this.""" start="00:12:14.753" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's call it test.org.""" start="00:12:20.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Okay, `/tmp/test.org`.""" start="00:12:23.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me go and visit `test.org`.""" start="00:12:25.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And there it is.""" start="00:12:29.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It downloaded it just like that.""" start="00:12:30.280" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is how you can, for example,""" start="00:12:32.653" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""download the pictures and videos""" start="00:12:35.373" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I will eventually share on my hyperdrive.""" start="00:12:38.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's invoke `hyperdrive-menu` again.""" start="00:12:42.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And let's go up to the parent, you see,""" start="00:12:44.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""with the caret (`^`) sign.""" start="00:12:48.053" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This will take me to the parent directory,""" start="00:12:50.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in this case, the root directory of my hyperdrive.""" start="00:12:53.173" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Dired like interface""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Let me do it a bit differently.""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The same idea, a bit differently.""" start="00:12:58.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For those of you who are familiar with""" start="00:13:00.193" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Dired and the `dired-jump` command,""" start="00:13:02.733" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Dired is the standard file manager of Emacs.""" start="00:13:05.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And `dired-jump` is a command that lets you jump""" start="00:13:08.753" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""from the current file""" start="00:13:13.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to the directory that contains that file.""" start="00:13:14.593" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So you see, I am here.""" start="00:13:18.653" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The `dired-jump` command, by default,""" start="00:13:20.733" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is bound to Ctrl-x, Ctrl-j (`C-x C-j`).""" start="00:13:22.553" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So if I do `C-x C-j`, in this case,""" start="00:13:25.233" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it invokes a command.""" start="00:13:29.433" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can see the name of it, `hyperdrive-up`,""" start="00:13:30.773" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which is functionally equivalent to `dired-jump`.""" start="00:13:33.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It does the same thing, meaning that it took me""" start="00:13:37.733" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to the parent directory of this file.""" start="00:13:41.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I think this is very helpful.""" start="00:13:45.253" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This listing over here, in general,""" start="00:13:48.253" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""tries to mimic or to reuse""" start="00:13:50.693" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the knowledge you already have of Dired.""" start="00:13:55.273" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For example, if you type `o`,""" start="00:13:58.553" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it will open the file at point in the other window,""" start="00:14:01.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""same as in Dired.""" start="00:14:05.313" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Whereas if you type `RET`,""" start="00:14:07.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it would open it in the current window.""" start="00:14:08.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Again, same as what you will do in Dired.""" start="00:14:11.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's see over here.""" start="00:14:16.253" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You have options to jump with `j`,""" start="00:14:18.014" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which is using Minibuffer completion to go to a file.""" start="00:14:21.643" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Right now, I only have two files,""" start="00:14:26.233" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but the idea is the same.""" start="00:14:28.433" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's, again, what you would do in Dired""" start="00:14:32.100" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""if you type `j` with the default key bindings, though,""" start="00:14:34.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""not with Evil mode or something else.""" start="00:14:37.333" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let's see again what we have over here.""" start="00:14:40.293" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can create a bookmark, and this will work,""" start="00:14:42.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but no need to show you everything.""" start="00:14:45.934" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The idea is that you create a bookmark""" start="00:14:48.554" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the way you create any Emacs bookmark,""" start="00:14:50.694" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to a file, to a directory.""" start="00:14:53.214" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It doesn't matter.""" start="00:14:54.933" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then you can jump to it,""" start="00:14:55.994" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the way bookmarks in Emacs always work.""" start="00:14:57.734" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""History in hyperdrive""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""What I want to show you now""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""a little bit is the history.""" start="00:15:02.893" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""History in Hyperdrive""" start="00:15:06.313" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""has to do with the drive itself.""" start="00:15:09.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Meaning that individual files""" start="00:15:11.434" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""do not have their own history,""" start="00:15:13.614" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but the drive as such has a history.""" start="00:15:15.314" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Whenever you add a file, you remove a file,""" start="00:15:18.674" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or you edit a file, you are incrementing""" start="00:15:22.014" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the versioning of the hyperdrive by one.""" start="00:15:25.673" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So each action corresponds to one unit of history.""" start="00:15:29.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If you add a file, remove a file, and edit a file,""" start="00:15:34.574" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""this means that you are up three versions.""" start="00:15:37.833" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So whatever your version number is, plus three.""" start="00:15:40.993" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I am on version 24* over here. [* latest, not version 24]""" start="00:15:44.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me go to this file now,""" start="00:15:48.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and let me do `V h`""" start="00:15:55.933" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to see a history of it.""" start="00:15:59.793" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You will notice that between versions 23 and 24,""" start="00:16:02.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""this file was constant.""" start="00:16:07.553" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But in version 25, we have a change.""" start="00:16:09.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""When you are in this buffer over here,""" start="00:16:12.633" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can type the equals sign (`=`),""" start="00:16:14.353" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which is a key binding that will bring up the diff.""" start="00:16:17.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the set of changes between""" start="00:16:22.373" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the previous version and the current version.""" start="00:16:24.473" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And you see here, between versions 23 and 25,""" start="00:16:27.033" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I have this addition.""" start="00:16:32.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I think this is wonderful because now""" start="00:16:35.093" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can always go and check""" start="00:16:38.373" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""what is the state of this file.""" start="00:16:41.173" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What is this person up to?""" start="00:16:42.413" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What have they been changing?""" start="00:16:43.853" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And with Hyperdrive, you can also visit…""" start="00:16:46.313" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me go to the parent here.""" start="00:16:50.793" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""You can always visit a previous history.""" start="00:16:58.514" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So, for example, I will go to the previous history,""" start="00:17:02.413" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and let me see this file again""" start="00:17:06.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in its previous history.""" start="00:17:08.033" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I am looking at the file,""" start="00:17:09.554" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but notice that the file now is not editable""" start="00:17:11.094" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""because this is in the past.""" start="00:17:15.154" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I cannot rewrite history.""" start="00:17:17.354" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I can only go to the present and then modify it""" start="00:17:19.314" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then create a new history, a new version.""" start="00:17:23.414" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But this helps me see the state of the file""" start="00:17:27.214" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""at that version of the hyperdrive.""" start="00:17:31.214" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So this is the basic idea of it, folks.""" start="00:17:35.973" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Use case of sharing large files""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""What I want to do then is""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""continue with my process here.""" start="00:17:42.234" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Let me actually do it like this so that you can see.""" start="00:17:46.254" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Continue with the process of""" start="00:17:51.973" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""publishing all those files""" start="00:17:54.374" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I have on my hyperdrive.""" start="00:17:56.494" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For example, this is a picture of a flower""" start="00:17:59.754" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I have taken.""" start="00:18:02.854" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I think it's very nice.""" start="00:18:04.114" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And this is a video of an eagle""" start="00:18:05.734" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that was flying above me.""" start="00:18:08.033" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And I will share this on the Hyperdrive network.""" start="00:18:09.594" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""From the network, by the way,""" start="00:18:13.774" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you can also stream video as well.""" start="00:18:15.733" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It is described in the hyperdrive.el manual,""" start="00:18:18.453" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but I cannot show you everything right now.""" start="00:18:20.694" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I think you get the idea.""" start="00:18:24.253" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The gist is, you have a file system""" start="00:18:26.513" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that you can share with the world""" start="00:18:29.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""using peer-to-peer technology.""" start="00:18:31.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And for me, this is a powerful tool.""" start="00:18:34.133" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is a valuable proposition""" start="00:18:38.520" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""because I can share these large files I have,""" start="00:18:41.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""these pictures or videos,""" start="00:18:45.013" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which I cannot post on my website""" start="00:18:47.433" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""due to bandwidth considerations.""" start="00:18:49.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And this way, I can still share with the world""" start="00:18:52.713" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""something that I consider interesting.""" start="00:18:55.593" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""That's all for today, folks.""" start="00:18:59.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Thank you very much for your attention.""" start="00:19:00.213" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Remember that hyperdrive.el is still in development""" start="00:19:01.894" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and things may change.""" start="00:19:05.514" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But the fundamentals are in place""" start="00:19:07.394" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and will remain constant.""" start="00:19:10.313" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""That's all for today. Take care. Goodbye.""" start="00:19:13.073" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""[Joseph]: Thank you, Prot.""" start="00:19:19.461" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Drive creation with hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Another fundamental feature of hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is drive creation.""" start="00:19:23.980" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The first step, as always,""" start="00:19:26.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is to make sure that the gateway is running.""" start="00:19:28.339" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll open up `hyperdrive-menu` with `C-c h`.""" start="00:19:30.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""By the way, my key presses,""" start="00:19:35.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as the commands that they run,""" start="00:19:36.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""can be seen at the top right of my screen.""" start="00:19:38.699" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Down here, I see that the gateway is off.""" start="00:19:42.439" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll start it with `G s`.""" start="00:19:44.619" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now, it takes a few moments""" start="00:19:49.139" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for the gateway to spin up.""" start="00:19:50.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So to refresh the menu,""" start="00:19:52.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I will close it and open it again.""" start="00:19:54.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now we see that the gateway is on.""" start="00:19:58.399" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `N` to create a new drive.""" start="00:20:01.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now it's prompting me for a new hyperdrive seed.""" start="00:20:05.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""A seed is a string of characters""" start="00:20:09.759" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that will be used to generate,""" start="00:20:12.939" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in tandem with my secret master key,""" start="00:20:14.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""a new public key that will globally,""" start="00:20:18.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""uniquely identify this drive.""" start="00:20:21.339" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll type in "emacsconf".""" start="00:20:24.879" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And after a moment,""" start="00:20:31.759" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""we see the newly created, empty drive.""" start="00:20:32.659" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll open up `hyperdrive-menu` once more.""" start="00:20:36.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And I'll press `h` to open the sub-menu that shows""" start="00:20:40.099" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""more information about this hyperdrive,""" start="00:20:43.799" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as commands related to this drive.""" start="00:20:45.979" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In blue here, we see the seed that I just entered""" start="00:20:50.879" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as the public key that it generated.""" start="00:20:54.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We also see that the petname""" start="00:21:00.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is also set to emacsconf.""" start="00:21:02.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The petname is different from the seed.""" start="00:21:06.540" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The petname is my personal, local identifier""" start="00:21:09.039" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for this drive.""" start="00:21:13.079" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I can change it whenever I want.""" start="00:21:14.679" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And while it's not a secret,""" start="00:21:16.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it's not displayed to other users.""" start="00:21:19.739" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I will leave it for now.""" start="00:21:23.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text=""""emacsconf" is fine.""" start="00:21:26.360" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But when I go to share this drive,""" start="00:21:28.139" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll want to display something more memorable""" start="00:21:30.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""than this long public key.""" start="00:21:34.159" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And that's what the nickname is for.""" start="00:21:36.879" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll change that by pressing `n`,""" start="00:21:39.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll type in "Emacs Conference".""" start="00:21:42.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now, when other peers load this hyperdrive""" start="00:21:48.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""by its URL, which I can copy by pressing `w`,""" start="00:21:51.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""they will see the nickname""" start="00:21:57.059" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in addition to the public key.""" start="00:21:59.499" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So if hyperdrive.el is like a phone book,""" start="00:22:02.019" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the public keys are akin to phone numbers,""" start="00:22:05.720" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the nickname is like the name that your contacts""" start="00:22:09.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""give you when they introduce themselves,""" start="00:22:13.939" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and the petname is the name""" start="00:22:16.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that you actually write down in your phone book.""" start="00:22:18.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll show you what nicknames and petnames look like""" start="00:22:22.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for drives that are not writable to me.""" start="00:22:25.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `C-g` to close this submenu,""" start="00:22:29.619" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and now I'm back at the main menu.""" start="00:22:32.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `C-u h` to choose a hyperdrive,""" start="00:22:34.639" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll look at Prot's hyperdrive here.""" start="00:22:39.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And here we see that the nickname""" start="00:22:44.559" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""of Prot's hyperdrive is "Protesilaos".""" start="00:22:46.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now, it's grayed out,""" start="00:22:49.839" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which means that I can't change it.""" start="00:22:50.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I can't change it because it's not my hyperdrive.""" start="00:22:53.239" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But I can change the petname if I want it""" start="00:22:56.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to show up under a different name.""" start="00:22:58.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll press `p`,""" start="00:23:00.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll type in "Prot", and hit Enter.""" start="00:23:02.439" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now I'll open his hyperdrive by pressing `f`.""" start="00:23:06.679" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And I'll pick a path, I'll just hit `RET`""" start="00:23:11.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to open the root directory.""" start="00:23:13.899" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now, when Prot's hyperdrive shows up,""" start="00:23:16.759" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""at the top of the screen,""" start="00:23:19.459" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I see that it's identified with the petname "Prot."""" start="00:23:20.539" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""hyperdrive-mirror""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Now I'll show off `hyperdrive-mirror`.""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""`hyperdrive-mirror` is like `hyperdrive-upload-file`,""" start="00:23:28.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""except that it allows you to upload""" start="00:23:32.159" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""an entire directory full of files recursively.""" start="00:23:33.879" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For this example, I will upload""" start="00:23:37.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the contents of the emacsconf-mirror directory.""" start="00:23:40.039" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""First step is to open the menu. I'll press H,""" start="00:23:44.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then I will choose the emacsconf drive.""" start="00:23:48.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In the bottom here, we see the Mirror group.""" start="00:23:53.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The first option that I can change""" start="00:23:57.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is the source directory.""" start="00:23:59.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The source directory is the directory on my local""" start="00:24:01.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""machine from which files will be uploaded.""" start="00:24:04.619" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""By default, the source directory""" start="00:24:08.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is set to the current directory of the main buffer.""" start="00:24:11.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This is good for now, so I'll leave it.""" start="00:24:17.060" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The target directory is the directory""" start="00:24:19.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the hyperdrive where the files will end up.""" start="00:24:22.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""By default, it's the root directory,""" start="00:24:25.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but for this example,""" start="00:24:28.839" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll put these files in a subdirectory called notes.""" start="00:24:30.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The filter is the rule that allows you""" start="00:24:36.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to programmatically determine which files""" start="00:24:40.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the local directory will be uploaded""" start="00:24:43.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""into the hyperdrive, and which ones won't.""" start="00:24:46.579" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""By default, all files are mirrored, but in this case,""" start="00:24:50.339" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""let's say that I want to upload only the Org files,""" start="00:24:54.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""these first three, and I want to exclude""" start="00:24:58.499" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the markdown file, solar-oven-notes.md.""" start="00:25:01.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll press `m f`, and I will choose""" start="00:25:05.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the regular expression string option.""" start="00:25:10.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If I wanted to, I could choose a named function""" start="00:25:13.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or a lambda, but I won't demo that here.""" start="00:25:16.279" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll type in `org$`, which will match against""" start="00:25:22.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the files that end with "org."""" start="00:25:26.339" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The filter is here, and I'll leave confirmation on.""" start="00:25:31.659" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The confirmation step just allows me to review""" start="00:25:35.899" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the list of files that are going to be uploaded""" start="00:25:39.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""into the drive before it happens.""" start="00:25:42.139" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll press `m m` to mirror them, and I see here""" start="00:25:45.899" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that these three files are going to be uploaded.""" start="00:25:52.879" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Looks good. I'll press `C-c C-c` to confirm the mirror.""" start="00:25:58.439" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now it says three files have been uploaded,""" start="00:26:05.559" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and here they are in the drive.""" start="00:26:07.739" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Good, so now I will modify the""" start="00:26:11.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""fermented-overnight-oats file in the hyperdrive.""" start="00:26:15.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I've loaded it, and I'll add here:""" start="00:26:19.939" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text=""""or other grains - cook them in advance if you want to,"""" start="00:26:24.340" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll save it.""" start="00:26:31.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now this file, fermented-overnight-oats.org,""" start="00:26:33.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""has been modified on the hyperdrive""" start="00:26:37.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""more recently than on the file system.""" start="00:26:40.679" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The file system file has not been modified.""" start="00:26:44.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll go back to my local directory,""" start="00:26:48.900" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll modify a different file.""" start="00:26:53.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""In this case, I'll add another hoedown""" start="00:26:56.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to the fiddle-tunes.org file.""" start="00:27:00.459" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text=""""Tom and Jerry." That's a good hoedown.""" start="00:27:04.619" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now I'll mirror again.""" start="00:27:09.619" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll open the menu, and I'll press `h`,""" start="00:27:14.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then I'll open up the emacsconf demo drive.""" start="00:27:16.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now I've also decided that""" start="00:27:20.579" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I want to include the solar-oven-notes.md file.""" start="00:27:22.959" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll remove the filter""" start="00:27:26.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""so that it's no longer excluded.""" start="00:27:28.499" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll leave the rest of the settings the same,""" start="00:27:32.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I'll press `m m` again.""" start="00:27:34.079" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now we see that the""" start="00:27:38.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""`*hyperdrive-mirror*` buffer looks different.""" start="00:27:40.019" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So, there are two main groups.""" start="00:27:43.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""These are the files that are going to be uploaded,""" start="00:27:47.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and these are the files that are ignored.""" start="00:27:49.986" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""They're not going to be uploaded.""" start="00:27:52.899" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The first subgroup is the files that are new locally.""" start="00:27:56.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the solar-oven-notes.md file is new on my machine,""" start="00:28:00.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and it doesn't exist in the hyperdrive.""" start="00:28:04.899" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the mirror command is going to take that file""" start="00:28:07.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and add it to the hyperdrive.""" start="00:28:10.039" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This group contains the files that are newer locally.""" start="00:28:13.759" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the fiddle-tunes.org file""" start="00:28:17.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""has been modified on my local machine,""" start="00:28:19.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""but it hasn't been modified on the hyperdrive.""" start="00:28:23.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So `hyperdrive-mirror` is going to take the""" start="00:28:26.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""updated version and put it on the hyperdrive.""" start="00:28:28.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Now, the first group that's going to be ignored""" start="00:28:33.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""are the files that are older locally.""" start="00:28:35.959" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the fermented oats file has been modified""" start="00:28:39.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""on the hyperdrive more recently""" start="00:28:42.979" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""than on my local file system.""" start="00:28:45.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So `hyperdrive-mirror` isn't going to overwrite""" start="00:28:47.539" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the version of the file in my hyperdrive""" start="00:28:51.059" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""with the older local version.""" start="00:28:53.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And finally, the emacsconf-preparation.org file""" start="00:28:57.279" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""hasn't been modified on either the hyperdrive""" start="00:29:00.779" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or my local file system,""" start="00:29:05.499" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and the timestamp is identical.""" start="00:29:07.439" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So `hyperdrive-mirror` is going to""" start="00:29:09.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""ignore this file as well.""" start="00:29:11.279" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So the only two files that are going""" start="00:29:13.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to be uploaded now are the solar-oven-notes.md file""" start="00:29:15.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and the fiddle-tunes.org file.""" start="00:29:19.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll confirm that with `C-c C-c`.""" start="00:29:21.639" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now in my hyperdrive""" start="00:29:25.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""we see that there are four files.""" start="00:29:26.579" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The solar-oven-notes.md file has been uploaded,""" start="00:29:28.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and if I open the fiddle-tunes.org file,""" start="00:29:31.679" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""we see that it now contains the line "Tom and Jerry,"""" start="00:29:35.519" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which means that it was updated based on""" start="00:29:39.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the change to the file on my local file system.""" start="00:29:41.659" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This `hyperdrive-mirror` command is the command""" start="00:29:47.099" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that we use to periodically update""" start="00:29:50.559" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the USHIN hyperdrive with""" start="00:29:54.139" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the contents of the USHIN website.""" start="00:29:56.599" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""There's going to be a link to the USHIN hyperdrive""" start="00:30:00.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as the website at the end of the video.""" start="00:30:03.019" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""hyperdrive history""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Now I'll go into a little more detail""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""about the Hyperdrive history buffer""" start="00:30:09.079" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""by showing off the README file in Prot's hyperdrive.""" start="00:30:11.219" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `C-c h` to open the menu,""" start="00:30:15.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""`C-u h` to be prompted for a drive.""" start="00:30:19.019" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll select Prot's drive,""" start="00:30:22.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""then I'll press `f` to jump to a file""" start="00:30:24.239" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""inside of Prot's drive,""" start="00:30:26.739" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and then `RET` to go to the root directory.""" start="00:30:28.739" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""From here, I'll press `j` to jump to""" start="00:30:32.399" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""an item in his directory.""" start="00:30:35.339" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `RET` on the README to load it.""" start="00:30:37.299" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then finally, I'll open up""" start="00:30:42.379" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""`C-c h` to look at the menu.""" start="00:30:44.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Here, I see that I'm looking at""" start="00:30:49.579" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the latest version of Prot's README.org file.""" start="00:30:50.979" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I also see that the previous version""" start="00:30:56.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""of README.org is unknown.""" start="00:30:58.739" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's unknown because hyperdrives""" start="00:31:02.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""are sparsely replicated.""" start="00:31:05.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""That means that when my node loaded this""" start="00:31:07.819" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""README.org file, it didn't bother""" start="00:31:09.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to load anything else.""" start="00:31:12.359" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It didn't load the previous history""" start="00:31:13.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""or any other file in his drive.""" start="00:31:16.059" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But now that I want to check out whether""" start="00:31:18.659" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""there is a previous version, I'll press `V p`.""" start="00:31:20.759" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And when it loads, I see in the mode line down here""" start="00:31:26.199" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I'm now looking at version 25 of this drive.""" start="00:31:28.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""That means that I'm looking at the README.org file""" start="00:31:33.319" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""at version 25 of this drive.""" start="00:31:36.499" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll open the menu again, and I see""" start="00:31:39.459" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that the same version number is displayed here.""" start="00:31:42.019" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The previous version, before version 25,""" start="00:31:47.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is also unknown because we haven't bothered""" start="00:31:50.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to load anything before version 25.""" start="00:31:53.559" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I also see that the next version, after version 25,""" start="00:31:56.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is the latest version.""" start="00:32:00.479" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""So I'll open that up by pressing `V n`.""" start="00:32:02.419" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now we are back where we started,""" start="00:32:06.719" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""at the latest version.""" start="00:32:10.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But now we see that the previous version,""" start="00:32:12.919" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the version before the latest version, is version 25.""" start="00:32:15.079" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Because now that our node has loaded the previous version,""" start="00:32:18.999" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it can display that information to us.""" start="00:32:24.300" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""From here, I'll open up the history buffer.""" start="00:32:28.620" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll press `V h`.""" start="00:32:31.640" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And I can see that there are two known existent""" start="00:32:35.320" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""ranges in Prot's README.org history.""" start="00:32:40.320" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This means that the latest version of README.org""" start="00:32:46.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""was modified at version 39.""" start="00:32:50.120" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And that Prot made four changes""" start="00:32:54.420" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to other files in his hyperdrive""" start="00:32:57.480" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""besides the README.org file since then.""" start="00:33:00.320" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Before that, the time that Prot modified""" start="00:33:04.280" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the README.org file was at version 25.""" start="00:33:08.660" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then he made 13 other changes to other files""" start="00:33:11.840" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""inside of this drive.""" start="00:33:15.200" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Before that, we don't know.""" start="00:33:18.580" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We haven't loaded the history.""" start="00:33:20.259" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""But since we're curious,""" start="00:33:21.859" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll hit `RET` on the unknown line.""" start="00:33:23.179" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And now we see that in Prot's hyperdrive,""" start="00:33:27.920" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the README.org file didn't exist""" start="00:33:32.140" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for the first 22 revisions of his drive.""" start="00:33:34.940" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Then Prot created it at version 23.""" start="00:33:39.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Then again, at 25, made a change.""" start="00:33:43.780" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then made another change at 39.""" start="00:33:46.920" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For good measure, I'll show you the diffs.""" start="00:33:50.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""The first diff just contains the entire file""" start="00:33:54.420" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""because the file didn't exist before version 23.""" start="00:33:58.180" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Then, at version 25, Prot added a link""" start="00:34:05.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to the COPYING.org file.""" start="00:34:08.620" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then, at 39,""" start="00:34:13.119" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Prot changed the link to his own hyperdrive""" start="00:34:14.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to be a relative link.""" start="00:34:17.340" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Streaming video from hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Now, I'll stream a video from the USHIN hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that shows off a prototype interface we created""" start="00:34:24.300" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for exploring networks of sources of information.""" start="00:34:27.900" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll open up `hyperdrive-menu`.""" start="00:34:31.720" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Press `C-u h` to be prompted for a drive.""" start="00:34:33.940" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I'll select the USHIN drive.""" start="00:34:37.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Press `f` to jump to a file in it.""" start="00:34:39.740" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And then I'll jump to the media directory.""" start="00:34:41.940" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Once it loads, I'll press `RET` on the video""" start="00:34:46.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that I want to stream.""" start="00:34:50.180" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""[Voice from the video]: This is a demonstration""" start="00:34:54.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""of the subjective trust interface""" start="00:34:56.686" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that the USHIN team built for the u4u.io web app.""" start="00:34:57.839" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""[Joseph]: There it is.""" start="00:35:02.500" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Streaming a video from Hyperdrive.""" start="00:35:04.080" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""hyperdrive.el under the hood""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Here's how hyperdrive.el works under the hood.""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It uses plz [Please],""" start="00:35:13.027" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""the HTTP library that Adam Porter wrote,""" start="00:35:14.727" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to send requests via curl to hyper-gateway.""" start="00:35:18.080" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""hyper-gateway is a program that Mauve Signweaver wrote,""" start="00:35:22.720" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which runs a hyperdrive node under the hood.""" start="00:35:26.580" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It also runs a local HTTP server,""" start="00:35:30.760" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which accepts requests to control the node.""" start="00:35:34.040" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For example, if hyperdrive.el wants to show a file""" start="00:35:38.460" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""from someone's hyperdrive,""" start="00:35:43.480" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it sends the appropriate link via curl""" start="00:35:45.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as a GET request to hyper-gateway.""" start="00:35:49.120" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""hyper-gateway then fetches the data from the network""" start="00:35:52.960" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and returns it via curl,""" start="00:35:57.240" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""via plz, back to hyperdrive.el.""" start="00:35:59.340" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If hyper-gateway already has a locally cached copy,""" start="00:36:03.940" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""it doesn't bother checking the network.""" start="00:36:07.420" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It just sends it straight away.""" start="00:36:09.240" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Likewise, if hyperdrive.el wants to add a file""" start="00:36:12.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to a hyperdrive, it sends a PUT request.""" start="00:36:15.880" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""hyper-gateway is not installed as part of hyperdrive.el.""" start="00:36:20.200" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It needs to be installed""" start="00:36:24.980" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as a separate, executable program.""" start="00:36:26.660" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We have plans to switch from using hyper-gateway""" start="00:36:35.740" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to another program that Mauve Signweaver""" start="00:36:39.460" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""is working on, called hyper-sdk-rpc.""" start="00:36:42.459" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""hyper-sdk-rpc will give us more fine-grained control""" start="00:36:47.839" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""over the underlying Hyperdrive node,""" start="00:36:52.020" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which will open up some new features.""" start="00:36:54.700" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""For example, we'll be able to rename files atomically,""" start="00:36:56.820" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""diff directories between versions,""" start="00:37:00.900" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and list the peers that we're currently connected to.""" start="00:37:03.420" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Here are some of the Emacs libraries""" start="00:37:11.220" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that hyperdrive.el depends on.""" start="00:37:13.360" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrive.el uses plz to send HTTP requests""" start="00:37:17.540" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to hyper-gateway. Check it out.""" start="00:37:22.400" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's on GNU ELPA.""" start="00:37:25.699" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""ewoc.el is a built-in library that's documented""" start="00:37:28.560" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the Emacs Lisp manual under the rather cryptic""" start="00:37:33.640" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""heading "Abstract Display Functions."""" start="00:37:37.340" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Really, what it does is it allows you""" start="00:37:41.600" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""to map a data model to some display.""" start="00:37:44.520" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""What we do with it in hyperdrive.el is,""" start="00:37:50.000" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the directory view, we map directory entry items,""" start="00:37:53.860" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""files and directories, to display items.""" start="00:38:02.049" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""And ewoc.el makes it easy to update the display""" start="00:38:04.240" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""whenever the underlying data changes.""" start="00:38:08.701" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrive.el uses persist.el to store""" start="00:38:14.761" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Hyperdrive metadata about known hyperdrives""" start="00:38:21.280" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""as well as version history between sessions,""" start="00:38:25.640" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""so that the data is cached""" start="00:38:29.481" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""when you log out and log back in.""" start="00:38:32.121" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""If you're going to be developing a program in Emacs""" start="00:38:34.961" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for Emacs 29 or later,""" start="00:38:38.721" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I recommend looking at multisession.el,""" start="00:38:41.961" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""because it's built-in, and it has some features""" start="00:38:44.941" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that persist.el doesn't have.""" start="00:38:50.161" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template new="1" text="""Next steps""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]] + +[[!template text="""Thank you for listening to this talk.""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""I hope you get a chance to try out hyperdrive.el.""" start="00:39:00.001" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Here is a link to the hyperdrive.el manual""" start="00:39:03.681" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""in the USHIN hyperdrive.""" start="00:39:08.621" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""When you go to paste this link in,""" start="00:39:11.561" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""you'll need to combine it back into one line.""" start="00:39:14.981" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""This link is available in the hyperdrive.el manual,""" start="00:39:18.921" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""which is available from within a browser,""" start="00:39:22.501" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""at this link on the USHIN website.""" start="00:39:26.661" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""We also have a public conference room that you can join.""" start="00:39:29.821" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's an XMPP multi-user chat""" start="00:39:32.961" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""that the Sopranica team graciously makes available""" start="00:39:35.521" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""for us to use.""" start="00:39:39.781" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""There's also a Matrix bridge,""" start="00:39:41.621" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""if that's more your cup of tea.""" start="00:39:43.901" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Thank you to the EmacsConf organizers.""" start="00:39:48.660" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""It's been a pleasure to participate,""" start="00:39:52.821" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""and I look forward to hearing the rest of the talks.""" start="00:39:55.161" video="mainVideo-hyperdrive" id="subtitle"]] +[[!template text="""Have a good day.""" start="00:39:57.614" video="mainVideo-hyperdrive" id="subtitle"]] + + + +Captioner: bhavin192 + +<a name="hyperdrive-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: I guess we are now live.""" start="00:00:12.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So Joseph, thanks for being here.""" start="00:00:15.360" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Thanks for talking to the hyperdrive.""" start="00:00:16.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""We already had some, or we already have a lot""" start="00:00:22.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""of questions here. And I guess I would start""" start="00:00:24.360" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""with, let's call it the difficult,""" start="00:00:26.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the most difficult 1. So when you were""" start="00:00:29.119" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""developing hyperdrive for your colleague,""" start="00:00:30.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""what do you, or what have you learned the""" start="00:00:34.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""most?""" start="00:00:34.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: I have learned how much faster and more""" start="00:00:43.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""enjoyable the development of this project can""" start="00:00:46.360" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""be with talented people working by my side,""" start="00:00:51.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""like Jonas and Adam and Prat and Mo,""" start="00:00:55.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it's been really a pleasure to work with""" start="00:00:58.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""these folks.""" start="00:00:58.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: So you have started at first on your own and""" start="00:01:04.959" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""then probably pushed it somewhere in open""" start="00:01:07.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""source or how did it develop,""" start="00:01:10.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""your development experience?""" start="00:01:11.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: A few years ago, we started looking into""" start="00:01:15.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""using peer-to-peer technology for sharing all""" start="00:01:21.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""kinds of information. And we came across Move""" start="00:01:25.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""SignWeaver, who was recommended to us by a""" start="00:01:29.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""mutual friend. And we started working with""" start="00:01:32.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Move, and then about a year ago,""" start="00:01:33.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""we started looking into using Emacs,""" start="00:01:37.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the peer-to-peer software,""" start="00:01:40.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""so that we could make use of all of the""" start="00:01:43.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""powerful things that Emacs already does with""" start="00:01:46.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""org mode and other packages.""" start="00:01:47.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And then we started working with Adam and""" start="00:01:51.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Pratt and Jonas.""" start="00:01:52.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: Yes.""" start="00:01:54.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: So we are skipping to the next question.""" start="00:01:59.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So to read it out, I use multiple computers""" start="00:02:03.700" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and my partner also would like access to my""" start="00:02:06.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""notes. So, 2 questions at first.""" start="00:02:08.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""First 1, how well would this work with using""" start="00:02:12.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""this to edit my Zettelkasten hyperdrive using""" start="00:02:15.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""multiple computers?""" start="00:02:15.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Hyperdrive is single writer currently.""" start="00:02:21.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So what that means is that if you have a""" start="00:02:24.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive that you've created,""" start="00:02:25.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you're the only 1 who can make changes to it.""" start="00:02:28.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And that's limited right now to editing 1""" start="00:02:31.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive from 1 machine.""" start="00:02:33.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""In theory, you could use the same private key""" start="00:02:38.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and write to it from multiple machines,""" start="00:02:40.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""but you would have to make sure that you sync""" start="00:02:43.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it on both machines and didn't make""" start="00:02:46.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""concurrent writes because then you would fork""" start="00:02:48.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the history of your hyperdrive,""" start="00:02:49.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and that would be bad.""" start="00:02:51.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But we've spent a lot of time making links to""" start="00:02:57.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrives work well,""" start="00:02:59.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""relative links within hyperdrives to other""" start="00:03:02.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""files inside of your drive.""" start="00:03:03.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So you should be able to,""" start="00:03:05.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""with some exceptions, just take your personal""" start="00:03:10.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""information management set of org files or""" start="00:03:13.360" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""whatever it is that you have,""" start="00:03:14.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and upload them into a hyperdrive if all of""" start="00:03:18.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that is publicly available or would be good""" start="00:03:22.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""to share publicly. And you can make that""" start="00:03:27.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""available for other people to link to.""" start="00:03:28.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So you can have multiple different""" start="00:03:30.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrives that link to 1 another.""" start="00:03:32.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: So it's like a huge network of hyperdrives""" start="00:03:35.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""connected to each other in some way.""" start="00:03:38.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah.""" start="00:03:39.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: So that's kind of neat and kind of cool.""" start="00:03:41.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""There was a follow-up question or the second""" start="00:03:44.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""part of the question. Okay,""" start="00:03:46.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""then using the same hyperdrive is probably""" start="00:03:48.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""not possible, but interlinking would be the""" start="00:03:51.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""best way to do it. There was a question""" start="00:03:57.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""concerning how they should install it.""" start="00:03:59.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So What would be a good way of getting""" start="00:04:01.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrives if you do not want to install npm""" start="00:04:03.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and have a binary? Could you compile it with""" start="00:04:06.460" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""denner or rusk or zig or go?""" start="00:04:08.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""CLI alternative tool, I would prefer to""" start="00:04:10.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""download a single binary.""" start="00:04:11.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: There's something that Jonas was playing""" start="00:04:17.420" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""around with using Geeks to install Hyper""" start="00:04:20.459" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Gateway. So the way that HyperDrive.el,""" start="00:04:22.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the Emacs package, works right now is similar""" start="00:04:26.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""to the way that the transmission Emacs client""" start="00:04:30.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""for BitTorrent works, where you have a client""" start="00:04:34.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""in Emacs that connects to a daemon that is a""" start="00:04:37.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""separate process that's running on your""" start="00:04:39.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""machine, the transmission daemon.""" start="00:04:41.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But in this case, we have HyperGateway,""" start="00:04:43.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""which is running as a daemon on your machine.""" start="00:04:46.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And then hyperdrive.el""" start="00:04:48.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""connects to that daemon and sends requests,""" start="00:04:51.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and all of the hyperdrive stuff under the""" start="00:04:53.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hood happens with her gateway.""" start="00:04:55.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But so that package can,""" start="00:04:57.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or hypergateway, the program can be""" start="00:05:00.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""installed, The easiest way is to just""" start="00:05:02.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""download it from the GitHub releases.""" start="00:05:04.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""You could also use NPM to install it.""" start="00:05:07.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And then the third option that we've been""" start="00:05:09.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""playing around with is Jonas was writing a""" start="00:05:12.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""little script to install it using Geeks,""" start="00:05:14.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""since Geeks now comes with Node 18.""" start="00:05:18.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And so you should be able to install it using""" start="00:05:20.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Geeks.""" start="00:05:20.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, thank you. We have 2 people here""" start="00:05:25.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""joined with microphone.""" start="00:05:26.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Do we have now any question to Joseph or just""" start="00:05:30.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""here for chilling out.""" start="00:05:32.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I guess it's a no. Plasma,""" start="00:05:41.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""yeah.""" start="00:05:42.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: What about using, having some of the""" start="00:05:46.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""information being private in the hyperdrives.""" start="00:05:47.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: That's not what we have been focusing on at""" start="00:05:54.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""this point. At this point,""" start="00:05:55.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""what we've been working on is mainly using""" start="00:05:57.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrives for a public forum type tool.""" start="00:06:02.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But you could encrypt those files if you""" start="00:06:06.420" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""wanted to. You can also just,""" start="00:06:09.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""a poor man's security would just be to share""" start="00:06:13.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""your HyperDrive link only with those people""" start="00:06:16.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that you want to have access to your drive.""" start="00:06:19.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But the way that it works right now is anyone""" start="00:06:21.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""who has the link to a hyperdrive can access""" start="00:06:23.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""its content. So long as there are peers""" start="00:06:26.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""available on the network who can serve it to""" start="00:06:28.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you.""" start="00:06:28.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: Any follow up question from your side,""" start="00:06:37.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Plasma?""" start="00:06:37.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: I had 1, I'll just have to re-remember it.""" start="00:06:46.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: If you remember it, just feel free to""" start="00:06:55.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""interrupt me.""" start="00:06:56.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: What about working? I've looked at this""" start="00:06:58.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""before. What about, if I remember correctly,""" start="00:07:03.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it doesn't do as well with large files,""" start="00:07:04.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""so if you're going to store 200 gigs of video""" start="00:07:09.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""files, stuff like IPFS works a lot better,""" start="00:07:12.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or BitTorrent. This is,""" start="00:07:15.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""are you, were you using the,""" start="00:07:17.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""any way of using multiple protocols for stuff""" start="00:07:21.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""like that? Or what were you doing with,""" start="00:07:25.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or were you just doing the small files with""" start="00:07:27.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the same protocol? Or""" start="00:07:28.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: I would love to see an IPFS client in Emacs""" start="00:07:34.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""as well that could interface with Kubo or""" start="00:07:37.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""some other IPFS daemon and I think that those""" start="00:07:40.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""could work really well together.""" start="00:07:41.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""We mostly have been playing around with""" start="00:07:45.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""sharing relatively small files,""" start="00:07:47.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""up to hundreds of megabytes or maybe a""" start="00:07:52.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""gigabyte. We haven't played around yet with""" start="00:07:55.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive.el, the Emacs client,""" start="00:07:57.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""testing that with HyperGateway.""" start="00:07:59.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But there may be other experiments that have""" start="00:08:04.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""been done that show that that works well.""" start="00:08:05.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""The main thing is that IPFS uses content""" start="00:08:10.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""addressability to reduce duplication of the""" start="00:08:14.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""content. Whereas in HyperDrive,""" start="00:08:16.620" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""if you upload the same file with the same""" start="00:08:20.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""contents twice, now you have double the""" start="00:08:23.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""content being stored in your HyperDrive.""" start="00:08:25.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's not deduplicated.""" start="00:08:26.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""You can always clear out part of the history""" start="00:08:30.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""of your hyperdrive But IPFS has really good""" start="00:08:36.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""built-in deduplication whereas hyperdrive""" start="00:08:39.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""does not""" start="00:08:39.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 4]: I have a question.""" start="00:08:44.159" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: What about like commenting on other like if""" start="00:08:47.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you have a couple of different Hypercore""" start="00:08:50.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""blogs, what about like commenting between""" start="00:08:53.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""them? Like you have some people who have a""" start="00:08:56.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""commenting form on Reddit for their blog""" start="00:08:59.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""posts.""" start="00:08:59.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: So Move SignWeaver has been doing a lot of""" start="00:09:04.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""work recently with the distributed press API""" start="00:09:07.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""to integrate ActivityPub with these""" start="00:09:12.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""peer-to-peer technologies.""" start="00:09:14.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Move can give you more information about""" start="00:09:17.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that. But there is another feature that we'd""" start="00:09:22.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""like to add to hyperdrive.el,""" start="00:09:23.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""which is peer discovery using the swarming""" start="00:09:29.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""feature that HyperCore,""" start="00:09:30.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""HyperSWARM offers, where you'd be able to say""" start="00:09:34.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that my node, my peer-to-peer node is""" start="00:09:38.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""interested in Emacs and free software as""" start="00:09:41.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""topics. And those would be 2 different""" start="00:09:43.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""topics. I would advertise on the network that""" start="00:09:45.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I'm interested in those topics.""" start="00:09:46.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And I would be able to discover other peers""" start="00:09:49.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""on the network who have also advertised that""" start="00:09:52.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""they're interested in those same topics.""" start="00:09:53.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And then they would tell me,""" start="00:09:56.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hey, here's the public key of my hyperdrive.""" start="00:09:59.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Come check it out. I have posted information""" start="00:10:01.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""about those topics. And so in that way,""" start="00:10:04.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you'd be able to, in a distributed fashion,""" start="00:10:06.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""discover other peers on the network who are""" start="00:10:09.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""interested in topics that you're interested""" start="00:10:11.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""in.""" start="00:10:11.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Something that would be useful in addition to""" start="00:10:16.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that idea is like if you had your emacs""" start="00:10:19.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Zettelkasten Publish like let's say you have""" start="00:10:25.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""some private data You make sure that that's""" start="00:10:27.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""scrubbed out before it goes to your hyper""" start="00:10:29.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""core and then you have another part of it""" start="00:10:31.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that gets turned into a website for it's also""" start="00:10:35.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""given to other hyper core clients but you'd""" start="00:10:38.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""rather get the emacs users the org documents""" start="00:10:40.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""then you also publish some of them on a""" start="00:10:44.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""website so everybody as much people can get""" start="00:10:48.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it as possible. And then a way of figuring""" start="00:10:53.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""out who you'd want to do,""" start="00:10:55.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or if you're an Emacs user,""" start="00:10:57.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""maybe figure out that they're all related to""" start="00:10:59.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""each other, but you want to get the art mode""" start="00:11:01.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""documents because you're using EMAX.""" start="00:11:03.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Yeah.""" start="00:11:05.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: Maybe a side note, we have 4 minutes here on""" start="00:11:10.360" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""before we switch into the next track,""" start="00:11:12.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""just to let you know.""" start="00:11:13.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you. So the hyper drive mirror feature""" start="00:11:17.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that we added, would allow you to selectively""" start="00:11:21.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""choose which files you want to share in a""" start="00:11:24.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive. So, with Prot's denote file""" start="00:11:28.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""naming scheme or Carl Voigt's file tags""" start="00:11:30.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""naming scheme, you could just specify a""" start="00:11:33.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""regular expression. And you could say,""" start="00:11:35.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I want to share out of my directory of org""" start="00:11:40.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""files, I want to share only those files that""" start="00:11:42.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""have been tagged as public,""" start="00:11:44.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or only those files that have been tagged as""" start="00:11:47.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""emacs and then only those ones would get""" start="00:11:49.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""uploaded into your hyperdrive""" start="00:11:50.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: or exclude all in any of the ones that say""" start="00:11:54.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""private""" start="00:11:54.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: yep mike had a question""" start="00:12:01.620" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 4]: yeah I have a question for the hyperdrive.""" start="00:12:05.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So I just maybe I missed it and you haven't""" start="00:12:08.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""put a link.""" start="00:12:09.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, Mikhail, we can't hear you.""" start="00:12:16.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Heard you for a second.""" start="00:12:22.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes?""" start="00:12:28.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 4]: Can someone hear me? Okay,""" start="00:12:29.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I have no idea what happened to my""" start="00:12:31.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""microphone, but now it's back.""" start="00:12:32.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Now we can. You can see the microphone on the""" start="00:12:34.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""top of the screen. So""" start="00:12:35.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 4]: yes, thank you. Okay. I have a question to""" start="00:12:38.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive. Is the hyperdrive a find on the""" start="00:12:41.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hole punch point, point T O hole Or is it""" start="00:12:46.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""just another hyperdrive?""" start="00:12:47.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: That's exactly the project that we're using.""" start="00:12:51.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So the HolePunch team has released hyperdrive""" start="00:12:54.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and other hyper core libraries as free""" start="00:12:59.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""software libraries that you can use.""" start="00:13:01.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And so MoV SignWeaver,""" start="00:13:03.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the project that MoV is working on,""" start="00:13:07.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""HyperGateway, depends on those libraries and""" start="00:13:11.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it makes it easy for you to build other""" start="00:13:15.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""clients like hyperdrive.el""" start="00:13:17.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""which connect to the hyperdrive network.""" start="00:13:20.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I hope that answers your question.""" start="00:13:22.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 4]: Yes it does, thank you.""" start="00:13:25.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And what did make you choose hyperdrive for""" start="00:13:28.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""this Emacs project?""" start="00:13:29.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Mainly the fact that the drives are mutable,""" start="00:13:34.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""which makes it distinct from IPFS or""" start="00:13:37.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""BitTorrent, where when you share some piece""" start="00:13:40.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""of content, you're stuck with that static""" start="00:13:44.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""piece of content, which works well for some""" start="00:13:46.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""cases, but if you say you have a Zettelkasten""" start="00:13:49.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""or you have a set of org files that you want""" start="00:13:52.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""to share with people, you want to be able to""" start="00:13:56.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""update those files and have other people pull""" start="00:13:58.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""those updates from you.""" start="00:13:59.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And so HyperDrive allows you to have these""" start="00:14:02.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""mutable sets of files that you can share and""" start="00:14:05.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""use the same link for other peers to pull the""" start="00:14:08.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""latest changes from you.""" start="00:14:09.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Also, it's versioned, as we showed in the""" start="00:14:11.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""video, which is really helpful for having""" start="00:14:15.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""community deliberations and community""" start="00:14:17.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""discussions where you want to be able to""" start="00:14:19.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""reference some something that somebody said""" start="00:14:22.420" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""in the past and not have it get deleted or""" start="00:14:26.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""changed or something.""" start="00:14:26.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 0]: We are now switching to talk So just for""" start="00:14:30.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""letting you know if you want to say something""" start="00:14:32.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""now. Too late. The BB room is still open,""" start="00:14:37.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""so you can still discuss.""" start="00:14:38.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""There's also a lot going on on the pad.""" start="00:14:41.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But you can also discuss here inside and""" start="00:14:47.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""answer the pet questions maybe later.""" start="00:14:49.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, there are good questions.""" start="00:14:52.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I'll go ahead, please.""" start="00:14:58.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: continuing here on the pad?""" start="00:15:01.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Are we I can hear you.""" start="00:15:04.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 5]: Yeah, so the question I had on the pad was,""" start="00:15:07.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""would it make sense in any sense to put a""" start="00:15:10.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""FUSE interface or put the POSIX semantics in""" start="00:15:13.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""front of this at some point?""" start="00:15:14.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, that would be cool.""" start="00:15:17.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's kind of a similar question to any plans""" start="00:15:20.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""for a Tramp interface.""" start="00:15:21.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""There was a project that the HyperCore""" start="00:15:25.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""HolePunch team was working on a year or more""" start="00:15:31.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""ago that provided a FUSE interface.""" start="00:15:34.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And I think it didn't pan out.""" start="00:15:39.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But it's a good idea. Same with the Tramp""" start="00:15:43.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""interface. It seems like a good idea that""" start="00:15:46.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""would make it possible to more easily hook""" start="00:15:51.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""into the built-in Emacs functionality for,""" start="00:15:55.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""for example, like incremental file name""" start="00:16:01.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""completion, which we don't currently support""" start="00:16:03.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""in Hyperdrive.el. So I'd love to have""" start="00:16:09.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""feedback and design ideas for those projects.""" start="00:16:12.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 5]: Yeah, there's just Everything in Emacs just""" start="00:16:15.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""sort of assumes the file system is there and""" start="00:16:17.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""usable in that way. That's all.""" start="00:16:20.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it's a good idea.""" start="00:16:23.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: An idea for the privacy type thing is""" start="00:16:28.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Syncthing links. Because I think you can set""" start="00:16:33.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""up Syncthing in such a way that you have the""" start="00:16:36.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""private networks that other people can't""" start="00:16:38.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""actually get access to.""" start="00:16:40.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: I did not know that that was possible with""" start="00:16:45.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Syncthing. I'll have to look into that.""" start="00:16:47.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: At least I think it is anyway,""" start="00:16:48.840" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""because yeah, there's ways you can explicitly""" start="00:16:53.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""authorize devices. Yeah,""" start="00:16:56.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""right. I think you could actually set it up""" start="00:17:00.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""in such a way that you can have private stuff""" start="00:17:03.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and links, and then that might be a way that""" start="00:17:06.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you can get a completely distributed""" start="00:17:10.119" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Zettelcast and with private notes.""" start="00:17:12.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Good idea. There's a question in the""" start="00:17:22.339" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""pad about DATRS, a Rust version of""" start="00:17:26.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""HyperDrive. I had not heard of that,""" start="00:17:28.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""so I'll have to look into that.""" start="00:17:30.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""If you had your druthers,""" start="00:17:33.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""what would make your work on hyperdrive.dl""" start="00:17:34.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""easier? It's been a lot of fun.""" start="00:17:40.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I would love to have more user feedback.""" start="00:17:42.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""That would be my wish.""" start="00:17:45.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I tried putting a git repo in HyperDrive.""" start="00:17:50.500" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Does it work well? I don't think that would""" start="00:17:53.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""work well because, as I mentioned a moment a""" start="00:17:56.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""few moments ago, the data that you put into a""" start="00:18:00.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive is duplicated.""" start="00:18:00.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So if you had the whole work tree in""" start="00:18:06.300" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperdrive every time you made a change and""" start="00:18:08.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""saved it, it would be duplicated.""" start="00:18:12.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""If you had just a bare repository,""" start="00:18:15.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I don't know, try it.""" start="00:18:18.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: They're trying to solve the same problem,""" start="00:18:21.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""but 1 of the optimizations they have for""" start="00:18:23.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""being able to view a whole bunch of people's""" start="00:18:25.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""data is they made shallow clones a lot""" start="00:18:28.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Would you phrase that again,""" start="00:18:34.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""please?""" start="00:18:35.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: easier. Right? So like Git and Hypercore,""" start="00:18:39.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""1 of the things they do is they allow you to""" start="00:18:42.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""have a whole history of every single change""" start="00:18:46.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""for a dataset Zettelkasten project.""" start="00:18:51.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But 1 of the optimizations Hypercore did to""" start="00:18:56.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""make it more network web friendly is they""" start="00:19:02.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""made the shallow clones work a lot better and""" start="00:19:04.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""a lot... Yeah, they made that work a lot""" start="00:19:07.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""better so you don't have to download every""" start="00:19:08.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""single thing for every single project.""" start="00:19:11.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And because they both are implementing the""" start="00:19:14.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""delta upgrades, I don't see how they could""" start="00:19:17.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""work really well together.""" start="00:19:19.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""At least from what it looked like to me.""" start="00:19:21.780" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It can't hurt to experiment.""" start="00:19:25.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: But yeah, I would agree with you.""" start="00:19:28.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Is data transferred between nodes in the""" start="00:19:35.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""clear or encrypted? That's a good question.""" start="00:19:38.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I don't know how it's encrypted.""" start="00:19:41.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I don't, I wouldn't recommend sharing""" start="00:19:47.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""sensitive data with hyperdrive right now?""" start="00:19:53.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I would recommend if you want to play with""" start="00:19:55.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it, have it be something where you're""" start="00:19:57.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""expecting the data to be shared.""" start="00:20:00.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Is there a searchable catalog?""" start="00:20:03.460" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: It's also the data in transport versus data""" start="00:20:06.700" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""at rest. I'm pretty sure the data at rest""" start="00:20:08.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""would not be encrypted.""" start="00:20:09.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Right. You can separate that into those 2""" start="00:20:14.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""questions.""" start="00:20:14.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Right. Is there a searchable catalog""" start="00:20:19.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""of hyper drives? So that's a thing,""" start="00:20:23.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""an idea that we've been a distributed trust""" start="00:20:32.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""network for discovering peers that are""" start="00:20:38.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""trusted for a particular topic.""" start="00:20:41.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And we actually made a demo video of a""" start="00:20:47.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""previous prototype that's available on the""" start="00:20:51.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Ashen hyperdrive that you can watch that""" start="00:20:54.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""shows the basic idea. But the idea is just""" start="00:20:58.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that you would have a list of peers that you""" start="00:21:02.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""think are worth listening to or worth reading""" start="00:21:07.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""for a particular topic.""" start="00:21:09.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And those peers would have peers that they""" start="00:21:11.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""think are worth listening to for that same""" start="00:21:14.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""topic. And so you would say,""" start="00:21:16.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""if I'm interested in Emacs,""" start="00:21:17.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I want to see all the peers that I trust for""" start="00:21:21.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the topic Emacs. And if,""" start="00:21:23.700" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""say, Adam Porter shows up in my list and Adam""" start="00:21:27.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Porter trusts Jonas and Jonas trusts Pratt,""" start="00:21:30.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I would be able to read hyperdrive""" start="00:21:33.420" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""information from all of those people by""" start="00:21:36.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""looking at the indirect relationships that I""" start="00:21:41.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""have by following the chain of relationships,""" start="00:21:43.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""kind of like a web of trust.""" start="00:21:44.760" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And so it would also allow you to have a""" start="00:21:49.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""network of peers that you trust to block""" start="00:21:53.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""other people on your behalf.""" start="00:21:54.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So it would be useful for subjective""" start="00:21:57.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""moderation where you can remove spam and bad""" start="00:22:02.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""actors from the people that you follow""" start="00:22:04.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""without having to delegate that powerful""" start="00:22:08.940" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""responsibility to some third party in a""" start="00:22:13.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""permanent way where that third party might""" start="00:22:15.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""abuse that power. So it allows you to share""" start="00:22:23.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""your list of trusted peers and your list of""" start="00:22:26.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""blocked peers with other people in a""" start="00:22:29.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""peer-to-peer way.""" start="00:22:29.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Have you ever looked at GNUnet?""" start="00:22:38.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It kind of does some...""" start="00:22:40.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's trying to do something weird with the""" start="00:22:45.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""internet where it redesigns it from the""" start="00:22:47.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""ground up to be peer-to-peer,""" start="00:22:51.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""local first, or something like that.""" start="00:22:53.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: I would like to know more about GNUnet.""" start="00:22:58.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Yes. I have heard of it,""" start="00:23:01.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""but I haven't really researched it.""" start="00:23:03.620" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""If you edit a file on the hyperdrive,""" start="00:23:09.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""then edit the same file on the local mirror,""" start="00:23:12.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""how is the conflict handled when you sync the""" start="00:23:15.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""mirror again? So I think if I understand the""" start="00:23:21.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""question, the answer is that you can't edit""" start="00:23:29.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the file in 2 different places,""" start="00:23:32.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I think is the answer to the question.""" start="00:23:36.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""If you were to manually copy the private key""" start="00:23:41.220" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""from 1 machine onto another machine,""" start="00:23:44.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""then you could cause a conflict,""" start="00:23:51.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""like a merge conflict,""" start="00:23:54.400" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""but you would have to go out of your way to""" start="00:23:58.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""do that. And It's not handled.""" start="00:24:00.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I think the Hypercore Hole Punch team has""" start="00:24:03.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""another project that they're working on that""" start="00:24:05.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""would, it's called AutoBase,""" start="00:24:07.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""that would merge those conflicts.""" start="00:24:09.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""But we're not using that right now.""" start="00:24:13.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And I think it's in early development still.""" start="00:24:16.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So there might be a solution in the future.""" start="00:24:19.860" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: What's a surprising change of thoughts or""" start="00:24:32.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""what's the most interesting thing you weren't""" start="00:24:36.900" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""expecting to discover while developing this?""" start="00:24:39.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Like change of thoughts on how you write or I""" start="00:24:44.640" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""don't know.""" start="00:24:45.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, I'm relatively new to Emacs and to Lisp""" start="00:24:59.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and really to programming in general.""" start="00:25:01.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And so it's been a fantastic learning""" start="00:25:04.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""experience. Adam, Alpha Papa,""" start="00:25:08.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Adam and I have been doing a lot of pair""" start="00:25:11.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""programming sessions where we work together""" start="00:25:12.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and I get to learn from him.""" start="00:25:15.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""And we've had meetings with Jonas and Prat""" start="00:25:19.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""and meetings with Mauve where it's a""" start="00:25:23.560" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""fantastic learning experience for me to""" start="00:25:25.520" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""discover how to build software in an""" start="00:25:30.660" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""efficient and intelligent way.""" start="00:25:32.820" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's a huge pleasure. If there are no more""" start="00:25:40.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""questions, I just wanted to encourage""" start="00:25:43.320" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""everyone to try it out and to let us know""" start="00:25:48.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""what you think. It would be really helpful to""" start="00:25:50.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""have some feedback from people who are using""" start="00:25:54.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it in new and creative ways that we haven't""" start="00:25:57.240" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""anticipated.""" start="00:25:57.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 6]: Hi, I'd just like to say that I tried this""" start="00:26:02.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""new thing called hyperdrive.el""" start="00:26:02.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""today, and I think it's pretty cool.""" start="00:26:05.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: Sorry, that was somebody else.""" start="00:26:12.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Hey Joseph, how's it going?""" start="00:26:13.440" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Oh, talk today.""" start="00:26:15.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh, thanks. Wonderful.""" start="00:26:16.420" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: Who's that? Oh, hey. Well,""" start="00:26:19.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I'm going to say goodbye.""" start="00:26:34.060" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Thank you. And thank you for your questions,""" start="00:26:37.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: I know that""" start="00:26:39.680" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 1]: PlasmaStrike. I've met you before.""" start="00:26:40.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Appreciate your questions,""" start="00:26:42.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""your thoughts.""" start="00:26:42.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, by the way, Joseph,""" start="00:26:50.380" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""we have our, our first,""" start="00:26:53.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I don't know if our first new user,""" start="00:26:55.120" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""but we have the first link being shared,""" start="00:26:57.280" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""to hyperdrive file in the chat and I loaded""" start="00:27:01.160" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""it and it works. And it's funny too.""" start="00:27:03.080" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's worth looking at.""" start="00:27:03.880" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""So. Oh, I think it's frozen.""" start="00:27:09.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""I don't know if anybody can hear me.""" start="00:27:11.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: I can.""" start="00:27:12.720" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay, cool. The browser is frozen.""" start="00:27:15.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""It's it's not, okay. Just unfroze.""" start="00:27:19.020" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""Anyway. All right. Well,""" start="00:27:21.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""By the way, I enjoyed your talks about""" start="00:27:24.000" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""hyperbole. I'm going to rewatch those later""" start="00:27:26.260" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""when I get a chance. It was nice to meet you,""" start="00:27:28.040" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""too. Bob is a really great guy to work with.""" start="00:27:31.100" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Definitely a lot of interesting people.""" start="00:27:38.800" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: I owe him 1. Yes, sir.""" start="00:27:40.200" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""All right, you have a good day,""" start="00:27:41.580" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 3]: Will do, I like the insistence on local""" start="00:27:45.140" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""first. Feels like it's a good dovetail with""" start="00:27:48.740" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""the hyper core""" start="00:27:49.540" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""[Speaker 2]: enjoy the conference. Yeah,""" start="00:27:51.180" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""yeah, I think there's a lot of a lot of""" start="00:27:54.960" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""interesting possibilities to build on this we""" start="00:27:57.980" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""have some plans that we Will get to you later""" start="00:28:01.340" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""this well in the coming year And we'll see""" start="00:28:05.600" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""where the hyperdrive people,""" start="00:28:07.480" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""you know, upstream how they develop it as""" start="00:28:09.920" video="qanda-hyperdrive" id="subtitle"]] +[[!template text="""well and yeah, so exciting times.""" start="00:28:14.340" video="qanda-hyperdrive" id="subtitle"]] + +Questions or comments? Please e-mail [joseph@ushin.org](mailto:joseph@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20hyperdrive.el%3A%20Peer-to-peer%20filesystem%20in%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/hyperdrive-before.md b/2023/info/hyperdrive-before.md new file mode 100644 index 00000000..944b9184 --- /dev/null +++ b/2023/info/hyperdrive-before.md @@ -0,0 +1,20 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +Actually a general-audience talk; just on the development track for scheduling purposes + +[[!toc ]] +Format: 41-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="hyperdrive-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 40:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9wLA55XACiGnS3nNBNwsV5">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="hyperdrive-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="hyperdrive-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus"></audio></div><div></div>Duration: 28:15 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/hyperdrive-nav.md b/2023/info/hyperdrive-nav.md new file mode 100644 index 00000000..9634dd75 --- /dev/null +++ b/2023/info/hyperdrive-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a> +Next by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/koutline-after.md b/2023/info/koutline-after.md new file mode 100644 index 00000000..a48d8b9d --- /dev/null +++ b/2023/info/koutline-after.md @@ -0,0 +1,128 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="koutline-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""Today I will share a nice workflow I have""" start="00:00:03.340" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""developed for stream of consciousness""" start="00:00:04.400" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""journaling. The goal of stream of""" start="00:00:06.560" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""consciousness journaling is to get your""" start="00:00:08.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""thoughts on the screen as effectively and""" start="00:00:09.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""efficiently as possible.""" start="00:00:10.679" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""These 2 features when combined reinforce each""" start="00:00:12.780" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""other and let you hear yourself think in a""" start="00:00:14.860" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""very efficient manner,""" start="00:00:15.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""increasing the number,""" start="00:00:17.220" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""quality, and types of thoughts you can get""" start="00:00:18.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""out of it. The tools I will be using for this""" start="00:00:21.100" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""are Emacs, KL line from the Hyperbolt""" start="00:00:22.680" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""package, centered cursor mode,""" start="00:00:24.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Olivetti mode, and optionally,""" start="00:00:25.119" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""voice to text. Additionally,""" start="00:00:26.820" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""you can see my commands and key bindings on""" start="00:00:28.939" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""the right. I will start off by showing a""" start="00:00:31.500" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""typing demo""" start="00:00:32.119" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""about how my day went.""" start="00:00:48.120" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""There are certain functionalities for stream""" start="00:01:12.900" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""of consciousness journaling that are desired""" start="00:01:14.640" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""or detrimental to the process.""" start="00:01:15.900" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Stream of thought functionalities,""" start="00:01:17.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""things I want. The ability to optionally use""" start="00:01:26.000" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""speech to text. I do this by using""" start="00:01:27.720" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Nerdictation, a Python program.""" start="00:01:29.380" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""I am still experimenting with this as it""" start="00:01:32.320" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""changes the quality and types of thoughts you""" start="00:01:34.120" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""can get out of stream of consciousness""" start="00:01:35.280" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""journaling. I am still looking for better""" start="00:01:37.680" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""ways of doing this. The ability to easily""" start="00:01:39.900" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""organize and split off my thoughts by""" start="00:01:41.680" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""creating and manipulating outlines.""" start="00:01:43.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Creating them in real time is needed for live""" start="00:01:46.280" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""journaling and allows for later editing""" start="00:01:48.240" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""really easily. I showed off some of these""" start="00:01:53.140" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""commands before. To just write words without""" start="00:01:56.479" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""worrying about format.""" start="00:01:57.540" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""To not worry about scrolling,""" start="00:02:00.160" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""I use centered cursor mode.""" start="00:02:01.640" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""To not worry about lines,""" start="00:02:05.200" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""I use the KOutline auto-filling""" start="00:02:06.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""functionality. To not worry about pressing""" start="00:02:09.360" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Enter, and to have a nice looking journal""" start="00:02:11.400" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""with hard returns afterwards.""" start="00:02:12.660" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Manually filling is needed with spacing when""" start="00:02:19.060" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""it is wrong. I do that with metaJ.""" start="00:02:22.160" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Counterproductive functionality.""" start="00:02:30.680" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Spell checking. While this is useful for""" start="00:02:33.480" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""editing, it is not useful for stream of""" start="00:02:35.500" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""consciousness journaling.""" start="00:02:36.220" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Having this on or off conditionally while you""" start="00:02:39.020" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""are live journaling is a killer feature of""" start="00:02:40.760" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Emacs. Reading slash editing the journal.""" start="00:02:48.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Part of the value proposition of this is to""" start="00:02:50.240" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""listen to what you are thinking,""" start="00:02:51.420" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""so this is needed functionality.""" start="00:02:52.680" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""You cannot listen very well when you are""" start="00:02:55.580" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""speaking, and the converse is true as well.""" start="00:02:57.360" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""You cannot speak very well when you are""" start="00:02:59.240" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""listening, decreasing what you can get out of""" start="00:03:01.280" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""it. Features when editing or listening to""" start="00:03:04.120" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""your journal. Spell checking.""" start="00:03:05.200" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""I use the Spackage Spellfoo,""" start="00:03:07.780" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""but there are others. I use multiple panes to""" start="00:03:20.740" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""read and edit. I use a combination of follow""" start="00:03:25.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""mode and some of my custom functions.""" start="00:03:27.940" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""These are what I use right here.""" start="00:03:31.860" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""The ability to change the view specs of the""" start="00:03:53.360" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""document. Stuff like, toggling blank lines.""" start="00:03:59.340" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Show the first heading of everything.""" start="00:04:08.300" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""You can also export the KOutline pages to""" start="00:04:18.620" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""HTML for other people to read or another way""" start="00:04:21.560" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""to look at it. Easy manipulation of cells.""" start="00:04:29.440" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""You use the Alt and arrow keys just like in""" start="00:04:34.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Orm mode to delete cells easily.""" start="00:04:37.200" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""The ability to manually reformat KL9 cells in""" start="00:04:47.020" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""addition to auto formatting of the cells for""" start="00:04:49.540" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""when spacing looks off.""" start="00:04:50.860" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""MetaJ is nice, and auto-filling is also nice""" start="00:04:53.900" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""for having multiple pages.""" start="00:04:54.920" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Why do I use these tools versus other common""" start="00:04:58.660" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""tools? K-Outline vs. Playtext Writing in""" start="00:05:06.060" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""outlines helps me easily structure my""" start="00:05:08.460" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""thoughts in a way that is easy to write,""" start="00:05:09.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""read, and edit. Org Mode vs.""" start="00:05:12.500" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""K-Outline Org Mode gives me lots of ways to""" start="00:05:15.360" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""structure my journal slash document.""" start="00:05:17.120" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""While this is great for a lot of things,""" start="00:05:19.600" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""for stream of consciousness journaling,""" start="00:05:21.540" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""this causes decision fatigue and loss of""" start="00:05:24.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""concentration. Types of questions I get when""" start="00:05:30.320" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""structuring an org-mode document?""" start="00:05:31.960" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Do I keep everything in a heading or below""" start="00:05:35.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""the heading in paragraphs?""" start="00:05:36.100" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""How do I handle new lines?""" start="00:05:38.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Do I just use visual line mode with no hard""" start="00:05:40.240" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""returns? Or if I make hard returns,""" start="00:05:42.520" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""on what line number do I do them?""" start="00:05:44.800" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""More visual line nodes in org-mode documents""" start="00:05:50.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""like a potential org ID in your property""" start="00:05:52.660" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""stores. While a lot of the above is really""" start="00:05:57.720" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""nice if you are making something like a""" start="00:05:59.880" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""website to present to other people,""" start="00:06:01.640" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""these features are counterproductive to""" start="00:06:04.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""stream-of-thought journaling.""" start="00:06:05.040" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Org mode is also top-notch for other things""" start="00:06:08.900" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""such as GTD. I don't think org mode has""" start="00:06:11.780" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""bindings to create child,""" start="00:06:13.820" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""same-level, and parent cells.""" start="00:06:15.460" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""Centered cursor mode versus scroll lock mode""" start="00:06:19.340" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""built-in. Scroll lock mode changes its place""" start="00:06:22.640" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""when you move the cursor from the bottom or""" start="00:06:28.180" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""the top of the page. Centered cursor mode""" start="00:06:30.080" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""will reliably fix itself to the center when""" start="00:06:33.420" video="mainVideo-koutline" id="subtitle"]] +[[!template text="""the cursor position is not there.""" start="00:06:36.280" video="mainVideo-koutline" id="subtitle"]] + +Questions or comments? Please e-mail [plasmastrike@voiddragon.me](mailto:plasmastrike@voiddragon.me?subject=Comment%20for%20EmacsConf%202023%20koutline%3A%20Using%20Koutline%20for%20stream%20of%20thought%20journaling) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/koutline-before.md b/2023/info/koutline-before.md new file mode 100644 index 00000000..f6b7cc81 --- /dev/null +++ b/2023/info/koutline-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 7-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="koutline-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 06:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vV7qtK176DVE6RLXrZ18Ee">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/koutline-nav.md b/2023/info/koutline-nav.md new file mode 100644 index 00000000..247cf825 --- /dev/null +++ b/2023/info/koutline-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a> +Next by track: <a href="/2023/talks/parallel">Parallel text replacement</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/lem-after.md b/2023/info/lem-after.md new file mode 100644 index 00000000..cf100dc9 --- /dev/null +++ b/2023/info/lem-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20lem%3A%20How%20to%20build%20an%20Emacs%202%3A%20Revenge%20of%20the%20Lem) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/lem-before.md b/2023/info/lem-before.md new file mode 100644 index 00000000..af9cef3a --- /dev/null +++ b/2023/info/lem-before.md @@ -0,0 +1,4 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/lem-nav.md b/2023/info/lem-nav.md new file mode 100644 index 00000000..85b81cfd --- /dev/null +++ b/2023/info/lem-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a> +Next by track: <a href="/2023/talks/lspocaml">Writing a Language Server In OCaml for Emacs, fun, and profit</a> +Track: <span class="sched-track gen">gen</span> +</div> diff --git a/2023/info/llm-after.md b/2023/info/llm-after.md new file mode 100644 index 00000000..5a020a0b --- /dev/null +++ b/2023/info/llm-after.md @@ -0,0 +1,1144 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="llm-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Intro to the Talk""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""Hello, I'm Andrew Hyatt and I'm going to talk to you""" start="00:00:00.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""about large language models and how""" start="00:00:04.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they relate to Emacs.""" start="00:00:06.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I'm going to talk to you about the technology""" start="00:00:11.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and how we're going to use it in Emacs.""" start="00:00:14.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There'll be demos and there'll be talks about,""" start="00:00:18.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'll finish up by kind of talking about where""" start="00:00:21.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think this should go in the future.""" start="00:00:22.880" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""What are LLMs?""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So to start off with, let's just talk like,""" start="00:00:25.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I just want to make sure everyone's on the same page.""" start="00:00:28.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What are large language models?""" start="00:00:29.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Not everyone may be caught up on this.""" start="00:00:30.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Large language models are a way... Basically,""" start="00:00:34.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the current versions of large language models""" start="00:00:39.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""are all based on the similar architecture""" start="00:00:43.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""called the transformer.""" start="00:00:44.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's just an efficient way to train and produce output.""" start="00:00:45.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So these things are basically models""" start="00:00:48.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that predict the next word or something like that.""" start="00:00:51.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And they're trained on an enormous corpus of information""" start="00:00:58.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and they get extremely good""" start="00:01:02.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""at predicting the next word.""" start="00:01:04.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And from that basic ability, you can train""" start="00:01:06.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""through further tuning from human input,""" start="00:01:09.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""human ratings and things like that.""" start="00:01:12.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can train different models based on that""" start="00:01:13.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that will do question answering.""" start="00:01:17.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And this is how basically ChatGPT works.""" start="00:01:18.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's a base LLM, like GPT.""" start="00:01:22.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then you have a chat version of that,""" start="00:01:25.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is just trained to just... You give""" start="00:01:27.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it a prompt, like what do you want it to do?""" start="00:01:29.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it gives you an output that does what you told it to do,""" start="00:01:32.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or at least attempts to do it.""" start="00:01:37.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Those are the power of large language models is""" start="00:01:39.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they're extremely, extremely impressive.""" start="00:01:42.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Certainly this is, in AI,""" start="00:01:45.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this has been the biggest thing to happen""" start="00:01:47.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""probably in my lifetime,""" start="00:01:49.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or at least my lifetime as my working lifetime.""" start="00:01:51.560" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Power of LLMs (Magit Demo)""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So let me give you a demonstration of""" start="00:01:56.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what kinds of stuff it could do in Emacs.""" start="00:02:02.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So here I have a Emacs file.""" start="00:02:06.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is my Emacs init file.""" start="00:02:09.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I have a change.""" start="00:02:12.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's commit that change.""" start="00:02:13.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And, you know, I don't like writing commit messages,""" start="00:02:16.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so I can generate it.""" start="00:02:19.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it did an actually just looking.""" start="00:02:23.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So all it does is it's looking, it's just reading the diff.""" start="00:02:27.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm just feeding it the diff with some instructions.""" start="00:02:29.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it is this a incredible commit message?""" start="00:02:32.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not bad, actually.""" start="00:02:37.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can see that it actually has really extracted""" start="00:02:39.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the meaning of what I'm doing and has written""" start="00:02:42.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a reasonably good commit message.""" start="00:02:46.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Now I have to edit it because this is not quite correct.""" start="00:02:48.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it's kind of impressive how good it is.""" start="00:02:53.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And my editing, it's kind of easier for me to edit this""" start="00:02:55.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""than just to write a new one.""" start="00:03:00.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And quite often it's good enough to just submit as is.""" start="00:03:01.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is kind of, you know, you could say""" start="00:03:04.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this is just commit messages.""" start="00:03:08.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could respond to emails.""" start="00:03:09.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could, you know, using your own custom instructions""" start="00:03:10.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""about what you want your email to say.""" start="00:03:15.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It'll write the email for you.""" start="00:03:17.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It could do like this""" start="00:03:19.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs is a way to interact with buffers.""" start="00:03:19.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This could basically just output text.""" start="00:03:22.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So it's super useful for""" start="00:03:24.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""understanding something and outputting text based on that,""" start="00:03:27.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is just useful for Emacs.""" start="00:03:30.320" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Drawbacks of LLMs (regex demo)""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So the drawback is, yeah, it's good,""" start="00:03:32.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's not that reliable.""" start="00:03:39.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you'd think it's very easy to get caught up in like,""" start="00:03:43.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""oh my gosh, like this is so powerful.""" start="00:03:45.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I bet it could work this, whatever idea could work.""" start="00:03:47.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And these ideas, like they almost can.""" start="00:03:50.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""For example, I was thinking, you know what I could do?""" start="00:03:52.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't like writing regexes.""" start="00:03:55.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Why can't I have a regex replace that's powered by LLMs?""" start="00:03:57.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that way I could give just an instruction""" start="00:04:01.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to regex replace.""" start="00:04:03.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And so for example, I could do Emacs LLM regex replace.""" start="00:04:07.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is not checked in anywhere.""" start="00:04:12.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are just my own kind of private functions.""" start="00:04:12.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""My description lowercase all the org headings.""" start="00:04:17.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's see if it works.""" start="00:04:19.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It might work.""" start="00:04:20.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""No, it doesn't work.""" start="00:04:21.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So if I, I'm not going to bother to show you""" start="00:04:22.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what it actually came up with, but it's something,""" start="00:04:26.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if you looked at it, it'd be like, wow,""" start="00:04:28.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this is very close to being...""" start="00:04:29.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It looks like it should work, but it doesn't.""" start="00:04:31.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Okay.""" start="00:04:34.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not quite good enough to get it right.""" start="00:04:35.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it's possible that perhaps by giving it""" start="00:04:38.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a few examples of, or explaining more""" start="00:04:41.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what makes Emacs regexes different.""" start="00:04:43.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It could do a better job""" start="00:04:46.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and maybe could solve these problems,""" start="00:04:47.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's always a little bit random.""" start="00:04:49.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're never quite sure what you're going to get.""" start="00:04:50.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is the drawback.""" start="00:04:52.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Like there's a lot of things that look like you could do it,""" start="00:04:54.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but when it actually comes down to trying it,""" start="00:04:58.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's surprisingly hard.""" start="00:05:01.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And, you know, and whatever you're doing,""" start="00:05:03.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's surprisingly hard to get something""" start="00:05:06.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is repeatably, that's, that is always good.""" start="00:05:09.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So yeah, that's currently the problem.""" start="00:05:13.880" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Embeddings""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So I want to talk about embeddings.""" start="00:05:20.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They're another thing that LLMs offer""" start="00:05:23.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and that are extremely useful.""" start="00:05:26.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They are, what they do is they encode from""" start="00:05:28.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a input text that could be a word, a sentence,""" start="00:05:33.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a small document.""" start="00:05:38.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It encodes a vector about what the meaning,""" start="00:05:42.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the semantic meaning of that is.""" start="00:05:45.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That means you could, something that is,""" start="00:05:46.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""uses completely different words,""" start="00:05:51.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but is basically talking about the same thing,""" start="00:05:52.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""perhaps in a different language, should be pretty close""" start="00:05:54.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as a vector to the other vector.""" start="00:05:57.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You know, as long as they're similarly semantic things,""" start="00:06:02.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like the words""" start="00:06:05.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""highway and Camino are two different words.""" start="00:06:12.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They mean the same thing.""" start="00:06:18.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They should have very similar embeddings.""" start="00:06:19.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So it is a way to kind of encode this""" start="00:06:21.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and then you could use this for search.""" start="00:06:25.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""For example, I haven't tried to do this yet,""" start="00:06:26.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you could probably just make an embedding""" start="00:06:28.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""for every paragraph in the Emacs manual""" start="00:06:31.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and the Elisp manual.""" start="00:06:33.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then, and then there's a very standard technique.""" start="00:06:36.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just... You find that you have a query,""" start="00:06:39.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""oh, how do I do whatever, whatever in Emacs again?""" start="00:06:43.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you could, you just find that 20 things""" start="00:06:45.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that are closest to whatever you're""" start="00:06:49.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""trying to... the embedding of your query.""" start="00:06:50.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You send those things to the LLM, as you know,""" start="00:06:51.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""with the original query,""" start="00:06:55.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you're basically telling the--asking the LLM,""" start="00:06:57.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""look, the user is trying to do this.""" start="00:06:59.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Here's what I found in the Emacs manual.""" start="00:07:01.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's on the Elisp manual.""" start="00:07:03.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's close to what they're trying to do.""" start="00:07:04.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So can you kind of just tell the user what to do?""" start="00:07:07.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And from this, and you could say,""" start="00:07:12.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""just use things from this, you know, that I give you.""" start="00:07:14.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Don't just make up your own idea.""" start="00:07:17.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You know, don't use your own ideas,""" start="00:07:20.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because sometimes it likes to do that""" start="00:07:21.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and those things are wrong.""" start="00:07:23.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you could try to, you know, do this and you get,""" start="00:07:24.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could get quite good results using this.""" start="00:07:26.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So no one has done this yet,""" start="00:07:28.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but that should not be hard to do.""" start="00:07:30.000" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Image Generation""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""Image generation is something that's, you know,""" start="00:07:32.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's not quite an LLM in the sense of...""" start="00:07:34.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are... It's a different technology,""" start="00:07:38.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but these things are kind of packaged together""" start="00:07:43.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in a sense.""" start="00:07:48.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you'll see that when I talk about Emacs packages,""" start="00:07:49.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a lot of them bundle image generation""" start="00:07:51.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and large language models.""" start="00:07:54.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You know, the APIs are often bundled together by providers.""" start="00:07:55.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And the general idea is it's kind of similar""" start="00:07:59.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because it's very similar to large, you know,""" start="00:08:02.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""doing a chat thing where you, you know,""" start="00:08:04.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the chat is like, you give it a text request,""" start="00:08:06.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like write me a sonnet about, you know,""" start="00:08:09.761" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the battle between Emacs and vi.""" start="00:08:12.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it could, it could do it.""" start="00:08:14.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It could do a very good job of that.""" start="00:08:15.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But you could also say, you know,""" start="00:08:17.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""draw me a picture of Emacs and vi as boxers,""" start="00:08:22.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as a character-character boxing in a ring,""" start="00:08:27.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like a, you know, political cartoon style.""" start="00:08:30.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it can do that as well.""" start="00:08:32.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And so you could basically think of this""" start="00:08:35.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as just sort of... it's kind of the""" start="00:08:37.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""same thing with what you're doing""" start="00:08:39.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""with large language models,""" start="00:08:42.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but instead of outputting a text,""" start="00:08:43.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you're outputting a picture.""" start="00:08:44.800" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Fine-tuning""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""There's also, I want to mention the concept of fine-tuning.""" start="00:08:48.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Fine-tuning is a way to take your--""" start="00:08:51.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""take a corpus of inputs and outputs and just from""" start="00:08:55.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a large language model, you're like, okay,""" start="00:08:59.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""given this base large language model,""" start="00:09:01.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I want to make sure that when I give you input,""" start="00:09:03.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you give me something like output.""" start="00:09:06.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And this is what I'm just going to""" start="00:09:08.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""train you further on these,""" start="00:09:10.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""these mappings between input and output.""" start="00:09:11.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And for example, you could do this. Like,""" start="00:09:14.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""let's say you wanted to fix that regex demo""" start="00:09:16.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I had to make it good.""" start="00:09:18.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't think it, I think it'd be""" start="00:09:21.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""relatively effective to train,""" start="00:09:23.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to have regex descriptions""" start="00:09:25.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and regex examples, Emacs regex examples""" start="00:09:27.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as inputs and outputs.""" start="00:09:30.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could get, you know, maybe a hundred,""" start="00:09:31.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a few hundreds of these things.""" start="00:09:34.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could train it.""" start="00:09:35.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think that is a reasonable way to,""" start="00:09:38.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""let's just say, I don't know how well it would work,""" start="00:09:40.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but these things definitely work some of the time""" start="00:09:43.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and produce pretty good results.""" start="00:09:46.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you could do this on your own machine.""" start="00:09:48.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Corporations like OpenAI offer APIs with, you know,""" start="00:09:53.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to build your fine tunes on top of OpenAI.""" start="00:09:59.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think, I'm not a hundred percent sure,""" start="00:10:01.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but I think then you can share your model""" start="00:10:04.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""with other people.""" start="00:10:05.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But if not, then you just, you know,""" start="00:10:06.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could use your model for your own specialized purposes.""" start="00:10:08.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But in the world of models that you could run,""" start="00:10:10.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""for example, based on Llama, which is like...""" start="00:10:14.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Llama is this model you can run on your own machine from Meta.""" start="00:10:16.875" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's many fine-tuned models that you could download""" start="00:10:23.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you could run on your own.""" start="00:10:26.881" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They can do very different things too.""" start="00:10:28.961" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Some output Python programs, for example,""" start="00:10:30.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that you could just run.""" start="00:10:33.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you just say...""" start="00:10:34.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Tell me how old... Let's just say""" start="00:10:37.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you have a random task, like""" start="00:10:40.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""tell me how old these five cities are in minutes,""" start="00:10:42.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""based on historical evidence.""" start="00:10:48.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's kind of a weird query, but it probably can figure,""" start="00:10:49.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it could probably run that for you.""" start="00:10:53.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It'll encode its knowledge into whatever""" start="00:10:55.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the Python program, then use the Python program""" start="00:10:57.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to do the correct calculations.""" start="00:10:59.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So pretty, pretty useful stuff.""" start="00:11:01.040" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Open Source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So I also want to mention open source""" start="00:11:08.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and basically free software here.""" start="00:11:10.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These LLMs are mostly not free software.""" start="00:11:12.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They're sometimes open source,""" start="00:11:17.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but they're generally not free""" start="00:11:19.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""without restrictions to use.""" start="00:11:21.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Most of these things, even Llama,""" start="00:11:23.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which you can use on your own machine,""" start="00:11:27.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""have restrictions that you cannot use it""" start="00:11:28.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to train your own model.""" start="00:11:31.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is something that, you know,""" start="00:11:32.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it costs millions and millions of dollars""" start="00:11:35.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to train and produce these models.""" start="00:11:37.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that's just computation costs.""" start="00:11:40.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They do not want you""" start="00:11:42.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""stealing all that work by training your own models""" start="00:11:45.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""based on their output.""" start="00:11:47.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But there are research LLMs that do, I believe,""" start="00:11:48.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""conform to free software principles.""" start="00:11:55.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They're just not as good yet.""" start="00:11:58.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think that might change in the future.""" start="00:11:59.520" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""The Future""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""So speaking of the future,""" start="00:12:02.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""one of the things I'd like to point out""" start="00:12:04.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is that like the demos I showed you are based on,""" start="00:12:07.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm using OpenAI 3.5 model.""" start="00:12:09.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's more than, well, no,""" start="00:12:13.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's like a year old basically at this point.""" start="00:12:16.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And things are moving fast.""" start="00:12:18.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They came out with 4.0.""" start="00:12:21.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""4.0 is significantly better.""" start="00:12:22.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't have access to it.""" start="00:12:23.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Even though I'm using the API and I'm paying money for it,""" start="00:12:24.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you only can get access to 4.0""" start="00:12:30.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if you can spend a dollar.""" start="00:12:33.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I've never been able to spend,""" start="00:12:34.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""use so much API use that I've spent a dollar.""" start="00:12:36.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So I have, I don't have 4.0, but I've tried it""" start="00:12:38.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because I do pay for this""" start="00:12:44.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so I could get access to 4.0""" start="00:12:46.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it is substantially better.""" start="00:12:48.341" video="mainVideo-llm" id="subtitle"]] +[[!template text="""By all reports, it's,""" start="00:12:49.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the difference is extremely significant.""" start="00:12:50.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I would not be surprised""" start="00:12:53.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if some of the limitations and drawbacks I described""" start="00:12:55.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""mostly went away with 4.0.""" start="00:12:59.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're probably at a stage""" start="00:13:02.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where regexes will work maybe 5% of the time""" start="00:13:06.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if you try them.""" start="00:13:09.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But with 4.0, it could work like 80% of the time.""" start="00:13:10.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Now, is that good enough?""" start="00:13:13.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Probably not, but it's a,""" start="00:13:14.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I wouldn't be surprised if you got results like that.""" start="00:13:17.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And in a year's time, in two years time,""" start="00:13:20.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""no one knows how much this is going to play out""" start="00:13:22.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""before progress stalls,""" start="00:13:26.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but there are a lot of interesting research.""" start="00:13:27.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't think, research wise,""" start="00:13:32.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't think things have slowed down.""" start="00:13:34.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're still seeing a lot of advances.""" start="00:13:35.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're still seeing a lot of models coming out""" start="00:13:38.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and that will come out.""" start="00:13:41.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That will be each one, one upping the other one""" start="00:13:41.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in terms of quality.""" start="00:13:46.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It'll be really interesting to see how this all plays out.""" start="00:13:49.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think that message here is that""" start="00:13:52.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we're at the beginning here.""" start="00:13:55.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is why I think this talk is important.""" start="00:13:58.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think this is why we should be""" start="00:14:01.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""paying attention to this stuff.""" start="00:14:02.280" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""LLMs in Emacs - existing packages""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""Let's talk about the existing packages.""" start="00:14:08.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Because there's a lot out there, people have,""" start="00:14:11.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think people have been integrating with""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""these LLMs that often have a relatively easy to use API.""" start="00:14:17.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So it's kind of natural that people""" start="00:14:21.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""have already put out a lot of packages.""" start="00:14:24.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Coming off this problem from a lot of different angles,""" start="00:14:25.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't have time to go through""" start="00:14:28.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""all of these packages.""" start="00:14:30.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are great packages though.""" start="00:14:31.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""If you're not familiar with them,""" start="00:14:33.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""please check them out.""" start="00:14:35.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And they all are doing slightly different things.""" start="00:14:37.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Some of these are relatively straightforward.""" start="00:14:41.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Interactions, just a way to""" start="00:14:43.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""almost in a comment sort of way to kind of""" start="00:14:47.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""have just an interaction,""" start="00:14:52.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""long running interaction with an LLM""" start="00:14:54.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where you kind of build off previous responses,""" start="00:14:55.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""kind of like the OpenAI's UI.""" start="00:14:59.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Two very more Emacsy things where you can sort of""" start="00:15:01.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""embed these LLM responses within a org-mode block""" start="00:15:08.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""using the org-mode's context.""" start="00:15:13.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Or GitHub Copilot integration where you can use it""" start="00:15:15.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""for auto completion in a very powerful,""" start="00:15:20.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you know, this stuff is very useful if it could figure out""" start="00:15:23.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what you're trying to do based on the context.""" start="00:15:27.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's quite effective.""" start="00:15:29.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But I want to kind of call out one thing""" start="00:15:31.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that I'd like to see change.""" start="00:15:36.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Which is that users right now,""" start="00:15:38.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""not all of these have a choice of,""" start="00:15:42.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""first of all, there's a lot of them.""" start="00:15:45.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Each one of them is doing their own calls.""" start="00:15:47.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And each one of them is, so each one of them""" start="00:15:49.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""has their own interfaces.""" start="00:15:54.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They're rewriting the interface to OpenAI or wherever.""" start="00:15:55.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And they're not, they don't, most of these""" start="00:15:57.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""do not make it that configurable or at all configurable""" start="00:16:00.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what LLM use.""" start="00:16:05.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is not good.""" start="00:16:06.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It is important that we use,""" start="00:16:07.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we give the user a way to change the LLM they use.""" start="00:16:09.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that is because you might not be comfortable""" start="00:16:15.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""sending your requests over to a private corporation""" start="00:16:21.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where you don't get to see how they use their data.""" start="00:16:24.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Your data, really.""" start="00:16:27.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's especially true with things like embeddings""" start="00:16:29.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where you might be sending over your documents.""" start="00:16:33.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're just giving them your documents, basically.""" start="00:16:35.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And, you know, that does happen.""" start="00:16:37.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't think really that there's a reason""" start="00:16:40.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to be uncomfortable with this,""" start="00:16:43.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but that, you know, people are uncomfortable and that's okay.""" start="00:16:44.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""People might want to use a local machine,""" start="00:16:51.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a local LLM for maximum privacy.""" start="00:16:53.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's something we should allow.""" start="00:16:58.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""People might want to especially use free software.""" start="00:17:00.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's something we should definitely allow.""" start="00:17:04.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is Emacs.""" start="00:17:05.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We need to encourage that.""" start="00:17:07.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But right now, as most of these things are written,""" start="00:17:08.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can't do it.""" start="00:17:12.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And they're spending precious time""" start="00:17:13.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""just doing things themselves.""" start="00:17:17.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is why I wrote LLM, which is...""" start="00:17:18.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it will just make that connection to the LLM for you""" start="00:17:20.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it will connect to, you know, it has plugins.""" start="00:17:23.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So if you can, the user can configure what plugin""" start="00:17:26.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it actually goes to.""" start="00:17:30.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Does it go to OpenAI?""" start="00:17:31.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Does it go to Google Cloud Vertex?""" start="00:17:32.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Does it go to Llama on your machine?""" start="00:17:35.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're using Ollama,""" start="00:17:37.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is just a way to run Llama locally.""" start="00:17:38.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And more things in the future, I hope.""" start="00:17:41.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is, I'm hoping that we use this.""" start="00:17:47.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's designed to be sort of maximally usable.""" start="00:17:52.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't need to install anything.""" start="00:17:54.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's on GNU ELPA.""" start="00:17:56.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So even if you write something""" start="00:17:58.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that you want to contribute to GNU ELPA,""" start="00:17:59.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can use it because it's on GNU ELPA.""" start="00:18:01.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's part of the Emacs package, Emacs core packages.""" start="00:18:02.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, but it has no functionality.""" start="00:18:06.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's really just there as a library""" start="00:18:09.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to use by other things offering functionality. Okay.""" start="00:18:11.720" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Abstracting LLM challenges""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""And it's a little bit difficult to abstract.""" start="00:18:15.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I want to point this out""" start="00:18:19.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because I think it's an important point""" start="00:18:21.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is that the, it's, some of these LLMs, for example,""" start="00:18:23.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""have image generation.""" start="00:18:29.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Some do not.""" start="00:18:30.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Some of them have very large context windows, even for chat.""" start="00:18:31.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You say, okay, all these things can do chat.""" start="00:18:35.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Okay.""" start="00:18:37.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Yeah, kind of.""" start="00:18:37.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Some of these things you could pass a book to,""" start="00:18:38.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like Anthropic's API.""" start="00:18:40.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Most, you cannot.""" start="00:18:41.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So there really are big differences""" start="00:18:43.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in how these things work.""" start="00:18:45.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I hope those differences diminish in the future.""" start="00:18:46.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it's just one of the challenges""" start="00:18:51.540" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that I hope we can work through in the LLM library.""" start="00:18:53.801" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So it's compatible, but there's definitely""" start="00:18:57.521" video="mainVideo-llm" id="subtitle"]] +[[!template text="""limits to that compatibility.""" start="00:19:02.161" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Emacs is the ideal interface for LLMs""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""I want to point out just to finish off,""" start="00:19:04.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs is the, Emacs has real power here""" start="00:19:06.161" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that nothing else I think in the industry is offering.""" start="00:19:12.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""First of all, people that use Emacs""" start="00:19:15.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""tend to do a lot of things in Emacs.""" start="00:19:19.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We have our to-dos in Emacs with the org mode.""" start="00:19:20.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We have mail.""" start="00:19:22.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We, you know, we might read email and we might,""" start="00:19:23.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and respond to email in Emacs.""" start="00:19:25.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We might have notes in Emacs.""" start="00:19:27.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This is very powerful.""" start="00:19:29.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Using... there's not other stuff like that.""" start="00:19:31.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you could feed this stuff to an LLM.""" start="00:19:34.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could do interesting things""" start="00:19:35.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""using a combination of all this data.""" start="00:19:37.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""No one else could do this.""" start="00:19:38.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We need to start thinking about it.""" start="00:19:40.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Secondly, Emacs can execute commands.""" start="00:19:41.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This might be a bad idea.""" start="00:19:45.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This might be how the robots take over,""" start="00:19:46.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you could have the LLMs respond with Emacs""" start="00:19:48.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""commands and run those Emacs commands""" start="00:19:51.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and tell the LLM the response and have it do things""" start="00:19:54.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as your agent in the editor.""" start="00:19:57.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think we need to explore ideas like this.""" start="00:19:58.680" video="mainVideo-llm" id="subtitle"]] + +[[!template new="1" text="""Outro""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]] + +[[!template text="""And I think we need to share these ideas""" start="00:20:01.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and we need to make sure that we're pushing the""" start="00:20:04.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""envelope for Emacs and actually, you know, doing things,""" start="00:20:07.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""sharing ideas, sharing progress,""" start="00:20:10.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and kind of seeing how far we can push this stuff.""" start="00:20:12.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's really help Emacs out, be sort of,""" start="00:20:15.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""take advantage of this super powerful technique.""" start="00:20:20.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Thank you for listening.""" start="00:20:24.520" video="mainVideo-llm" id="subtitle"]] + + + +Captioner: bala + +<a name="llm-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Okay. Hello, everyone.""" start="00:00:13.099" video="qanda-llm" id="subtitle"]] +[[!template text="""I think this is the start of the Q&A session.""" start="00:00:16.560" video="qanda-llm" id="subtitle"]] +[[!template text="""So people can just ask me questions here.""" start="00:00:25.119" video="qanda-llm" id="subtitle"]] +[[!template text="""Or I think maybe these questions are going to""" start="00:00:28.259" video="qanda-llm" id="subtitle"]] +[[!template text="""be read by someone. Yes,""" start="00:00:30.560" video="qanda-llm" id="subtitle"]] +[[!template text="""thank you. Should I start doing that?""" start="00:00:34.680" video="qanda-llm" id="subtitle"]] +[[!template text="""I also know that there's questions in the""" start="00:00:39.280" video="qanda-llm" id="subtitle"]] +[[!template text="""either pad room, so I could start out""" start="00:00:41.320" video="qanda-llm" id="subtitle"]] +[[!template text="""answering those as well.""" start="00:00:42.280" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, sure. Whichever way you prefer.""" start="00:00:45.020" video="qanda-llm" id="subtitle"]] +[[!template text="""If you prefer to read the questions yourself,""" start="00:00:46.860" video="qanda-llm" id="subtitle"]] +[[!template text="""by all means, or if you would prefer me to""" start="00:00:48.940" video="qanda-llm" id="subtitle"]] +[[!template text="""read them to you, that also works.""" start="00:00:50.080" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, I see.""" start="00:00:50.580" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Why don't you read them to me?""" start="00:00:51.600" video="qanda-llm" id="subtitle"]] +[[!template text="""I think it'll just be more interesting then.""" start="00:00:53.260" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure. OK, let's see. The first question is,""" start="00:00:56.820" video="qanda-llm" id="subtitle"]] +[[!template text="""what is your use case for embedding,""" start="00:00:58.360" video="qanda-llm" id="subtitle"]] +[[!template text="""mainly for searching?""" start="00:01:00.060" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I mean, I think the use case really is""" start="00:01:06.180" video="qanda-llm" id="subtitle"]] +[[!template text="""searching. And I think it is very useful when""" start="00:01:12.100" video="qanda-llm" id="subtitle"]] +[[!template text="""you're searching for something in a vague""" start="00:01:15.060" video="qanda-llm" id="subtitle"]] +[[!template text="""way. Just to give you an example,""" start="00:01:18.280" video="qanda-llm" id="subtitle"]] +[[!template text="""I have a note system called EKG.""" start="00:01:23.860" video="qanda-llm" id="subtitle"]] +[[!template text="""I type all my notes on it.""" start="00:01:25.760" video="qanda-llm" id="subtitle"]] +[[!template text="""You can find it on GitHub and Melba.""" start="00:01:28.620" video="qanda-llm" id="subtitle"]] +[[!template text="""But I wrote something at some point a year""" start="00:01:34.140" video="qanda-llm" id="subtitle"]] +[[!template text="""ago or something. I wrote something that I""" start="00:01:35.840" video="qanda-llm" id="subtitle"]] +[[!template text="""just vaguely remembered.""" start="00:01:36.600" video="qanda-llm" id="subtitle"]] +[[!template text="""Oh, this was about a certain kind of""" start="00:01:38.800" video="qanda-llm" id="subtitle"]] +[[!template text="""communication. I wanted communicating to""" start="00:01:41.580" video="qanda-llm" id="subtitle"]] +[[!template text="""large audiences. There's some interesting tip""" start="00:01:43.280" video="qanda-llm" id="subtitle"]] +[[!template text="""that I wrote down that was really cool.""" start="00:01:44.700" video="qanda-llm" id="subtitle"]] +[[!template text="""And I was like, well, I need to find it.""" start="00:01:49.920" video="qanda-llm" id="subtitle"]] +[[!template text="""So I did an embedding search for something""" start="00:01:52.260" video="qanda-llm" id="subtitle"]] +[[!template text="""like, you know, tips for communicating.""" start="00:01:55.479" video="qanda-llm" id="subtitle"]] +[[!template text="""Like those words may not have been in what I""" start="00:01:58.979" video="qanda-llm" id="subtitle"]] +[[!template text="""was trying to find at all,""" start="00:02:00.020" video="qanda-llm" id="subtitle"]] +[[!template text="""But it was able to find it.""" start="00:02:02.680" video="qanda-llm" id="subtitle"]] +[[!template text="""And that is something that's very hard to do""" start="00:02:05.840" video="qanda-llm" id="subtitle"]] +[[!template text="""in other ways. Like, you know,""" start="00:02:07.200" video="qanda-llm" id="subtitle"]] +[[!template text="""if you had to do this with normal search,""" start="00:02:08.520" video="qanda-llm" id="subtitle"]] +[[!template text="""you have to do synonyms.""" start="00:02:09.199" video="qanda-llm" id="subtitle"]] +[[!template text="""And like maybe those synonyms wouldn't cover""" start="00:02:10.940" video="qanda-llm" id="subtitle"]] +[[!template text="""it. Like with embedding,""" start="00:02:11.960" video="qanda-llm" id="subtitle"]] +[[!template text="""you can basically get at like the vague""" start="00:02:13.940" video="qanda-llm" id="subtitle"]] +[[!template text="""sentiment. You're like,""" start="00:02:14.960" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, you're, you know,""" start="00:02:17.320" video="qanda-llm" id="subtitle"]] +[[!template text="""you can really query on like what things are""" start="00:02:19.520" video="qanda-llm" id="subtitle"]] +[[!template text="""about as opposed to what words they have.""" start="00:02:21.760" video="qanda-llm" id="subtitle"]] +[[!template text="""Also, it's super good for similarity search.""" start="00:02:25.600" video="qanda-llm" id="subtitle"]] +[[!template text="""So you could say, look,""" start="00:02:27.720" video="qanda-llm" id="subtitle"]] +[[!template text="""I have a bunch of things that are encoded""" start="00:02:30.040" video="qanda-llm" id="subtitle"]] +[[!template text="""with embeddings that I want to show.""" start="00:02:31.400" video="qanda-llm" id="subtitle"]] +[[!template text="""For example, you can make an embedding for""" start="00:02:34.120" video="qanda-llm" id="subtitle"]] +[[!template text="""every buffer. You'd be like,""" start="00:02:35.220" video="qanda-llm" id="subtitle"]] +[[!template text="""well, show me buffers that are similar to""" start="00:02:37.060" video="qanda-llm" id="subtitle"]] +[[!template text="""this buffer. That doesn't sound super useful,""" start="00:02:38.740" video="qanda-llm" id="subtitle"]] +[[!template text="""but this is the kind of thing you could do.""" start="00:02:40.440" video="qanda-llm" id="subtitle"]] +[[!template text="""And so if you have a bunch of notes or""" start="00:02:45.300" video="qanda-llm" id="subtitle"]] +[[!template text="""something else that you want to search on,""" start="00:02:46.720" video="qanda-llm" id="subtitle"]] +[[!template text="""you'd be like, what's similar to this buffer?""" start="00:02:48.240" video="qanda-llm" id="subtitle"]] +[[!template text="""Or what notes are similar to each other?""" start="00:02:51.500" video="qanda-llm" id="subtitle"]] +[[!template text="""What buffers are similar to each other?""" start="00:02:53.040" video="qanda-llm" id="subtitle"]] +[[!template text="""It's super good for this sort of thing.""" start="00:02:55.380" video="qanda-llm" id="subtitle"]] +[[!template text="""And it's also good for this kind of retrieval""" start="00:03:00.780" video="qanda-llm" id="subtitle"]] +[[!template text="""augmented generation, where you sort of,""" start="00:03:03.080" video="qanda-llm" id="subtitle"]] +[[!template text="""you retrieve things and the purpose is not""" start="00:03:05.080" video="qanda-llm" id="subtitle"]] +[[!template text="""for you to see them, but then you pass that""" start="00:03:06.600" video="qanda-llm" id="subtitle"]] +[[!template text="""to the LLM. And then it's able to be a little""" start="00:03:12.040" video="qanda-llm" id="subtitle"]] +[[!template text="""bit more accurate because it has the actual""" start="00:03:14.340" video="qanda-llm" id="subtitle"]] +[[!template text="""text that you're trying to,""" start="00:03:15.760" video="qanda-llm" id="subtitle"]] +[[!template text="""that is relevant, and it can cite from and""" start="00:03:18.960" video="qanda-llm" id="subtitle"]] +[[!template text="""things like that. And then it could give you""" start="00:03:20.720" video="qanda-llm" id="subtitle"]] +[[!template text="""a much better answer that's kind of,""" start="00:03:22.260" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, not just from its own little neural""" start="00:03:25.520" video="qanda-llm" id="subtitle"]] +[[!template text="""nets and memory.""" start="00:03:26.320" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, thanks. Let's see,""" start="00:03:31.920" video="qanda-llm" id="subtitle"]] +[[!template text="""next question. What do you think about embed""" start="00:03:35.740" video="qanda-llm" id="subtitle"]] +[[!template text="""Emacs manual versus GPT's Emacs manual?""" start="00:03:40.160" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm not exactly sure what this question is""" start="00:03:45.480" video="qanda-llm" id="subtitle"]] +[[!template text="""trying to say. So I mean,""" start="00:03:46.980" video="qanda-llm" id="subtitle"]] +[[!template text="""if someone wrote that and wants to expand on""" start="00:03:51.000" video="qanda-llm" id="subtitle"]] +[[!template text="""it a little bit, but I think that maybe""" start="00:03:55.080" video="qanda-llm" id="subtitle"]] +[[!template text="""you're saying like you could embed,""" start="00:03:58.420" video="qanda-llm" id="subtitle"]] +[[!template text="""have embeddings for like various,""" start="00:04:00.280" video="qanda-llm" id="subtitle"]] +[[!template text="""like every paragraph or something of the""" start="00:04:02.520" video="qanda-llm" id="subtitle"]] +[[!template text="""Emacs manual. But it's also the case that""" start="00:04:04.540" video="qanda-llm" id="subtitle"]] +[[!template text="""like GPT is already for sure already read it,""" start="00:04:06.500" video="qanda-llm" id="subtitle"]] +[[!template text="""right? And so you could ask questions that""" start="00:04:09.760" video="qanda-llm" id="subtitle"]] +[[!template text="""are about Emacs and our ELISP or whatever""" start="00:04:13.460" video="qanda-llm" id="subtitle"]] +[[!template text="""part of the manual you want to find.""" start="00:04:15.200" video="qanda-llm" id="subtitle"]] +[[!template text="""And it will do a reasonably good job,""" start="00:04:19.760" video="qanda-llm" id="subtitle"]] +[[!template text="""especially the better models will do a""" start="00:04:22.280" video="qanda-llm" id="subtitle"]] +[[!template text="""reasonably good job of saying you something""" start="00:04:24.620" video="qanda-llm" id="subtitle"]] +[[!template text="""that is vaguely accurate.""" start="00:04:26.040" video="qanda-llm" id="subtitle"]] +[[!template text="""But if you do this retrieval augmented""" start="00:04:29.440" video="qanda-llm" id="subtitle"]] +[[!template text="""generation with embeddings,""" start="00:04:30.580" video="qanda-llm" id="subtitle"]] +[[!template text="""you can get something that is very accurate.""" start="00:04:32.640" video="qanda-llm" id="subtitle"]] +[[!template text="""At least I think. I haven't tried it,""" start="00:04:36.700" video="qanda-llm" id="subtitle"]] +[[!template text="""but this is a technique that works in other""" start="00:04:38.760" video="qanda-llm" id="subtitle"]] +[[!template text="""similar cases. So you can also imagine like,""" start="00:04:43.040" video="qanda-llm" id="subtitle"]] +[[!template text="""oh, this whole thing I said,""" start="00:04:44.320" video="qanda-llm" id="subtitle"]] +[[!template text="""like, oh, you can query for vague things and""" start="00:04:47.860" video="qanda-llm" id="subtitle"]] +[[!template text="""get parts of the manual,""" start="00:04:49.140" video="qanda-llm" id="subtitle"]] +[[!template text="""perhaps. I'm not exactly sure if that would""" start="00:04:52.680" video="qanda-llm" id="subtitle"]] +[[!template text="""be useful, but maybe. Usually when I'm""" start="00:04:55.120" video="qanda-llm" id="subtitle"]] +[[!template text="""looking things up in the Emacs manual or""" start="00:04:57.040" video="qanda-llm" id="subtitle"]] +[[!template text="""Elist manual, I have something extremely""" start="00:04:58.320" video="qanda-llm" id="subtitle"]] +[[!template text="""specific and I kind of know where to look.""" start="00:05:00.020" video="qanda-llm" id="subtitle"]] +[[!template text="""But having other ways to get at this""" start="00:05:02.960" video="qanda-llm" id="subtitle"]] +[[!template text="""information is always good.""" start="00:05:04.000" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Looks like they added a clarification""" start="00:05:10.240" video="qanda-llm" id="subtitle"]] +[[!template text="""if you would like to read that yourself,""" start="00:05:12.280" video="qanda-llm" id="subtitle"]] +[[!template text="""or would you like me to read it for you?""" start="00:05:14.180" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah. Yes, OK. It says,""" start="00:05:17.640" video="qanda-llm" id="subtitle"]] +[[!template text="""I've never tried. Yeah,""" start="00:05:20.460" video="qanda-llm" id="subtitle"]] +[[!template text="""the question is like OK,""" start="00:05:21.500" video="qanda-llm" id="subtitle"]] +[[!template text="""there is a difference between the kind of""" start="00:05:23.100" video="qanda-llm" id="subtitle"]] +[[!template text="""thing as I just described.""" start="00:05:23.860" video="qanda-llm" id="subtitle"]] +[[!template text="""I have not tried the difference with the EMAX""" start="00:05:26.200" video="qanda-llm" id="subtitle"]] +[[!template text="""manual itself. It'd be interesting to see""" start="00:05:31.560" video="qanda-llm" id="subtitle"]] +[[!template text="""what this is, but I would expect like these""" start="00:05:33.700" video="qanda-llm" id="subtitle"]] +[[!template text="""techniques, the retrieval augmented""" start="00:05:35.140" video="qanda-llm" id="subtitle"]] +[[!template text="""generation is generally pretty good.""" start="00:05:38.840" video="qanda-llm" id="subtitle"]] +[[!template text="""And I suspect it would,""" start="00:05:41.240" video="qanda-llm" id="subtitle"]] +[[!template text="""I would bet money on the fact that it's gonna""" start="00:05:43.580" video="qanda-llm" id="subtitle"]] +[[!template text="""give you, you know, better results than just,""" start="00:05:45.820" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, doing a free form query without any""" start="00:05:48.160" video="qanda-llm" id="subtitle"]] +[[!template text="""retrieval augmented generation.""" start="00:05:49.440" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool. Let's see. Next question.""" start="00:05:54.240" video="qanda-llm" id="subtitle"]] +[[!template text="""When deferring commit messages to an LLM,""" start="00:05:56.380" video="qanda-llm" id="subtitle"]] +[[!template text="""what, if anything, do you find you might have""" start="00:05:59.700" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: lost? Yeah, it's a good question.""" start="00:06:02.940" video="qanda-llm" id="subtitle"]] +[[!template text="""When deferring anything to a computer,""" start="00:06:06.060" video="qanda-llm" id="subtitle"]] +[[!template text="""like, you know, I used to have to remember""" start="00:06:08.860" video="qanda-llm" id="subtitle"]] +[[!template text="""how to get places, and now,""" start="00:06:11.200" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, on the few occasions which I drive,""" start="00:06:14.540" video="qanda-llm" id="subtitle"]] +[[!template text="""like, It could just tell me how to get""" start="00:06:16.560" video="qanda-llm" id="subtitle"]] +[[!template text="""places. So similar things could occur here""" start="00:06:21.960" video="qanda-llm" id="subtitle"]] +[[!template text="""where like, okay, I'm just leaving the LLM.""" start="00:06:24.960" video="qanda-llm" id="subtitle"]] +[[!template text="""And so I'm kind of missing out on some""" start="00:06:27.380" video="qanda-llm" id="subtitle"]] +[[!template text="""opportunity to think coherently about a""" start="00:06:30.040" video="qanda-llm" id="subtitle"]] +[[!template text="""particular commit. Particular commits are""" start="00:06:32.440" video="qanda-llm" id="subtitle"]] +[[!template text="""kind of low level. I don't think it's usually""" start="00:06:36.140" video="qanda-llm" id="subtitle"]] +[[!template text="""relatively obvious and what they're doing.""" start="00:06:39.340" video="qanda-llm" id="subtitle"]] +[[!template text="""And in this case, I think there's not much""" start="00:06:42.600" video="qanda-llm" id="subtitle"]] +[[!template text="""loss. But for sure, in other cases,""" start="00:06:44.220" video="qanda-llm" id="subtitle"]] +[[!template text="""if you're starting to get into situations""" start="00:06:46.400" video="qanda-llm" id="subtitle"]] +[[!template text="""where it's writing your emails and all this""" start="00:06:48.640" video="qanda-llm" id="subtitle"]] +[[!template text="""stuff. First of all, it's in 1 sense,""" start="00:06:52.920" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm not sure you might be losing something by""" start="00:06:55.580" video="qanda-llm" id="subtitle"]] +[[!template text="""delegating things. On the other hand,""" start="00:06:57.520" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, when you're interacting with these""" start="00:06:59.120" video="qanda-llm" id="subtitle"]] +[[!template text="""LLMs, you have to be extremely specific about""" start="00:07:01.280" video="qanda-llm" id="subtitle"]] +[[!template text="""what you want, or else it's just not going to""" start="00:07:03.120" video="qanda-llm" id="subtitle"]] +[[!template text="""do a good job. And that might actually be a""" start="00:07:07.540" video="qanda-llm" id="subtitle"]] +[[!template text="""good thing. So the question might be that""" start="00:07:09.440" video="qanda-llm" id="subtitle"]] +[[!template text="""maybe you might gain things by using an LLM""" start="00:07:11.820" video="qanda-llm" id="subtitle"]] +[[!template text="""to do your work. It might not actually even""" start="00:07:13.860" video="qanda-llm" id="subtitle"]] +[[!template text="""save you that much time,""" start="00:07:15.060" video="qanda-llm" id="subtitle"]] +[[!template text="""at least initially, because you have to kind""" start="00:07:18.480" video="qanda-llm" id="subtitle"]] +[[!template text="""of practice again super specific about what""" start="00:07:20.460" video="qanda-llm" id="subtitle"]] +[[!template text="""you want to get out of the output it's going""" start="00:07:22.740" video="qanda-llm" id="subtitle"]] +[[!template text="""to give you so like oh I'm you know maybe you""" start="00:07:26.940" video="qanda-llm" id="subtitle"]] +[[!template text="""know you're on the emacs devel mailing list""" start="00:07:29.600" video="qanda-llm" id="subtitle"]] +[[!template text="""and you're like okay write this email about""" start="00:07:31.780" video="qanda-llm" id="subtitle"]] +[[!template text="""this about this And here's what I want to""" start="00:07:34.000" video="qanda-llm" id="subtitle"]] +[[!template text="""say. And here's the kind of tone I want to""" start="00:07:35.370" video="qanda-llm" id="subtitle"]] +[[!template text="""use. And here's the like,""" start="00:07:36.020" video="qanda-llm" id="subtitle"]] +[[!template text="""oh, you might want to specify like everything""" start="00:07:37.660" video="qanda-llm" id="subtitle"]] +[[!template text="""that you kind of want to get into this.""" start="00:07:39.620" video="qanda-llm" id="subtitle"]] +[[!template text="""Usually it's easier just to write the email.""" start="00:07:42.180" video="qanda-llm" id="subtitle"]] +[[!template text="""But I think that practice of kind of""" start="00:07:45.600" video="qanda-llm" id="subtitle"]] +[[!template text="""understanding what you want is not something""" start="00:07:48.080" video="qanda-llm" id="subtitle"]] +[[!template text="""you normally do. And I think it's going to be""" start="00:07:52.680" video="qanda-llm" id="subtitle"]] +[[!template text="""an interesting exercise that will help people""" start="00:07:56.040" video="qanda-llm" id="subtitle"]] +[[!template text="""understand. That said,""" start="00:07:57.280" video="qanda-llm" id="subtitle"]] +[[!template text="""I haven't done that much of that,""" start="00:07:58.860" video="qanda-llm" id="subtitle"]] +[[!template text="""so I can't say, oh, yeah,""" start="00:07:59.900" video="qanda-llm" id="subtitle"]] +[[!template text="""I've done this and it works for me.""" start="00:08:01.080" video="qanda-llm" id="subtitle"]] +[[!template text="""Maybe. I think it's an interesting thing to""" start="00:08:03.000" video="qanda-llm" id="subtitle"]] +[[!template text="""explore.""" start="00:08:03.120" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure. Thanks. Let's see.""" start="00:08:07.720" video="qanda-llm" id="subtitle"]] +[[!template text="""Let's see. Can you share your font settings""" start="00:08:10.840" video="qanda-llm" id="subtitle"]] +[[!template text="""in your Emacs config? Those are some nice""" start="00:08:13.440" video="qanda-llm" id="subtitle"]] +[[!template text="""fonts for reading.""" start="00:08:14.200" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I think I was using Menlo at the time.""" start="00:08:18.900" video="qanda-llm" id="subtitle"]] +[[!template text="""Unfortunately, I don't save those kinds of""" start="00:08:20.840" video="qanda-llm" id="subtitle"]] +[[!template text="""things, like a history of this.""" start="00:08:21.940" video="qanda-llm" id="subtitle"]] +[[!template text="""I've kind of switched now to,""" start="00:08:24.000" video="qanda-llm" id="subtitle"]] +[[!template text="""what was that? I think I wrote it down in""" start="00:08:27.340" video="qanda-llm" id="subtitle"]] +[[!template text="""the, I switched to MunaSpace,""" start="00:08:29.440" video="qanda-llm" id="subtitle"]] +[[!template text="""which just came out like a week or 2 ago,""" start="00:08:31.920" video="qanda-llm" id="subtitle"]] +[[!template text="""and is also pretty cool.""" start="00:08:33.340" video="qanda-llm" id="subtitle"]] +[[!template text="""So I think it's Menlo.""" start="00:08:35.440" video="qanda-llm" id="subtitle"]] +[[!template text="""The internal question,""" start="00:08:37.380" video="qanda-llm" id="subtitle"]] +[[!template text="""what font are you using?""" start="00:08:38.400" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Indeed, yeah. It looks like someone guessed""" start="00:08:42.020" video="qanda-llm" id="subtitle"]] +[[!template text="""as well that it might be Menlo.""" start="00:08:43.780" video="qanda-llm" id="subtitle"]] +[[!template text="""OK, Cool. Yeah, next question.""" start="00:08:47.680" video="qanda-llm" id="subtitle"]] +[[!template text="""In terms of standardization,""" start="00:08:48.900" video="qanda-llm" id="subtitle"]] +[[!template text="""do you see a need for the medium to large""" start="00:08:53.260" video="qanda-llm" id="subtitle"]] +[[!template text="""scale effort needed? And then they also""" start="00:08:55.840" video="qanda-llm" id="subtitle"]] +[[!template text="""elaborate about it.""" start="00:08:56.960" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I mean, I do think,""" start="00:09:03.600" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't know if it's large scale,""" start="00:09:06.040" video="qanda-llm" id="subtitle"]] +[[!template text="""but at least it's probably medium scale.""" start="00:09:08.000" video="qanda-llm" id="subtitle"]] +[[!template text="""There's a lot of things that are missing that""" start="00:09:10.320" video="qanda-llm" id="subtitle"]] +[[!template text="""we don't have right now in emacs when you're""" start="00:09:12.260" video="qanda-llm" id="subtitle"]] +[[!template text="""dealing with LLMs. 1 is,""" start="00:09:13.660" video="qanda-llm" id="subtitle"]] +[[!template text="""a prompting system. And by that,""" start="00:09:18.240" video="qanda-llm" id="subtitle"]] +[[!template text="""I mean, you know, prompts are just like big""" start="00:09:21.820" video="qanda-llm" id="subtitle"]] +[[!template text="""blocks of text, but there's also senses that""" start="00:09:24.520" video="qanda-llm" id="subtitle"]] +[[!template text="""like prompts need to be composable and you""" start="00:09:28.260" video="qanda-llm" id="subtitle"]] +[[!template text="""need to be able to iterate on parts of the""" start="00:09:30.480" video="qanda-llm" id="subtitle"]] +[[!template text="""prompt. And so it's also customizable.""" start="00:09:36.600" video="qanda-llm" id="subtitle"]] +[[!template text="""Users might want to customize it.""" start="00:09:38.940" video="qanda-llm" id="subtitle"]] +[[!template text="""On the other hand, it's not super easy to""" start="00:09:41.260" video="qanda-llm" id="subtitle"]] +[[!template text="""write the prompt. So you want really good""" start="00:09:43.820" video="qanda-llm" id="subtitle"]] +[[!template text="""defaults. So the whole prompt system is kind""" start="00:09:47.900" video="qanda-llm" id="subtitle"]] +[[!template text="""of complicated. That needs to be kind of""" start="00:09:51.360" video="qanda-llm" id="subtitle"]] +[[!template text="""standardized, because I don't think there's""" start="00:09:52.580" video="qanda-llm" id="subtitle"]] +[[!template text="""any tools for doing something like that right""" start="00:09:54.380" video="qanda-llm" id="subtitle"]] +[[!template text="""now. I personally use my system,""" start="00:09:58.380" video="qanda-llm" id="subtitle"]] +[[!template text="""my note system for EKG.""" start="00:10:00.220" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't think that's appropriate for""" start="00:10:01.720" video="qanda-llm" id="subtitle"]] +[[!template text="""everyone, but it does,""" start="00:10:02.800" video="qanda-llm" id="subtitle"]] +[[!template text="""I did write it to have some of these""" start="00:10:04.480" video="qanda-llm" id="subtitle"]] +[[!template text="""capabilities of composability that I think""" start="00:10:06.540" video="qanda-llm" id="subtitle"]] +[[!template text="""are useful for a prompt generation.""" start="00:10:08.360" video="qanda-llm" id="subtitle"]] +[[!template text="""It'd be nice to have a system like that,""" start="00:10:11.940" video="qanda-llm" id="subtitle"]] +[[!template text="""but for general use. I don't,""" start="00:10:15.660" video="qanda-llm" id="subtitle"]] +[[!template text="""this is something I've been meaning to think""" start="00:10:17.840" video="qanda-llm" id="subtitle"]] +[[!template text="""about, like how to do it,""" start="00:10:18.840" video="qanda-llm" id="subtitle"]] +[[!template text="""but like this, you know,""" start="00:10:19.760" video="qanda-llm" id="subtitle"]] +[[!template text="""if someone's interested in getting this area,""" start="00:10:21.260" video="qanda-llm" id="subtitle"]] +[[!template text="""like, I would love to chat about that or,""" start="00:10:26.120" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, I think there's a lot of""" start="00:10:27.600" video="qanda-llm" id="subtitle"]] +[[!template text="""interesting ideas that we could have to have""" start="00:10:31.020" video="qanda-llm" id="subtitle"]] +[[!template text="""a system that allows us to make progress""" start="00:10:34.080" video="qanda-llm" id="subtitle"]] +[[!template text="""here. And also, I think there's more to""" start="00:10:38.860" video="qanda-llm" id="subtitle"]] +[[!template text="""standardization to be done.""" start="00:10:40.520" video="qanda-llm" id="subtitle"]] +[[!template text="""1 thing I'd also like to see that we haven't""" start="00:10:42.820" video="qanda-llm" id="subtitle"]] +[[!template text="""done yet is a system for standardizing on""" start="00:10:47.020" video="qanda-llm" id="subtitle"]] +[[!template text="""getting structured output.""" start="00:10:48.060" video="qanda-llm" id="subtitle"]] +[[!template text="""This is gonna be super useful.""" start="00:10:49.640" video="qanda-llm" id="subtitle"]] +[[!template text="""I have this for open AIs API,""" start="00:10:52.280" video="qanda-llm" id="subtitle"]] +[[!template text="""cause they support it.""" start="00:10:53.560" video="qanda-llm" id="subtitle"]] +[[!template text="""And it's really nice, cause then you can""" start="00:10:55.940" video="qanda-llm" id="subtitle"]] +[[!template text="""write elist functions that like,""" start="00:10:57.440" video="qanda-llm" id="subtitle"]] +[[!template text="""okay, I'm going to call the LLM.""" start="00:10:59.380" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm gonna get structured output.""" start="00:11:00.760" video="qanda-llm" id="subtitle"]] +[[!template text="""I know what that structure is going to be.""" start="00:11:02.040" video="qanda-llm" id="subtitle"]] +[[!template text="""It's not going to be just a big block of""" start="00:11:03.480" video="qanda-llm" id="subtitle"]] +[[!template text="""text. I could turn it into a,""" start="00:11:05.660" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, a P list or something.""" start="00:11:07.000" video="qanda-llm" id="subtitle"]] +[[!template text="""And then I could get the values out of that P""" start="00:11:09.280" video="qanda-llm" id="subtitle"]] +[[!template text="""list. And I know that way I could do,""" start="00:11:11.880" video="qanda-llm" id="subtitle"]] +[[!template text="""I could write actual apps that are,""" start="00:11:14.220" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, very, very sort of,""" start="00:11:18.300" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, useful for very specific purposes""" start="00:11:20.200" video="qanda-llm" id="subtitle"]] +[[!template text="""and not just for text generation.""" start="00:11:21.900" video="qanda-llm" id="subtitle"]] +[[!template text="""And I think that's 1 of the most important""" start="00:11:24.000" video="qanda-llm" id="subtitle"]] +[[!template text="""things we want to do. And I have some ideas""" start="00:11:27.100" video="qanda-llm" id="subtitle"]] +[[!template text="""about how to do it. I just haven't pursued""" start="00:11:28.840" video="qanda-llm" id="subtitle"]] +[[!template text="""those yet. But if other people have ideas,""" start="00:11:31.640" video="qanda-llm" id="subtitle"]] +[[!template text="""I think this would be really interesting to""" start="00:11:34.340" video="qanda-llm" id="subtitle"]] +[[!template text="""add to the LLM package.""" start="00:11:35.520" video="qanda-llm" id="subtitle"]] +[[!template text="""So contact me there.""" start="00:11:37.260" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Awesome. Quick note before we continue.""" start="00:11:42.100" video="qanda-llm" id="subtitle"]] +[[!template text="""So I'm not sure how long we're going to be on""" start="00:11:44.440" video="qanda-llm" id="subtitle"]] +[[!template text="""stream for, because this is the last talk""" start="00:11:46.040" video="qanda-llm" id="subtitle"]] +[[!template text="""before the break. If we are on the stream""" start="00:11:48.640" video="qanda-llm" id="subtitle"]] +[[!template text="""long-term, then great.""" start="00:11:49.840" video="qanda-llm" id="subtitle"]] +[[!template text="""But if not, folks are welcome to continue""" start="00:11:51.820" video="qanda-llm" id="subtitle"]] +[[!template text="""writing questions on the pad.""" start="00:11:53.320" video="qanda-llm" id="subtitle"]] +[[!template text="""And hopefully, Andrew will get to them at""" start="00:11:55.140" video="qanda-llm" id="subtitle"]] +[[!template text="""some point. Or if Andrew maybe has some extra""" start="00:11:58.020" video="qanda-llm" id="subtitle"]] +[[!template text="""time available and wants to stay on""" start="00:11:59.960" video="qanda-llm" id="subtitle"]] +[[!template text="""BigBlueButton here, then folks are also""" start="00:12:01.640" video="qanda-llm" id="subtitle"]] +[[!template text="""welcome to join here and chat with Andrew""" start="00:12:03.940" video="qanda-llm" id="subtitle"]] +[[!template text="""directly as well. Okay,""" start="00:12:08.940" video="qanda-llm" id="subtitle"]] +[[!template text="""awesome. So yeah, the next question is,""" start="00:12:10.740" video="qanda-llm" id="subtitle"]] +[[!template text="""what are your thoughts on the carbon""" start="00:12:12.040" video="qanda-llm" id="subtitle"]] +[[!template text="""footprint of LLM usage?""" start="00:12:14.060" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, it's a really interesting question.""" start="00:12:17.200" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't have any particular knowledge or""" start="00:12:23.180" video="qanda-llm" id="subtitle"]] +[[!template text="""opinions about that. It's something I think""" start="00:12:25.440" video="qanda-llm" id="subtitle"]] +[[!template text="""we should all be educating ourselves more""" start="00:12:26.980" video="qanda-llm" id="subtitle"]] +[[!template text="""about. It is really, I mean,""" start="00:12:32.240" video="qanda-llm" id="subtitle"]] +[[!template text="""there's 2 parts of this,""" start="00:12:33.040" video="qanda-llm" id="subtitle"]] +[[!template text="""right? They take a, there's a huge amount of""" start="00:12:35.380" video="qanda-llm" id="subtitle"]] +[[!template text="""carbon footprint involved in training these""" start="00:12:37.160" video="qanda-llm" id="subtitle"]] +[[!template text="""things. Then running them is relatively""" start="00:12:38.720" video="qanda-llm" id="subtitle"]] +[[!template text="""lightweight. So the question is not""" start="00:12:42.540" video="qanda-llm" id="subtitle"]] +[[!template text="""necessarily like once it's trained,""" start="00:12:44.440" video="qanda-llm" id="subtitle"]] +[[!template text="""like I don't feel like it's a big deal to""" start="00:12:46.480" video="qanda-llm" id="subtitle"]] +[[!template text="""keep using it, but like training these things""" start="00:12:48.280" video="qanda-llm" id="subtitle"]] +[[!template text="""is kind of like the big carbon cost of it.""" start="00:12:50.680" video="qanda-llm" id="subtitle"]] +[[!template text="""But like right now, the way everything's""" start="00:12:53.680" video="qanda-llm" id="subtitle"]] +[[!template text="""going, like every, you know,""" start="00:12:56.040" video="qanda-llm" id="subtitle"]] +[[!template text="""all, you know, the top 5 or 6 tech companies""" start="00:12:59.060" video="qanda-llm" id="subtitle"]] +[[!template text="""are all training their LLMs,""" start="00:13:00.900" video="qanda-llm" id="subtitle"]] +[[!template text="""and this is all costing a giant amount of""" start="00:13:03.580" video="qanda-llm" id="subtitle"]] +[[!template text="""carbon probably. On the other hand these same""" start="00:13:06.820" video="qanda-llm" id="subtitle"]] +[[!template text="""companies are pretty good about using the""" start="00:13:08.560" video="qanda-llm" id="subtitle"]] +[[!template text="""least amount of carbon necessary you know""" start="00:13:10.260" video="qanda-llm" id="subtitle"]] +[[!template text="""they have their own their tricks for doing""" start="00:13:12.340" video="qanda-llm" id="subtitle"]] +[[!template text="""things very efficiently.""" start="00:13:13.260" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool next question, LLMs are slow and""" start="00:13:22.100" video="qanda-llm" id="subtitle"]] +[[!template text="""responding. Do you think Emacs should provide""" start="00:13:24.000" video="qanda-llm" id="subtitle"]] +[[!template text="""more async primitives to keep it responsive?""" start="00:13:26.680" video="qanda-llm" id="subtitle"]] +[[!template text="""Like the URL retrieve is quite bad at""" start="00:13:29.380" video="qanda-llm" id="subtitle"]] +[[!template text="""building API clients with it.""" start="00:13:31.720" video="qanda-llm" id="subtitle"]] +[[!template text="""Building API clients with it?""" start="00:13:31.920" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah. Well, OK, so first of all,""" start="00:13:36.400" video="qanda-llm" id="subtitle"]] +[[!template text="""people should be using the LLM client.""" start="00:13:40.240" video="qanda-llm" id="subtitle"]] +[[!template text="""And So right now, 1 thing I should have""" start="00:13:48.740" video="qanda-llm" id="subtitle"]] +[[!template text="""mentioned at the top is that there are new""" start="00:13:50.220" video="qanda-llm" id="subtitle"]] +[[!template text="""packages that I recorded this talk that you""" start="00:13:52.500" video="qanda-llm" id="subtitle"]] +[[!template text="""just saw several months ago.""" start="00:13:54.480" video="qanda-llm" id="subtitle"]] +[[!template text="""And so like Elama, there's this package Elama""" start="00:13:57.780" video="qanda-llm" id="subtitle"]] +[[!template text="""that came out that is using the LM package.""" start="00:13:59.700" video="qanda-llm" id="subtitle"]] +[[!template text="""And so for example, it doesn't need to worry""" start="00:14:02.440" video="qanda-llm" id="subtitle"]] +[[!template text="""about this sort of thing because it just uses""" start="00:14:05.140" video="qanda-llm" id="subtitle"]] +[[!template text="""LLM and package and the LLM package worries""" start="00:14:07.560" video="qanda-llm" id="subtitle"]] +[[!template text="""about this. And while I'm on the subject of""" start="00:14:11.680" video="qanda-llm" id="subtitle"]] +[[!template text="""things I forgot to mention,""" start="00:14:12.540" video="qanda-llm" id="subtitle"]] +[[!template text="""I also should just mention very quickly that""" start="00:14:15.140" video="qanda-llm" id="subtitle"]] +[[!template text="""there is now an open source model,""" start="00:14:17.020" video="qanda-llm" id="subtitle"]] +[[!template text="""Mistral. And so that's kind of this new thing""" start="00:14:21.680" video="qanda-llm" id="subtitle"]] +[[!template text="""on the scene that happened after I recorded""" start="00:14:23.860" video="qanda-llm" id="subtitle"]] +[[!template text="""my talk. And I think it's super important to""" start="00:14:26.240" video="qanda-llm" id="subtitle"]] +[[!template text="""the community and important that we have the""" start="00:14:28.660" video="qanda-llm" id="subtitle"]] +[[!template text="""opportunity to use that if we want to.""" start="00:14:30.620" video="qanda-llm" id="subtitle"]] +[[!template text="""Okay, but to answer the actual question,""" start="00:14:33.160" video="qanda-llm" id="subtitle"]] +[[!template text="""there has been some talk about the problems""" start="00:14:37.660" video="qanda-llm" id="subtitle"]] +[[!template text="""with URL retrieve in the URL package in""" start="00:14:40.680" video="qanda-llm" id="subtitle"]] +[[!template text="""general in EmacsDevEl.""" start="00:14:42.200" video="qanda-llm" id="subtitle"]] +[[!template text="""It's not great. I would like to have better""" start="00:14:46.760" video="qanda-llm" id="subtitle"]] +[[!template text="""primitives. And I've asked the author of""" start="00:14:50.900" video="qanda-llm" id="subtitle"]] +[[!template text="""Please PLZ to kind of provide some necessary""" start="00:14:54.060" video="qanda-llm" id="subtitle"]] +[[!template text="""callbacks. I think that's a great library.""" start="00:14:56.120" video="qanda-llm" id="subtitle"]] +[[!template text="""And I'd like to see that kind of like,""" start="00:15:00.280" video="qanda-llm" id="subtitle"]] +[[!template text="""It's nice that we have options,""" start="00:15:01.320" video="qanda-llm" id="subtitle"]] +[[!template text="""and that is an option that uses curl on the""" start="00:15:03.340" video="qanda-llm" id="subtitle"]] +[[!template text="""back end, and that has some benefits.""" start="00:15:05.140" video="qanda-llm" id="subtitle"]] +[[!template text="""So there's this big debate about whether we""" start="00:15:09.060" video="qanda-llm" id="subtitle"]] +[[!template text="""should have primitives or just use curl.""" start="00:15:10.600" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm not exactly sure what the right call is,""" start="00:15:13.340" video="qanda-llm" id="subtitle"]] +[[!template text="""but there has been discussions about this.""" start="00:15:15.320" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Excellent. And someone commented that GPTEL""" start="00:15:19.540" video="qanda-llm" id="subtitle"]] +[[!template text="""is async and apparently very good at tracking""" start="00:15:21.820" video="qanda-llm" id="subtitle"]] +[[!template text="""the point.""" start="00:15:22.300" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, yes, GPTEL has similar functionalities""" start="00:15:26.680" video="qanda-llm" id="subtitle"]] +[[!template text="""to LLM, although I believe it's going to move""" start="00:15:29.800" video="qanda-llm" id="subtitle"]] +[[!template text="""to LLM itself sometime soon.""" start="00:15:33.040" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: Next question, speaking of which,""" start="00:15:39.480" video="qanda-llm" id="subtitle"]] +[[!template text="""anyone trained or fine-tuned or prompted a""" start="00:15:42.440" video="qanda-llm" id="subtitle"]] +[[!template text="""model with their org data yet and applied it""" start="00:15:44.680" video="qanda-llm" id="subtitle"]] +[[!template text="""to interesting use cases like planning,""" start="00:15:46.560" video="qanda-llm" id="subtitle"]] +[[!template text="""scheduling, et cetera,""" start="00:15:47.920" video="qanda-llm" id="subtitle"]] +[[!template text="""and maybe care to comment?""" start="00:15:49.320" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't know anyone who is doing that.""" start="00:15:54.620" video="qanda-llm" id="subtitle"]] +[[!template text="""I think it is interesting.""" start="00:15:55.860" video="qanda-llm" id="subtitle"]] +[[!template text="""Like this is what I kind of mentioned at the""" start="00:15:57.800" video="qanda-llm" id="subtitle"]] +[[!template text="""very end of the talk. There is a lot of stuff""" start="00:16:01.060" video="qanda-llm" id="subtitle"]] +[[!template text="""there like you could you know if you""" start="00:16:02.440" video="qanda-llm" id="subtitle"]] +[[!template text="""especially mean an LLM can kind of work as""" start="00:16:04.760" video="qanda-llm" id="subtitle"]] +[[!template text="""sort of like a secretary kind of person that""" start="00:16:07.940" video="qanda-llm" id="subtitle"]] +[[!template text="""could help you prioritize Still it's a""" start="00:16:12.180" video="qanda-llm" id="subtitle"]] +[[!template text="""slightly unclear how what the best way to use""" start="00:16:14.760" video="qanda-llm" id="subtitle"]] +[[!template text="""it is So I think there's more of a question""" start="00:16:16.480" video="qanda-llm" id="subtitle"]] +[[!template text="""for the community about like what people have""" start="00:16:18.340" video="qanda-llm" id="subtitle"]] +[[!template text="""been trying. I see someone has mentioned that""" start="00:16:21.140" video="qanda-llm" id="subtitle"]] +[[!template text="""they are using it for weekly review.""" start="00:16:23.400" video="qanda-llm" id="subtitle"]] +[[!template text="""And it's kind of nice to like,""" start="00:16:26.940" video="qanda-llm" id="subtitle"]] +[[!template text="""maybe you could read your agenda or maybe""" start="00:16:29.060" video="qanda-llm" id="subtitle"]] +[[!template text="""this for like weekly review.""" start="00:16:30.480" video="qanda-llm" id="subtitle"]] +[[!template text="""It could like read all the stuff you've done""" start="00:16:32.040" video="qanda-llm" id="subtitle"]] +[[!template text="""and ask you questions about it.""" start="00:16:33.340" video="qanda-llm" id="subtitle"]] +[[!template text="""And like, what should happen next?""" start="00:16:35.020" video="qanda-llm" id="subtitle"]] +[[!template text="""Or like, is this going to cause a problem?""" start="00:16:36.520" video="qanda-llm" id="subtitle"]] +[[!template text="""Like, I can, I can understand if that could""" start="00:16:39.060" video="qanda-llm" id="subtitle"]] +[[!template text="""happen? That's like, that's kind of nice.""" start="00:16:40.860" video="qanda-llm" id="subtitle"]] +[[!template text="""And this kind of people have had good success""" start="00:16:43.660" video="qanda-llm" id="subtitle"]] +[[!template text="""out of using these LLMs to bounce ideas off""" start="00:16:48.540" video="qanda-llm" id="subtitle"]] +[[!template text="""of are, you know, for,""" start="00:16:49.920" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, I've seen people say that like they""" start="00:16:52.680" video="qanda-llm" id="subtitle"]] +[[!template text="""want, they use it for reading and they kind""" start="00:16:55.360" video="qanda-llm" id="subtitle"]] +[[!template text="""of dialogue with the LM to kind of like do""" start="00:16:58.520" video="qanda-llm" id="subtitle"]] +[[!template text="""sort of active reading.""" start="00:16:59.500" video="qanda-llm" id="subtitle"]] +[[!template text="""So you can imagine doing something similar""" start="00:17:02.500" video="qanda-llm" id="subtitle"]] +[[!template text="""with your tasks where it's sort of you're""" start="00:17:04.400" video="qanda-llm" id="subtitle"]] +[[!template text="""engaged in dialogue about like planning your""" start="00:17:06.560" video="qanda-llm" id="subtitle"]] +[[!template text="""tax with some with a alum that could kind of""" start="00:17:08.880" video="qanda-llm" id="subtitle"]] +[[!template text="""understand what those are and ask you some""" start="00:17:10.800" video="qanda-llm" id="subtitle"]] +[[!template text="""questions I think it. You know,""" start="00:17:13.780" video="qanda-llm" id="subtitle"]] +[[!template text="""if it'd be nice. So, the problem is like""" start="00:17:16.839" video="qanda-llm" id="subtitle"]] +[[!template text="""there's no great way to share all this stuff.""" start="00:17:18.480" video="qanda-llm" id="subtitle"]] +[[!template text="""I guess if you have something like this,""" start="00:17:20.720" video="qanda-llm" id="subtitle"]] +[[!template text="""put it on Reddit. If you don't have Reddit,""" start="00:17:23.300" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't know what to do.""" start="00:17:24.599" video="qanda-llm" id="subtitle"]] +[[!template text="""I would say put it somewhere.""" start="00:17:26.000" video="qanda-llm" id="subtitle"]] +[[!template text="""At the very least, I could maybe open up like""" start="00:17:28.840" video="qanda-llm" id="subtitle"]] +[[!template text="""an LLM discussion session on the LLM package""" start="00:17:31.320" video="qanda-llm" id="subtitle"]] +[[!template text="""GitHub, But not everyone likes to use GitHub.""" start="00:17:34.000" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't know. It'd be nice if there's a""" start="00:17:36.100" video="qanda-llm" id="subtitle"]] +[[!template text="""mailing list or IRC chat for this sort of""" start="00:17:38.940" video="qanda-llm" id="subtitle"]] +[[!template text="""thing. But there isn't at the moment.""" start="00:17:40.840" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. Let's see. I think that's the end""" start="00:17:46.560" video="qanda-llm" id="subtitle"]] +[[!template text="""of the questions on the pad so far.""" start="00:17:48.080" video="qanda-llm" id="subtitle"]] +[[!template text="""There was also some discussion or some""" start="00:17:51.020" video="qanda-llm" id="subtitle"]] +[[!template text="""chatter, I believe, on IRC.""" start="00:17:52.260" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm not sure. Andrew, are you on IRC right""" start="00:17:54.560" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I am, but I don't think I'm on any place that""" start="00:18:00.060" video="qanda-llm" id="subtitle"]] +[[!template text="""has the chatter. So if there's chatter,""" start="00:18:01.400" video="qanda-llm" id="subtitle"]] +[[!template text="""then I'm not seeing it.""" start="00:18:02.440" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: now? Okay. Yeah, it was in the emacsconf-dev""" start="00:18:04.600" video="qanda-llm" id="subtitle"]] +[[!template text="""channel.""" start="00:18:06.760" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, let me see if I can.""" start="00:18:09.600" video="qanda-llm" id="subtitle"]] +[[!template text="""Oh, yes. I mean, I could see the channel,""" start="00:18:25.600" video="qanda-llm" id="subtitle"]] +[[!template text="""but I missed whatever came before.""" start="00:18:27.520" video="qanda-llm" id="subtitle"]] +[[!template text="""So if there's anything you want to kind of""" start="00:18:29.340" video="qanda-llm" id="subtitle"]] +[[!template text="""call out, I can try to answer it here.""" start="00:18:30.840" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: OK, cool. I believe at least 2 other folks""" start="00:18:35.320" video="qanda-llm" id="subtitle"]] +[[!template text="""who are participating in the discussion there""" start="00:18:37.500" video="qanda-llm" id="subtitle"]] +[[!template text="""who have also joined here on BigBlueButton,""" start="00:18:40.120" video="qanda-llm" id="subtitle"]] +[[!template text="""Codin Quark and AeonTurn92.""" start="00:18:42.440" video="qanda-llm" id="subtitle"]] +[[!template text="""So you folks, if Andrew is still available""" start="00:18:47.000" video="qanda-llm" id="subtitle"]] +[[!template text="""and has time, you're welcome to chat here and""" start="00:18:50.460" video="qanda-llm" id="subtitle"]] +[[!template text="""ask questions or discuss here as well.""" start="00:18:53.000" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: 1 Thank you. Thank you for your help,""" start="00:18:55.580" video="qanda-llm" id="subtitle"]] +[[!template text="""and thank you for reading all the questions.""" start="00:18:57.740" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: AUDIENCE 2 Cheers, and thanks to you for a""" start="00:18:59.700" video="qanda-llm" id="subtitle"]] +[[!template text="""great talk and the discussion.""" start="00:19:00.540" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: AUDIENCE AUDIENCE 1 Thank you.""" start="00:19:01.880" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: AUDIENCE 2 Cheers.""" start="00:19:03.140" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: So I'll just, I will wait here and see if""" start="00:19:07.900" video="qanda-llm" id="subtitle"]] +[[!template text="""there's any questions.""" start="00:19:08.320" video="qanda-llm" id="subtitle"]] +[[!template text="""If not, I will log off after a few minutes.""" start="00:19:10.760" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, I guess since we were mentioned that""" start="00:19:15.900" video="qanda-llm" id="subtitle"]] +[[!template text="""there was a small chat about local alarms.""" start="00:19:18.480" video="qanda-llm" id="subtitle"]] +[[!template text="""Because chat dpt is nice,""" start="00:19:22.640" video="qanda-llm" id="subtitle"]] +[[!template text="""no, but privacy concerns,""" start="00:19:25.600" video="qanda-llm" id="subtitle"]] +[[!template text="""and it's not free and stuff.""" start="00:19:27.380" video="qanda-llm" id="subtitle"]] +[[!template text="""Which, so The question is,""" start="00:19:31.000" video="qanda-llm" id="subtitle"]] +[[!template text="""what is the promise for local models?""" start="00:19:36.960" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, so local is definitely...""" start="00:19:39.660" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Or at least open source.""" start="00:19:41.380" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, so there is a local open source model,""" start="00:19:45.680" video="qanda-llm" id="subtitle"]] +[[!template text="""Misral, which you could run.""" start="00:19:47.960" video="qanda-llm" id="subtitle"]] +[[!template text="""The LLM package allows you to use,""" start="00:19:51.340" video="qanda-llm" id="subtitle"]] +[[!template text="""I think there's 3 kind of local things you""" start="00:19:56.120" video="qanda-llm" id="subtitle"]] +[[!template text="""could use. Like many of these things,""" start="00:19:58.100" video="qanda-llm" id="subtitle"]] +[[!template text="""there's like many kind of ways to do the same""" start="00:20:00.220" video="qanda-llm" id="subtitle"]] +[[!template text="""sort of thing. So LLM is supporting OLAMMA""" start="00:20:03.960" video="qanda-llm" id="subtitle"]] +[[!template text="""and LLAMMA-CPP. And let's see,""" start="00:20:10.240" video="qanda-llm" id="subtitle"]] +[[!template text="""1 other. Which 1 is it?""" start="00:20:12.240" video="qanda-llm" id="subtitle"]] +[[!template text="""And maybe that's it. Maybe the,""" start="00:20:18.420" video="qanda-llm" id="subtitle"]] +[[!template text="""oh, GPT for all. So each 1 of these kind of""" start="00:20:21.820" video="qanda-llm" id="subtitle"]] +[[!template text="""has slightly different functionality.""" start="00:20:23.100" video="qanda-llm" id="subtitle"]] +[[!template text="""For example, I think GPT for all doesn't""" start="00:20:26.820" video="qanda-llm" id="subtitle"]] +[[!template text="""support embeddings. And I hear that Olama's""" start="00:20:31.780" video="qanda-llm" id="subtitle"]] +[[!template text="""embeddings are kind of currently broken.""" start="00:20:33.740" video="qanda-llm" id="subtitle"]] +[[!template text="""But basically they should support everything.""" start="00:20:35.920" video="qanda-llm" id="subtitle"]] +[[!template text="""And the open source models are,""" start="00:20:39.100" video="qanda-llm" id="subtitle"]] +[[!template text="""so the local models are reasonably good.""" start="00:20:43.180" video="qanda-llm" id="subtitle"]] +[[!template text="""Like I don't think you'd use them and be""" start="00:20:44.760" video="qanda-llm" id="subtitle"]] +[[!template text="""like, what is this horrible nonsense?""" start="00:20:46.200" video="qanda-llm" id="subtitle"]] +[[!template text="""Like it's, it gives you relatively good""" start="00:20:50.200" video="qanda-llm" id="subtitle"]] +[[!template text="""results. Like it's not gonna be at the level""" start="00:20:51.820" video="qanda-llm" id="subtitle"]] +[[!template text="""of like GPT 3.5 or 4, but it's not far away""" start="00:20:56.060" video="qanda-llm" id="subtitle"]] +[[!template text="""from GPT 3.5, I think.""" start="00:20:57.720" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: I'm just saying that Olam has like a presets""" start="00:21:02.380" video="qanda-llm" id="subtitle"]] +[[!template text="""for connecting the actual working servers for""" start="00:21:05.940" video="qanda-llm" id="subtitle"]] +[[!template text="""Olama?""" start="00:21:06.300" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: So, I'll try. Yeah, so you could,""" start="00:21:08.560" video="qanda-llm" id="subtitle"]] +[[!template text="""what you could do is you could like for""" start="00:21:09.860" video="qanda-llm" id="subtitle"]] +[[!template text="""example you could download Olama which is""" start="00:21:11.940" video="qanda-llm" id="subtitle"]] +[[!template text="""just a way of setting up local models and""" start="00:21:15.780" video="qanda-llm" id="subtitle"]] +[[!template text="""running local models on your machine.""" start="00:21:17.320" video="qanda-llm" id="subtitle"]] +[[!template text="""So typically what it does,""" start="00:21:18.580" video="qanda-llm" id="subtitle"]] +[[!template text="""you like download a program,""" start="00:21:19.720" video="qanda-llm" id="subtitle"]] +[[!template text="""let's say Olama. Then Olama will have the""" start="00:21:23.720" video="qanda-llm" id="subtitle"]] +[[!template text="""ability to download models.""" start="00:21:24.940" video="qanda-llm" id="subtitle"]] +[[!template text="""And so you could choose from just a host of""" start="00:21:27.240" video="qanda-llm" id="subtitle"]] +[[!template text="""different models. Each 1 of these things has""" start="00:21:29.280" video="qanda-llm" id="subtitle"]] +[[!template text="""a bunch of different models.""" start="00:21:30.200" video="qanda-llm" id="subtitle"]] +[[!template text="""So it downloads all these things to your""" start="00:21:31.920" video="qanda-llm" id="subtitle"]] +[[!template text="""machine. But I would say that the key problem""" start="00:21:36.600" video="qanda-llm" id="subtitle"]] +[[!template text="""here is that it requires a fairly beefy""" start="00:21:40.200" video="qanda-llm" id="subtitle"]] +[[!template text="""machine.""" start="00:21:40.580" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: So. Yeah, yeah, of course.""" start="00:21:42.600" video="qanda-llm" id="subtitle"]] +[[!template text="""Why I was asking, because you briefly""" start="00:21:45.060" video="qanda-llm" id="subtitle"]] +[[!template text="""mentioned that there are some Israeli""" start="00:21:46.440" video="qanda-llm" id="subtitle"]] +[[!template text="""servers. I understand that they run it like a""" start="00:21:52.300" video="qanda-llm" id="subtitle"]] +[[!template text="""government or stuff like that?""" start="00:21:53.680" video="qanda-llm" id="subtitle"]] +[[!template text="""No, no, sorry. People want everyone?""" start="00:21:55.440" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't, I mean, maybe you've said something""" start="00:21:59.340" video="qanda-llm" id="subtitle"]] +[[!template text="""that sounded like Israeli servers.""" start="00:22:00.620" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay, okay.""" start="00:22:01.620" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I think- There's no government LLMs as far as""" start="00:22:04.920" video="qanda-llm" id="subtitle"]] +[[!template text="""I know. Although, I'm sure the governments""" start="00:22:06.820" video="qanda-llm" id="subtitle"]] +[[!template text="""are working on their own LLMs,""" start="00:22:08.200" video="qanda-llm" id="subtitle"]] +[[!template text="""et cetera. But yeah, basically your choices""" start="00:22:10.980" video="qanda-llm" id="subtitle"]] +[[!template text="""are spend a, I mean, if you use open AI or""" start="00:22:15.060" video="qanda-llm" id="subtitle"]] +[[!template text="""something or anything else,""" start="00:22:16.080" video="qanda-llm" id="subtitle"]] +[[!template text="""you're really not spending any money.""" start="00:22:17.960" video="qanda-llm" id="subtitle"]] +[[!template text="""Like I've never been able to spend any money""" start="00:22:20.560" video="qanda-llm" id="subtitle"]] +[[!template text="""on OpenAI. Like unless you're doing something""" start="00:22:23.680" video="qanda-llm" id="subtitle"]] +[[!template text="""very intensive and really are using it to,""" start="00:22:25.840" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, if you're using it for your""" start="00:22:28.000" video="qanda-llm" id="subtitle"]] +[[!template text="""personal use, it's just hard to spend any""" start="00:22:29.620" video="qanda-llm" id="subtitle"]] +[[!template text="""money. But on the other hand,""" start="00:22:31.720" video="qanda-llm" id="subtitle"]] +[[!template text="""it's not free. So you can,""" start="00:22:32.780" video="qanda-llm" id="subtitle"]] +[[!template text="""you know,""" start="00:22:33.040" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Actually, it's rather cheap.""" start="00:22:36.300" video="qanda-llm" id="subtitle"]] +[[!template text="""There's no question about that.""" start="00:22:37.680" video="qanda-llm" id="subtitle"]] +[[!template text="""The problem is that it has a bad track record""" start="00:22:40.580" video="qanda-llm" id="subtitle"]] +[[!template text="""on privacy.""" start="00:22:41.580" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, that's, I think that is a key problem.""" start="00:22:45.540" video="qanda-llm" id="subtitle"]] +[[!template text="""This is probably the number 1 reason why you""" start="00:22:48.120" video="qanda-llm" id="subtitle"]] +[[!template text="""might want to use a local AI,""" start="00:22:51.840" video="qanda-llm" id="subtitle"]] +[[!template text="""a local LLM. Another 1 is like,""" start="00:22:54.720" video="qanda-llm" id="subtitle"]] +[[!template text="""you may not agree with the decisions.""" start="00:22:57.400" video="qanda-llm" id="subtitle"]] +[[!template text="""You know, there's a lot of trust and safety""" start="00:23:00.360" video="qanda-llm" id="subtitle"]] +[[!template text="""stuff that these companies have to do.""" start="00:23:05.140" video="qanda-llm" id="subtitle"]] +[[!template text="""Like they don't want like the LMs to kind of""" start="00:23:09.020" video="qanda-llm" id="subtitle"]] +[[!template text="""like give you, like tell you how you can make""" start="00:23:11.400" video="qanda-llm" id="subtitle"]] +[[!template text="""meth or how you can make a bomb,""" start="00:23:13.180" video="qanda-llm" id="subtitle"]] +[[!template text="""which they would do. They would totally do""" start="00:23:14.960" video="qanda-llm" id="subtitle"]] +[[!template text="""it. So, But each time you kind of restrict""" start="00:23:19.580" video="qanda-llm" id="subtitle"]] +[[!template text="""what is happening with what you can get out""" start="00:23:22.540" video="qanda-llm" id="subtitle"]] +[[!template text="""of the LM, it gets a little worse.""" start="00:23:23.860" video="qanda-llm" id="subtitle"]] +[[!template text="""So some people""" start="00:23:24.960" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: want to have local. That's expected.""" start="00:23:27.040" video="qanda-llm" id="subtitle"]] +[[!template text="""I guess even open source language modules""" start="00:23:31.080" video="qanda-llm" id="subtitle"]] +[[!template text="""will soon have HR spaces because it's simply""" start="00:23:33.540" video="qanda-llm" id="subtitle"]] +[[!template text="""a legal issue.""" start="00:23:34.720" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: I think that's true. I also think that there""" start="00:23:40.760" video="qanda-llm" id="subtitle"]] +[[!template text="""probably will be, although I don't know of""" start="00:23:42.880" video="qanda-llm" id="subtitle"]] +[[!template text="""any offhand, that will are completely""" start="00:23:45.060" video="qanda-llm" id="subtitle"]] +[[!template text="""uncensored. I know people are interested and""" start="00:23:46.960" video="qanda-llm" id="subtitle"]] +[[!template text="""are running uncensored models.""" start="00:23:48.240" video="qanda-llm" id="subtitle"]] +[[!template text="""I don't know how to do it.""" start="00:23:49.440" video="qanda-llm" id="subtitle"]] +[[!template text="""I think it's a little bit dubious,""" start="00:23:52.280" video="qanda-llm" id="subtitle"]] +[[!template text="""but some people do want to do it.""" start="00:23:54.960" video="qanda-llm" id="subtitle"]] +[[!template text="""There's another reason for using local""" start="00:23:56.280" video="qanda-llm" id="subtitle"]] +[[!template text="""servers. Do you have any recommendation for""" start="00:24:02.280" video="qanda-llm" id="subtitle"]] +[[!template text="""models to run locally and also comments on""" start="00:24:05.500" video="qanda-llm" id="subtitle"]] +[[!template text="""whether a GPU is required?""" start="00:24:06.780" video="qanda-llm" id="subtitle"]] +[[!template text="""Usually a GPU, well, you can run it without a""" start="00:24:14.040" video="qanda-llm" id="subtitle"]] +[[!template text="""GPU, but it does run much better.""" start="00:24:16.960" video="qanda-llm" id="subtitle"]] +[[!template text="""Like for example, I think when I used,""" start="00:24:19.480" video="qanda-llm" id="subtitle"]] +[[!template text="""Lama is sort of like a standard.""" start="00:24:22.560" video="qanda-llm" id="subtitle"]] +[[!template text="""This was the model for that Facebook came out""" start="00:24:27.160" video="qanda-llm" id="subtitle"]] +[[!template text="""with for local use. And It was,""" start="00:24:31.380" video="qanda-llm" id="subtitle"]] +[[!template text="""yeah, it's good. It's,""" start="00:24:37.260" video="qanda-llm" id="subtitle"]] +[[!template text="""but it's now it's I think,""" start="00:24:40.400" video="qanda-llm" id="subtitle"]] +[[!template text="""Mistral is kind of like has a better""" start="00:24:44.620" video="qanda-llm" id="subtitle"]] +[[!template text="""performance, But there's also different model""" start="00:24:46.480" video="qanda-llm" id="subtitle"]] +[[!template text="""sizes. There's 7B, like the Lama 7B is OK.""" start="00:24:51.000" video="qanda-llm" id="subtitle"]] +[[!template text="""The Mistral 7B, 7 billion,""" start="00:24:52.940" video="qanda-llm" id="subtitle"]] +[[!template text="""are like, basically it'll take like,""" start="00:24:54.800" video="qanda-llm" id="subtitle"]] +[[!template text="""you can run it with like 16 gigs of RAM,""" start="00:24:58.380" video="qanda-llm" id="subtitle"]] +[[!template text="""is pretty good. It's probably about as equal""" start="00:25:02.720" video="qanda-llm" id="subtitle"]] +[[!template text="""to the LLAMA13B. Those are the number of""" start="00:25:06.900" video="qanda-llm" id="subtitle"]] +[[!template text="""parameters, if I remember correctly.""" start="00:25:08.360" video="qanda-llm" id="subtitle"]] +[[!template text="""And then there's a 7B,""" start="00:25:10.680" video="qanda-llm" id="subtitle"]] +[[!template text="""which I've never been able to run.""" start="00:25:12.340" video="qanda-llm" id="subtitle"]] +[[!template text="""And even if the 7B, if you run it without a""" start="00:25:16.120" video="qanda-llm" id="subtitle"]] +[[!template text="""GPU, it takes quite a while to answer.""" start="00:25:19.640" video="qanda-llm" id="subtitle"]] +[[!template text="""I think I've had experiences where it took""" start="00:25:22.080" video="qanda-llm" id="subtitle"]] +[[!template text="""literally like several,""" start="00:25:23.940" video="qanda-llm" id="subtitle"]] +[[!template text="""like 5 minutes before it even started""" start="00:25:26.480" video="qanda-llm" id="subtitle"]] +[[!template text="""responding, but you do eventually get""" start="00:25:28.880" video="qanda-llm" id="subtitle"]] +[[!template text="""something. And it could be that like things""" start="00:25:32.220" video="qanda-llm" id="subtitle"]] +[[!template text="""have gotten better since the last time I""" start="00:25:33.840" video="qanda-llm" id="subtitle"]] +[[!template text="""tried this, because things are moving fast.""" start="00:25:35.440" video="qanda-llm" id="subtitle"]] +[[!template text="""But it is super recommended to have a GPU.""" start="00:25:38.360" video="qanda-llm" id="subtitle"]] +[[!template text="""This is the problem. It's kind of like,""" start="00:25:42.440" video="qanda-llm" id="subtitle"]] +[[!template text="""yes, free software is great.""" start="00:25:43.840" video="qanda-llm" id="subtitle"]] +[[!template text="""But if free software is requiring that you""" start="00:25:46.880" video="qanda-llm" id="subtitle"]] +[[!template text="""have these kind of beefy servers and have all""" start="00:25:50.460" video="qanda-llm" id="subtitle"]] +[[!template text="""this hardware, that's not great.""" start="00:25:52.000" video="qanda-llm" id="subtitle"]] +[[!template text="""I think there's a case to be made.""" start="00:25:53.600" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 1]: a hardware""" start="00:25:55.680" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: with slots instead of a laptop.""" start="00:25:59.040" video="qanda-llm" id="subtitle"]] +[[!template text="""Yeah, yeah, that's right.""" start="00:26:01.560" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 2]: Ideally, you can have Ideally,""" start="00:26:03.660" video="qanda-llm" id="subtitle"]] +[[!template text="""it would be nice if FSL for all things could""" start="00:26:07.400" video="qanda-llm" id="subtitle"]] +[[!template text="""run something for open source model.""" start="00:26:12.040" video="qanda-llm" id="subtitle"]] +[[!template text="""And not free, but the key point is that it's""" start="00:26:16.320" video="qanda-llm" id="subtitle"]] +[[!template text="""Libre?""" start="00:26:16.640" video="qanda-llm" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, so actually I think Google does do that.""" start="00:26:22.580" video="qanda-llm" id="subtitle"]] +[[!template text="""I'll have to look it up,""" start="00:26:24.720" video="qanda-llm" id="subtitle"]] +[[!template text="""but I haven't explored this yet.""" start="00:26:27.560" video="qanda-llm" id="subtitle"]] +[[!template text="""But Google's server, which LLM does support,""" start="00:26:31.220" video="qanda-llm" id="subtitle"]] +[[!template text="""supports arbitrary models.""" start="00:26:33.800" video="qanda-llm" id="subtitle"]] +[[!template text="""So you can run LLMA or things like that.""" start="00:26:36.420" video="qanda-llm" id="subtitle"]] +[[!template text="""The problem is that even if you're running""" start="00:26:38.940" video="qanda-llm" id="subtitle"]] +[[!template text="""Mistral, which has no restrictions.""" start="00:26:40.320" video="qanda-llm" id="subtitle"]] +[[!template text="""So this is the kind of thing that like the""" start="00:26:42.940" video="qanda-llm" id="subtitle"]] +[[!template text="""Free Software Foundation cares a lot about.""" start="00:26:44.900" video="qanda-llm" id="subtitle"]] +[[!template text="""Like you want it to be like no restrictions,""" start="00:26:47.240" video="qanda-llm" id="subtitle"]] +[[!template text="""legal restrictions on you as you run the""" start="00:26:49.740" video="qanda-llm" id="subtitle"]] +[[!template text="""model. So even if it's running Mistral,""" start="00:26:52.080" video="qanda-llm" id="subtitle"]] +[[!template text="""just by using the server,""" start="00:26:54.800" video="qanda-llm" id="subtitle"]] +[[!template text="""the company server, it will impose some""" start="00:26:58.460" video="qanda-llm" id="subtitle"]] +[[!template text="""restrictions on you probably,""" start="00:26:59.440" video="qanda-llm" id="subtitle"]] +[[!template text="""right? There's gonna be some license that you""" start="00:27:02.320" video="qanda-llm" id="subtitle"]] +[[!template text="""have to, or something you have to abide by.""" start="00:27:04.760" video="qanda-llm" id="subtitle"]] +[[!template text="""So I think, yes, it depends on how much you""" start="00:27:08.480" video="qanda-llm" id="subtitle"]] +[[!template text="""care about it, I guess.""" start="00:27:09.280" video="qanda-llm" id="subtitle"]] +[[!template text="""I should find out more about that and make""" start="00:27:19.500" video="qanda-llm" id="subtitle"]] +[[!template text="""sure that it's a good point that I should,""" start="00:27:21.580" video="qanda-llm" id="subtitle"]] +[[!template text="""you know, people should be able to run free""" start="00:27:23.980" video="qanda-llm" id="subtitle"]] +[[!template text="""models over the server.""" start="00:27:25.920" video="qanda-llm" id="subtitle"]] +[[!template text="""So I should make sure we support that in the""" start="00:27:28.320" video="qanda-llm" id="subtitle"]] +[[!template text="""LLM package. So, is there any other questions""" start="00:27:40.360" video="qanda-llm" id="subtitle"]] +[[!template text="""Or is otherwise we can end the session.""" start="00:27:48.240" video="qanda-llm" id="subtitle"]] +[[!template text="""Yeah, all right. Thank you.""" start="00:28:00.800" video="qanda-llm" id="subtitle"]] +[[!template text="""Thank you. Thank you everyone who listened.""" start="00:28:02.440" video="qanda-llm" id="subtitle"]] +[[!template text="""I'm super happy like I,""" start="00:28:04.540" video="qanda-llm" id="subtitle"]] +[[!template text="""the interest is great.""" start="00:28:06.560" video="qanda-llm" id="subtitle"]] +[[!template text="""I think there's great stuff to be done here""" start="00:28:08.900" video="qanda-llm" id="subtitle"]] +[[!template text="""and I'm kind of super excited what we're""" start="00:28:10.960" video="qanda-llm" id="subtitle"]] +[[!template text="""going to do in the next year,""" start="00:28:11.940" video="qanda-llm" id="subtitle"]] +[[!template text="""so hopefully, like next year,""" start="00:28:13.140" video="qanda-llm" id="subtitle"]] +[[!template text="""and the conference we have something even""" start="00:28:14.600" video="qanda-llm" id="subtitle"]] +[[!template text="""more exciting to say about LLM and how they""" start="00:28:16.440" video="qanda-llm" id="subtitle"]] +[[!template text="""can be used with Emacs.""" start="00:28:17.320" video="qanda-llm" id="subtitle"]] +[[!template text="""So thank""" start="00:28:19.620" video="qanda-llm" id="subtitle"]] +[[!template text="""you""" start="00:28:30.060" video="qanda-llm" id="subtitle"]] + +Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20LLM%20clients%20in%20Emacs%2C%20functionality%20and%20standardization) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/llm-before.md b/2023/info/llm-before.md new file mode 100644 index 00000000..2371bd44 --- /dev/null +++ b/2023/info/llm-before.md @@ -0,0 +1,33 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 21-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="llm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="llm-mainVideo" data=""" +00:00.000 Intro to the Talk +00:25.080 What are LLMs? +01:56.360 Power of LLMs (Magit Demo) +03:32.240 Drawbacks of LLMs (regex demo) +05:20.120 Embeddings +07:32.800 Image Generation +08:48.480 Fine-tuning +11:08.160 Open Source +12:02.840 The Future +14:08.200 LLMs in Emacs - existing packages +18:15.960 Abstracting LLM challenges +19:04.080 Emacs is the ideal interface for LLMs +20:01.960 Outro + +"""]]<div></div>Duration: 20:26 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/ck1LWXvRiAGNLWFA8s4Ymi">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="llm-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="llm-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus"></audio></div><div></div>Duration: 28:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/llm-nav.md b/2023/info/llm-nav.md new file mode 100644 index 00000000..13555b70 --- /dev/null +++ b/2023/info/llm-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a> +Next by track: <a href="/2023/talks/overlay">Improving compiler diagnostics with overlays</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/lspocaml-after.md b/2023/info/lspocaml-after.md new file mode 100644 index 00000000..56d6ba54 --- /dev/null +++ b/2023/info/lspocaml-after.md @@ -0,0 +1,793 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="lspocaml-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""Hi, I'm Austin Theriault,""" start="00:00:00.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and this is writing a language server in OCaml""" start="00:00:01.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for Emacs, fun, and profit.""" start="00:00:04.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Real quick, who am I?""" start="00:00:07.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Well, I'm a software engineer at Semgrep.""" start="00:00:08.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I work on our editor integrations,""" start="00:00:10.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and I love working on programming languages, editors,""" start="00:00:13.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and cryptography.""" start="00:00:15.360" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""What is Semgrep?""" start="00:00:16.540" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""We're a small cybersecurity startup""" start="00:00:17.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""whose core product is a SaaS tool,""" start="00:00:20.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is static application security testing.""" start="00:00:21.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You can think of it as like a security linter.""" start="00:00:24.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Normal linters will say, hey,""" start="00:00:27.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you wrote ugly code, fix it.""" start="00:00:30.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""We'll say, hey, you wrote a SQL injection, fix that.""" start="00:00:31.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""We support 30+ languages,""" start="00:00:35.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and we have lots of customers all using different IDEs.""" start="00:00:36.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Why does that matter?""" start="00:00:39.320" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""How do we show security bugs early?""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""Well, our goal is to show security bugs""" start="00:00:40.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""as early as possible in the development cycle.""" start="00:00:42.780" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""In the industry, we call this shifting left.""" start="00:00:45.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And so how far left can we shift? The editor.""" start="00:00:48.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So that's why it matters""" start="00:00:52.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that our customers have different editors.""" start="00:00:53.620" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Our goal is to have Semgrep and the editor""" start="00:00:56.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""show up like other language tooling.""" start="00:00:58.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And what I mean by that is I wrote some bad OCaml up here,""" start="00:01:01.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and the editor gave me that red squiggly and said,""" start="00:01:05.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""fix your OCaml, and we want Semgrep to do something similar.""" start="00:01:07.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And so our goal then is to provide a similar experience""" start="00:01:12.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""to normal language checking.""" start="00:01:15.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And then since we're a small startup,""" start="00:01:16.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and there's a ton of different IDEs that our customers use,""" start="00:01:19.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""ideally, we don't want to have to rewrite a plugin""" start="00:01:22.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for every single type of editor out there.""" start="00:01:24.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Our other goal is abstract away""" start="00:01:27.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""editing and language features for editors to one code base.""" start="00:01:29.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Ideally, we write it once""" start="00:01:32.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then plug it into all of them.""" start="00:01:33.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So how can we do that, though?""" start="00:01:35.800" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""What is the Language Server Protocol?""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""Well, in the process of working on this stuff,""" start="00:01:37.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I found out about""" start="00:01:40.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""the Language Server Protocol.""" start="00:01:43.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And what's great about the Language Server Protocol is""" start="00:01:44.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""it's a specification that defines all the ways""" start="00:01:47.280" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that these language tools might interact""" start="00:01:50.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""with a development tool. And by development tool,""" start="00:01:52.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I mean like VS Code, Sublime, Emacs, any of those.""" start="00:01:56.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And by language tool, I mean something like PyRight, MyPy.""" start="00:02:01.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So what's cool about LSP is that""" start="00:02:07.280" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you can separate out those tools into language servers""" start="00:02:09.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and the development tools into language clients.""" start="00:02:13.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And because they share this common specification,""" start="00:02:15.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""they can now interact without knowing each other.""" start="00:02:18.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So it's this great abstraction that means""" start="00:02:20.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""all you have to do is go write one language server""" start="00:02:22.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and you can hook it up to a bunch of language clients""" start="00:02:25.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and it'll just work.""" start="00:02:27.440" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Case study: Rust Analyzer""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So let's do a quick case study on language servers in LSP,""" start="00:02:29.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""just so you get an idea of why this is super cool.""" start="00:02:34.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So there's this language server called Rust Analyzer.""" start="00:02:37.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's a language server for the Rust language.""" start="00:02:40.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""If you've ever developed in Rust,""" start="00:02:42.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you'll know that takes a really long time to compile,""" start="00:02:44.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but the compiler gives you fantastic feedback.""" start="00:02:46.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Rust has a lot of advanced language features,""" start="00:02:50.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so that feedback is super important for developing.""" start="00:02:52.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And so Rust Analyzer will give you that feedback instantly.""" start="00:02:55.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Here's a ton of things that it gives you.""" start="00:02:58.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Code completion, fixes, compiler errors, warnings,""" start="00:03:01.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""type signatures. Rust has a pretty strong type system.""" start="00:03:05.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It also has this thing called lifetimes.""" start="00:03:08.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""A bunch of advanced language features in Rust Analyzer""" start="00:03:12.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""helps you manage all that""" start="00:03:15.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and gives you all that info""" start="00:03:16.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""without having to wait for it to compile.""" start="00:03:17.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Developing with the Rust Analyzer""" start="00:03:19.220" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""is just orders of magnitude easier""" start="00:03:21.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""than just trying to write Rust straight.""" start="00:03:24.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Rust Analyzer, fantastic. They went and they developed it,""" start="00:03:26.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and now you can go use that in Emacs, NeoVim,""" start="00:03:30.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""VS Code, wherever.""" start="00:03:33.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So you can develop Rust in a way that's relatively efficient""" start="00:03:35.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""without having to give up your favorite editor.""" start="00:03:39.080" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Rust Analyzer in action""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So here's a quick little demo""" start="00:03:42.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""of all the cool things it can do.""" start="00:03:44.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So you can see I typed an error.""" start="00:03:46.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It tells me that I wrote an error.""" start="00:03:48.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I used the incorrect lifetime,""" start="00:03:50.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is some advanced language feature,""" start="00:03:52.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and it'll let me know that.""" start="00:03:54.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I expanded a Rust macro just there,""" start="00:03:55.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is similar to Lisp macros,""" start="00:03:57.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then I ran a single unit test,""" start="00:03:59.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and that's really cool because I ran a single unit test""" start="00:04:01.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""from my editor.""" start="00:04:04.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I didn't have to go and type any commands or anything.""" start="00:04:05.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It just worked.""" start="00:04:07.840" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Why is this useful?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So why is this just useful in general for a user?""" start="00:04:09.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Well, you get the same experience across editors.""" start="00:04:13.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Like I was saying, you don't have to give up""" start="00:04:15.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""one editor for another""" start="00:04:17.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so you get some sort of cool language feature.""" start="00:04:18.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You can easily set up and use language servers""" start="00:04:21.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""made for other editors""" start="00:04:23.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""if developers don't support your editor of choice.""" start="00:04:24.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Performance is not dependent on the editor.""" start="00:04:27.860" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""That's fantastic because to do all that Rust stuff,""" start="00:04:31.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""it takes a lot of CPU power,""" start="00:04:35.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and so that's going to be slow""" start="00:04:37.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""if your editor language is not great, not fast.""" start="00:04:40.500" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And then bug fixes, updates, all that,""" start="00:04:43.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""it all comes out at the same time.""" start="00:04:47.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And then from the developer perspective, well,""" start="00:04:50.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""adding new editors is quick and easy.""" start="00:04:53.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""For reference, when I wrote the Semgrep language server,""" start="00:04:55.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""it took me maybe two or three weeks,""" start="00:04:58.700" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but then actually going and setting it up for VS Code,""" start="00:05:00.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that took an hour. For Emacs, 30 minutes.""" start="00:05:04.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""IntelliJ, maybe another hour.""" start="00:05:06.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So it took me a day to add support""" start="00:05:08.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for three different editors,""" start="00:05:10.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which was I think something like 75% of the market share""" start="00:05:11.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or something crazy like that.""" start="00:05:14.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So very quick. You only need one mental model.""" start="00:05:16.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You don't have to figure out""" start="00:05:20.180" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""all these different extension mental models,""" start="00:05:21.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""how those editors work, anything like that.""" start="00:05:23.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And another thing that's cool is""" start="00:05:26.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you only have to write tests for the language server,""" start="00:05:28.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""not necessarily for the editor.""" start="00:05:30.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's great to have just one set of tests""" start="00:05:31.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that you have to pass.""" start="00:05:33.840" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""So what about Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So why does a language server protocol matter with Emacs?""" start="00:05:36.220" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Well, like I was saying before,""" start="00:05:40.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Emacs gets the benefit from work put into other editors.""" start="00:05:42.380" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So we get all this language support,""" start="00:05:45.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and no one actually has to go and write the list for it""" start="00:05:47.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or write those tools specific to Emacs.""" start="00:05:51.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You get the language tooling,""" start="00:05:53.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""the CPU-intensive part of the editors.""" start="00:05:54.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It can be written in something else.""" start="00:05:56.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Lisp is fast. It's not that fast.""" start="00:05:58.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Having that speed is fantastic. It's all asynchronous.""" start="00:06:01.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It won't slow down Emacs.""" start="00:06:04.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And then there's this package called `lsp-mode`,""" start="00:06:06.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is an LSP client commonly included""" start="00:06:08.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""in popular Emacs distributions.""" start="00:06:11.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So a lot of people already have that.""" start="00:06:13.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""If you're using Emacs 29 or greater, you have `eglot-mode`,""" start="00:06:15.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is a lighter weight version of `lsp-mode`.""" start="00:06:18.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's just another LSP client.""" start="00:06:21.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""When I wrote the Semgrep language server,""" start="00:06:24.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Emacs 29 hadn't come out yet.""" start="00:06:26.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I'm not going to talk too much about `eglot-mode`""" start="00:06:28.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because I did everything in `lsp-mode`,""" start="00:06:31.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but I would imagine a lot of this stuff is very similar.""" start="00:06:33.300" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Here's a list of some supported languages.""" start="00:06:37.780" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Technical part - Brief communication overview""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""Now let's get into the technical part.""" start="00:06:40.700" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""How does LSP actually work?""" start="00:06:42.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So let's go over how it communicates first.""" start="00:06:45.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It uses JSONRPC,""" start="00:06:47.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is just kind of like HTTP,""" start="00:06:49.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but instead of sending plain text, you're sending JSON.""" start="00:06:51.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So it's just sending JSON back and forth.""" start="00:06:54.620" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's great because it's a way""" start="00:06:56.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for two programs to communicate""" start="00:06:58.540" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""without sharing a common programming language.""" start="00:06:59.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Transport platform agnostic,""" start="00:07:02.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so it could be stdin, stdout,""" start="00:07:04.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""sockets, whatever. It's just JSON.""" start="00:07:07.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You can send it over whatever.""" start="00:07:09.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""There's two different types of messages,""" start="00:07:11.140" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""a request, which requires a response from the other party,""" start="00:07:12.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and a notification, which does not expect a response.""" start="00:07:15.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So just a quick little example,""" start="00:07:19.260" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""a user might open a document,""" start="00:07:21.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then it'll send like a text document did open""" start="00:07:23.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and what document it was to the language server,""" start="00:07:28.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then they'll change it.""" start="00:07:30.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Maybe they edit some code and introduce a syntax error.""" start="00:07:31.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""The changes will be sent to the language server,""" start="00:07:35.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then the language server will publish diagnostics,""" start="00:07:37.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is those red squigglies""" start="00:07:39.220" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I was talking about earlier,""" start="00:07:41.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and say, hey, syntax error or whatever here,""" start="00:07:42.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or maybe the user says,""" start="00:07:45.460" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I want to go to the definition of this function,""" start="00:07:46.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then the language server will spit back,""" start="00:07:49.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""hey, this is where that function lives.""" start="00:07:51.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""All very useful,""" start="00:07:53.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and the communication is relatively simple,""" start="00:07:55.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is great.""" start="00:07:57.720" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Example request""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""This is what it looks like, what a request looks like.""" start="00:07:58.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Notifications look somewhat similar.""" start="00:08:01.240" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""LSP capabilities""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So now we know how LSP communication works,""" start="00:08:03.380" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but how does the actual protocol work?""" start="00:08:05.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Well, almost all of the protocol is opt-in,""" start="00:08:09.860" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""meaning you don't have to support the entire specification,""" start="00:08:12.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you can just pick and choose.""" start="00:08:15.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Servers and clients will then communicate""" start="00:08:17.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""what part of the protocol they both support,""" start="00:08:19.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so they'll both say, hey,""" start="00:08:21.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""we support being notified when a user opens a document,""" start="00:08:22.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or if they're looking for documentation.""" start="00:08:26.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And so then once they agree upon what they'll both support,""" start="00:08:28.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""then they'll send that stuff,""" start="00:08:33.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""those notifications and requests back and forth.""" start="00:08:35.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Things like opening and closing files, diagnostics,""" start="00:08:38.580" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""code completion, hovering over stuff, type signatures,""" start="00:08:41.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""all of that. And what's cool is""" start="00:08:46.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""even though the specification is huge""" start="00:08:48.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and probably has everything you need,""" start="00:08:50.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you can go ahead and add custom capabilities""" start="00:08:52.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""if you really want to.""" start="00:08:54.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So you can just define a custom method,""" start="00:08:55.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then now that works for you,""" start="00:08:57.980" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and now you can have that in all your editors.""" start="00:09:01.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""For example, Rust Analyzer""" start="00:09:03.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""has structural search and replace,""" start="00:09:04.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is like find and replace,""" start="00:09:06.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but with respect to the structure of the code.""" start="00:09:08.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And if you choose to go down this route""" start="00:09:11.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""with the custom capabilities,""" start="00:09:13.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you do have to remember you're going to have to""" start="00:09:15.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""implement it in every client.""" start="00:09:16.660" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And that's a little bit more work,""" start="00:09:18.700" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but it's better than where we were without LSP.""" start="00:09:20.400" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Tips on writing a LS""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""So some quick tips on writing a language server.""" start="00:09:23.380" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I'm not going to get too into this""" start="00:09:25.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because it's very application-specific.""" start="00:09:27.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I wrote Semgrep's in OCaml""" start="00:09:30.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""since our code base was almost all OCaml already,""" start="00:09:32.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and I wanted to leverage that.""" start="00:09:35.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Would not recommend""" start="00:09:36.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""unless you also have a code base all in OCaml.""" start="00:09:38.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Structure is similar to a Rust server,""" start="00:09:41.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so a bunch of independent endpoints.""" start="00:09:43.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I would do everything functionally if I were you.""" start="00:09:45.740" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""This is EmacsConf.""" start="00:09:48.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""We're all hopefully used to writing functional Lisp.""" start="00:09:49.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I would recommend TypeScript or Rust, though,""" start="00:09:53.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""depending on your level of performance""" start="00:09:56.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that you really need or whatever language""" start="00:09:58.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you're trying to support ideally.""" start="00:10:00.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Most languages have""" start="00:10:02.255" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""some sort of language server protocol already.""" start="00:10:03.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""But if they don't, then it might be easier""" start="00:10:06.500" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""to do it in that language.""" start="00:10:09.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""TypeScript has a lot of support, a lot of documentation,""" start="00:10:10.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""a lot of examples out there""" start="00:10:12.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because it was what Microsoft originally intended""" start="00:10:14.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""the language server protocol to be for, for VS Code,""" start="00:10:17.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is written in TypeScript.""" start="00:10:20.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Rust is fast, it's going to take more effort,""" start="00:10:22.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but it's very fast, and Rust Analyzer has a great library""" start="00:10:24.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that they use and that they support.""" start="00:10:28.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So support there, examples there are great.""" start="00:10:30.280" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""The hard part is not really the language server protocol,""" start="00:10:32.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but the actual logic. So, like, if you're doing, like,""" start="00:10:35.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""language tooling, you're going to have to do""" start="00:10:39.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""analysis on the code, so you need to do parsing,""" start="00:10:40.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""possibly compiling, all these different advanced features,""" start="00:10:42.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""all these advanced different things.""" start="00:10:47.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""For example, Rust Analyzer will do incremental compilation,""" start="00:10:48.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is really, really cool,""" start="00:10:52.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but that's, like, a whole separate talk.""" start="00:10:54.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""If you're adapting an existing language tool,""" start="00:10:58.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""this stuff is really easy.""" start="00:11:00.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You're basically just wiring stuff up.""" start="00:11:01.680" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Supporting a LS through LSP mode in Emacs""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""But, yeah. So, now we know all about""" start="00:11:03.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""LSP and language servers.""" start="00:11:08.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Say you want to actually""" start="00:11:10.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""add support for a language server in Emacs.""" start="00:11:11.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""How do you do that? Well, let's look at LSP mode,""" start="00:11:14.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because, like I said, this is what I'm most familiar with.""" start="00:11:19.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""I'm sure `eglot-mode` is pretty similar.""" start="00:11:21.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So, `lsp-mode`'s repository is on GitHub,""" start="00:11:24.260" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""like everything, and it has a ton of different clients""" start="00:11:27.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for a ton of different languages and frameworks and tools,""" start="00:11:31.500" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""like Semgrep, and these are available""" start="00:11:34.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""to anyone who installs LSP mode.""" start="00:11:37.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Alternatively, you can make a separate package""" start="00:11:39.740" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and just use LSP mode as a library,""" start="00:11:42.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but I'm not going to focus on this,""" start="00:11:43.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because there's already a ton of resources out there""" start="00:11:45.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""on packaging and Emacs.""" start="00:11:47.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""So, our steps, very quickly, are going to look like""" start="00:11:50.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""adding an Emacs Lisp file that contains some logic,""" start="00:11:54.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""add an entry somewhere, so we added a new client""" start="00:11:58.300" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""to the list of clients, and then do some documentation,""" start="00:12:01.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because documentation's great.""" start="00:12:03.720" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Create a client""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""First, creating a client.""" start="00:12:06.000" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""In the `clients/` folder in `lsp-mode/`,""" start="00:12:07.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""literally just add, like, `lsp-` whatever it is,""" start="00:12:09.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""`require` the library, and register a client.""" start="00:12:12.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Registering a client just means, like,""" start="00:12:15.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""saying what kind of connection it is.""" start="00:12:18.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's most likely going to be standard I/O,""" start="00:12:19.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because that's pretty easy to implement,""" start="00:12:21.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then you just pass it the executable""" start="00:12:24.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that you actually want to run.""" start="00:12:26.840" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Say what the activation function is,""" start="00:12:29.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so this is when the client should start,""" start="00:12:31.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so you can specify the language""" start="00:12:33.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or the major mode or whatever,""" start="00:12:36.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and now your client will start whenever that's triggered,""" start="00:12:38.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then finally provide just a server ID,""" start="00:12:43.100" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so that way it's easy to keep track of,""" start="00:12:45.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then run this LSP consistency check function.""" start="00:12:48.580" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""This just makes sure everything up there is good.""" start="00:12:52.760" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You can do more advanced stuff with making an LSP client""" start="00:12:56.580" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that I'm not going to get into,""" start="00:12:59.520" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but just know that these aren't your only options,""" start="00:13:01.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then finally provide your client.""" start="00:13:03.800" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Add to list of client packages""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""Next, you just have to add your client""" start="00:13:07.300" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""to the list of clients that `lsp-mode` supports,""" start="00:13:09.800" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and now you've added support for a whole new language,""" start="00:13:12.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""whole new framework, whole new tool to Emacs,""" start="00:13:15.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and it's taking you, what, like, what is that,""" start="00:13:17.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""20 lines of Lisp? No, not even, like, 15.""" start="00:13:20.220" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""15 lines of Lisp, whole new language for Emacs.""" start="00:13:23.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's really exciting. Now that you have your client,""" start="00:13:26.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""let's do some documentation. Go fill out this, like, name,""" start="00:13:31.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""where the repository, the source code is,""" start="00:13:35.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""because free software is great,""" start="00:13:37.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and you should open source your stuff.""" start="00:13:39.600" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Specify the installation command.""" start="00:13:42.180" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""What's cool about this is""" start="00:13:44.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""this can be run automatically from Emacs,""" start="00:13:45.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so if it's, like, `pip install pyright`, right,""" start="00:13:48.060" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""you can put that there, and Emacs will ask you,""" start="00:13:50.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""do you want to install the language server,""" start="00:13:53.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and you can hit yes""" start="00:13:55.280" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and users will just have it installed for them,""" start="00:13:56.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and then you can say whether or not it's a debugger.""" start="00:13:59.540" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""This is completely separate,""" start="00:14:01.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""so there's this thing called DAP,""" start="00:14:03.160" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is the debugger adapter protocol,""" start="00:14:05.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and it's similar to LSP but for debuggers,""" start="00:14:07.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""which is very cool,""" start="00:14:09.680" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Add documentation!""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""and then finally link to your documentation.""" start="00:14:11.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Please, please document your stuff.""" start="00:14:14.600" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Adding commands and custom capabilities""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""If you want to add, like, a custom Emacs function""" start="00:14:17.880" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""or custom capabilities, it's super easy.""" start="00:14:20.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's literally just, like, calling a normal Emacs function.""" start="00:14:22.680" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""For example, Semgrep normally only scans files""" start="00:14:27.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""when you open them, but we added a Emacs function""" start="00:14:30.560" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""that will scan your entire project, right,""" start="00:14:34.200" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and so that was just a client notification.""" start="00:14:36.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It was just `lsp-notify` and then a custom method,""" start="00:14:40.960" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and it's great because now you can just scan your project""" start="00:14:44.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""from a simple Emacs function.""" start="00:14:46.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Requests, very similar to notifications.""" start="00:14:48.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""You send it and then pass it a lambda""" start="00:14:52.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and do something with the result,""" start="00:14:56.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and so that's adding custom capabilities.""" start="00:14:58.460" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template new="1" text="""Thanks for listening""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]] + +[[!template text="""That's pretty much it. Thank you for listening.""" start="00:15:01.360" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Some resources here.""" start="00:15:04.320" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""These links are clickable if you get the PDF,""" start="00:15:05.640" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""if you get the slides. Semgrep: we're hiring!""" start="00:15:08.240" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""If you want to work on, like,""" start="00:15:10.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""programming language theory stuff,""" start="00:15:12.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""compilers, parsers, editors,""" start="00:15:13.720" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""email me or go look at our jobs.""" start="00:15:18.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""The LSP specification, this is, like, the holy Bible.""" start="00:15:22.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It has all the specs, all the types, everything.""" start="00:15:25.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""`lsp-mode` and the docs.""" start="00:15:28.340" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""`lsp-mode`, right, that's where you want to add your client.""" start="00:15:30.420" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""The docs are great, super useful.""" start="00:15:33.280" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""Rust Analyzer is just a great reference""" start="00:15:36.100" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""for language servers in general""" start="00:15:38.080" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""if you want to write one or if you just want to, like,""" start="00:15:39.920" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""see how they work. It's all just really well done.""" start="00:15:42.120" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""It's great code, very readable.""" start="00:15:45.400" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""And then down here is just a long video tutorial,""" start="00:15:47.040" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""a longer video tutorial, not by me,""" start="00:15:50.480" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""by someone else, on how to add a language client to Emacs,""" start="00:15:54.700" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""but hopefully this is sufficient for y'all,""" start="00:15:58.440" video="mainVideo-lspocaml" id="subtitle"]] +[[!template text="""and now it's time for some Q&A.""" start="00:16:01.480" video="mainVideo-lspocaml" id="subtitle"]] + + + +Captioner: sachac + +<a name="lspocaml-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: I would invite all on the,""" start="00:00:03.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""who are currently watching,""" start="00:00:04.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""who have questions, put them into the pad""" start="00:00:06.819" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""that I can ask them. I'm kind of monitoring""" start="00:00:08.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the IRC concurrently. So the first question""" start="00:00:16.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""that we have on the pad is concerning why you""" start="00:00:18.640" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""have switched from OCaml.""" start="00:00:19.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Maybe the person has missed it in the talk,""" start="00:00:22.420" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""if you've mentioned it.""" start="00:00:23.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Why have you switched from OCaml to,""" start="00:00:25.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""in this case, I guess,""" start="00:00:25.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Rust?""" start="00:00:26.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I mentioned like with writing a""" start="00:00:30.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language server that I wrote mine for my""" start="00:00:34.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""company in OCaml But I wouldn't recommend it""" start="00:00:36.900" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""just in general unless like you're doing""" start="00:00:38.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""something specific with OCaml And the reason""" start="00:00:41.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""for that and I recommended Rust or like""" start="00:00:44.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""TypeScript is like OCaml is great.""" start="00:00:45.780" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's very performant but it's cross""" start="00:00:49.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""compilation story is not great.""" start="00:00:50.739" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's like really hard to cross compile like""" start="00:00:54.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""from 1 platform to another.""" start="00:00:55.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And then like the ecosystem and its standard""" start="00:00:58.120" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""library is also not great.""" start="00:01:00.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And like Rust, its cross compilation is""" start="00:01:03.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""great. Its ecosystem is great.""" start="00:01:05.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""OCaml is great if you need to use it,""" start="00:01:08.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but it's just it's not ideal.""" start="00:01:10.880" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And there's just also no good examples of a""" start="00:01:14.220" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language server in OCaml.""" start="00:01:15.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""There's the official like OCaml language""" start="00:01:19.119" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""server, But they use a ton of super advanced""" start="00:01:22.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language features, like module functors and a""" start="00:01:27.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""bunch of other random stuff.""" start="00:01:28.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So it's not really readable.""" start="00:01:29.479" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""But Rust, there's Rust analyzer,""" start="00:01:31.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""which is readable. In TypeScript,""" start="00:01:33.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""there's like a million different ones.""" start="00:01:34.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So it's less of a, not OCaml is like,""" start="00:01:39.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""it's not that OCaml isn't great.""" start="00:01:40.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's more of a, these other languages would""" start="00:01:43.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""probably just be easier.""" start="00:01:44.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So.""" start="00:01:45.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: I guess since the integration to,""" start="00:01:48.619" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""for example, like NeoVim or some other""" start="00:01:50.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""editors are just revenue fine because of the""" start="00:01:53.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Sorry, can you say that again?""" start="00:01:56.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: LSP, I guess. The LSP,""" start="00:01:58.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""so it's a standard LSP specification that""" start="00:02:01.979" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""you're using. So you can also,""" start="00:02:03.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""for instance, use it and other editors,""" start="00:02:04.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like for instance, new them or so.""" start="00:02:06.660" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Yeah. You can use it.""" start="00:02:08.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's most, most editors nowadays support it.""" start="00:02:11.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Like obviously Emacs, NeoVim,""" start="00:02:13.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Sublime, VS code, Intel,""" start="00:02:16.420" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""all the IntelliJ ones.""" start="00:02:17.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So yeah, that's, that's the fun part.""" start="00:02:21.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""You don't have to write 10 different""" start="00:02:23.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""languages to get a bunch of editor support.""" start="00:02:26.500" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Also experience writing it.""" start="00:02:30.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So I didn't have really time to hear into""" start="00:02:33.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""your talk. So I'm sorry if I ask you""" start="00:02:36.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""questions that you have already said.""" start="00:02:38.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""How was the experience of writing an LSP?""" start="00:02:41.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So have you any knowledge beforehand or do""" start="00:02:44.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""you just read it all on yourself?""" start="00:02:45.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, there's not a ton of documentation,""" start="00:02:49.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""which is what motivated me to do this talk.""" start="00:02:53.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Basically, I just looked at the""" start="00:02:56.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""specification, and I knew Rust Analyzer was""" start="00:02:58.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""cool. And so I looked at Rust Analyzer,""" start="00:03:00.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and I looked at PyRite.""" start="00:03:01.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And I just went from there.""" start="00:03:04.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I found out about all this because I already""" start="00:03:07.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""using Emacs, I already knew about it.""" start="00:03:10.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I was like, this is going to be easier than""" start="00:03:12.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""something else. So yeah,""" start="00:03:15.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""there's the experience is fine.""" start="00:03:17.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's just a lot of wiring stuff up.""" start="00:03:21.060" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's not a lot of like hard thinking until""" start="00:03:24.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""you get to like performance heavy stuff.""" start="00:03:26.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Like, so for some graph,""" start="00:03:27.740" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like we're doing a ton of like code parsing""" start="00:03:30.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and like analyzing. And so that's,""" start="00:03:32.980" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""it takes up like a ton of processing power.""" start="00:03:35.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So like for stuff like that,""" start="00:03:37.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like now you have to think about caching and""" start="00:03:39.620" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like ordering things. So that part's hard,""" start="00:03:43.980" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but that's more of a, like very much""" start="00:03:47.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""application specific thing.""" start="00:03:48.640" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. Anything in the IRC chat.""" start="00:03:58.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I think not. It's nothing I can see.""" start="00:04:01.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""No questions, that's kind of odd to be""" start="00:04:13.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""honest. I cannot really ask questions""" start="00:04:17.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""concerning LSP specific.""" start="00:04:18.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, no worries.""" start="00:04:22.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Good question, what could be asked?""" start="00:04:31.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Let's call, let's ask something very""" start="00:04:35.740" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""unspecific concerning the Emacs usage.""" start="00:04:38.260" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And when have you started?""" start="00:04:39.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""How did you came through it and stuff like""" start="00:04:41.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""this?""" start="00:04:41.780" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. I like and when I was in high school,""" start="00:04:46.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""me and my friends just were like,""" start="00:04:48.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""got obsessed with Linux for whatever reason.""" start="00:04:51.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And then like we traveled down like the,""" start="00:04:53.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like the free software,""" start="00:04:55.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like we just thought that was like very""" start="00:04:57.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""entertaining and like interesting to read""" start="00:05:00.040" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""about all the free software stuff.""" start="00:05:01.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""They were like, yeah, that's cool.""" start="00:05:03.120" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And so we all started using Linux.""" start="00:05:04.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And I'm like, well, if I'm using free""" start="00:05:06.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""software, I'm going to use Emacs.""" start="00:05:08.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And so I started using Emacs just to try it""" start="00:05:12.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""out. And then I kind of got,""" start="00:05:13.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I feel like, Stockholm syndrome into it.""" start="00:05:16.880" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And now I've realized like,""" start="00:05:18.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I don't know, now that I've done the like""" start="00:05:21.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""actual work to get into Emacs,""" start="00:05:23.880" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""it's just, there's so much more I can do with""" start="00:05:26.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""it. But yeah, it was somewhat unintentional.""" start="00:05:30.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: I probably have the same course I've started""" start="00:05:36.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like 2 years ago using Emacs.""" start="00:05:37.780" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And also just, oh, there's at first some cool""" start="00:05:42.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""people on YouTube, so systems crafters and""" start="00:05:45.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""people like this. And also,""" start="00:05:46.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""ah, VS Code, I used a lot of VS Code""" start="00:05:49.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""beforehand and then VS Codium because open""" start="00:05:53.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""source and then oh are there any other""" start="00:05:55.640" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""alternatives and I came to like Neovim and""" start="00:05:58.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Emacs and often switching around but I stick""" start="00:06:01.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""to Emacs at some point to be honest.""" start="00:06:03.220" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think Emacs also just looks really""" start="00:06:07.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""cool. I will say that.""" start="00:06:08.500" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And also just like I like Vim.""" start="00:06:14.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Vim is cool but like being able to like write""" start="00:06:16.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""lists and like modify your editor on the fly""" start="00:06:19.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""is just like very appealing to me.""" start="00:06:20.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I don't know, Emacs was tough at first""" start="00:06:23.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""because like all the like default key""" start="00:06:25.520" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""bindings are just kind of like and then and""" start="00:06:28.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""then I read somewhere someone was like yeah""" start="00:06:29.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""well Richard Stallman uses evil mode so it's""" start="00:06:33.220" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""okay. I was like alright I can that's like""" start="00:06:36.220" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""blessing enough for me Like I'm just gonna""" start="00:06:38.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""switch to evil mode. And I was like,""" start="00:06:39.520" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""this is way, way better as far as key""" start="00:06:42.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""bindings go.""" start="00:06:42.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Kind of relates. So I switched for,""" start="00:06:46.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I think, half a year to the default key""" start="00:06:49.900" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""bindings from Vim beforehand.""" start="00:06:51.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I switched back to Evil and now I'm losing""" start="00:06:54.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""some kind of hybrid styles.""" start="00:06:56.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's kind of weird. But we have a question on""" start="00:07:01.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the pad. So what are the corner cases,""" start="00:07:03.260" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""limitations, and other issues you encountered""" start="00:07:05.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""in implementing an LSP server with client in""" start="00:07:08.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Emacs that were surprising?""" start="00:07:09.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I would say the corner cases and""" start="00:07:13.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""limitations are definitely like,""" start="00:07:15.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""once again, they're going to be very""" start="00:07:16.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""application specific, but it's usually just""" start="00:07:18.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the performance part. So like I was saying""" start="00:07:22.420" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""before, right, in general if you're doing""" start="00:07:24.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language tooling, you're gonna be doing""" start="00:07:26.120" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""either parsing or interpreting or something""" start="00:07:29.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like that, which is very just like""" start="00:07:31.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""computationally heavy and so if you're trying""" start="00:07:34.740" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""to like do that stuff while someone is""" start="00:07:36.900" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""editing a file right like every keystrokes""" start="00:07:38.520" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""every like 1 to 2 seconds if they have a fast""" start="00:07:42.660" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""computer that's great but a lot of people""" start="00:07:44.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""don't have like that fast of a computer that""" start="00:07:46.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""they can go and like do compilation every""" start="00:07:49.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""single keystroke. So like,""" start="00:07:51.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I would say, I would say the like limitation""" start="00:07:54.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""is just how fast your computer is and how""" start="00:07:56.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""good you are at like implementing caching for""" start="00:07:59.140" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like whatever you're doing.""" start="00:08:01.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""That's also just the main issues I've run""" start="00:08:04.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""into is just it's a constant uphill battle.""" start="00:08:08.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""People will somehow find larger and larger""" start="00:08:12.120" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""files. You'll end up with files that are like""" start="00:08:14.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""thousands, like tens of thousands of lines""" start="00:08:17.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""long and you think yeah,""" start="00:08:18.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""surely no 1 would expect like instantaneous""" start="00:08:21.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""response for like like editing a file that""" start="00:08:25.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""has like tens of thousands of lines,""" start="00:08:26.820" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but then they do. As far as corner cases go,""" start="00:08:30.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I would say the corner case is like,""" start="00:08:31.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""just in general is actually distributing the""" start="00:08:37.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language server. Cause like writing the""" start="00:08:41.039" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language server is fine.""" start="00:08:42.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Like wiring everything up is fine.""" start="00:08:44.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""But then like, once you actually have to go""" start="00:08:47.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and distribute it, well,""" start="00:08:47.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""now you're distributing in a binary.""" start="00:08:49.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Like I was saying before with OCaml,""" start="00:08:51.660" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""doesn't have great cross compilation.""" start="00:08:53.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So for some graph for our language server,""" start="00:08:58.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""we target Linux and Mac OS,""" start="00:09:01.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and we have a ton of people who use Windows,""" start="00:09:03.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but compiling OCaml for Windows is basically""" start="00:09:06.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""impossible. So our corner case there,""" start="00:09:10.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the way we solved it was now we're""" start="00:09:11.980" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""transpiling OCaml to JavaScript,""" start="00:09:14.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""which is a huge can of worms.""" start="00:09:17.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Like it's a lot of fun.""" start="00:09:18.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's very interesting,""" start="00:09:19.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but like it's not ideal.""" start="00:09:22.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And so that's what I was saying before.""" start="00:09:24.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I recommend like Rust or TypeScript because""" start="00:09:26.360" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""those are way more portable and a lot easier""" start="00:09:29.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""to install. And you don't have to worry about""" start="00:09:31.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""any of that weird packaging stuff.""" start="00:09:33.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So yeah, I would say that's like the main""" start="00:09:37.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""corner case and the main limitation is just""" start="00:09:40.260" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""speed and caching.""" start="00:09:41.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: You mentioned this obscure large file so""" start="00:09:47.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""someone doesn't want to refactor or""" start="00:09:49.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""something. How did you start?""" start="00:09:51.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So did you have any way to still be""" start="00:09:54.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""relatively performant when they have big""" start="00:09:56.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""files or is it just not supported?""" start="00:09:58.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I don't care.""" start="00:09:58.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, no, we, so we support larger files now""" start="00:10:03.140" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And the way we ended up doing that,""" start="00:10:05.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""so SemGrep is like you write this generic""" start="00:10:11.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""pattern. You kind of write the language,""" start="00:10:14.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but then there's these other symbols and""" start="00:10:17.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""stuff that are included in that,""" start="00:10:18.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""this like meta language.""" start="00:10:19.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And so what happens is,""" start="00:10:22.420" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""is most languages get,""" start="00:10:23.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""they get parsed and then into a syntax tree,""" start="00:10:27.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""right? Like whatever the language is syntax""" start="00:10:29.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""tree is, and then they get,""" start="00:10:30.620" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the syntax tree gets converted into this,""" start="00:10:33.800" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like, we call it like an abstract syntax""" start="00:10:35.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""tree, which is like abstract from like any,""" start="00:10:38.080" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like languages specific syntax tree.""" start="00:10:39.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And so then we can cache that,""" start="00:10:41.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""which is really good because like if someone""" start="00:10:44.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""types something like we don't have to go""" start="00:10:47.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""through and do like the full parsing and like""" start="00:10:50.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""converting, we only have to do it""" start="00:10:51.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""incrementally. And so that's,""" start="00:10:54.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""that's how we dealt with that.""" start="00:10:56.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Or the other option is that we just,""" start="00:10:58.140" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""we just cache whatever the previous results""" start="00:11:00.720" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""are, and then run it asynchronously,""" start="00:11:03.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and they might get it delayed.""" start="00:11:04.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""But we've ended up doing more AST caching,""" start="00:11:08.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""which is fun and cool.""" start="00:11:09.880" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Sounds good. So we have here a question from""" start="00:11:15.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Blaine. If Eaglet is a subset of LSP mode,""" start="00:11:18.240" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""can EGLOT conflict with LSP mode if both are""" start="00:11:21.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""present in your initial .el""" start="00:11:23.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""file?""" start="00:11:24.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so I haven't played around with EGLOT""" start="00:11:27.740" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""mode a ton, so I'm not 100% sure.""" start="00:11:30.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I think all of the key bindings and commands,""" start="00:11:33.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""if you just install it out of the box,""" start="00:11:36.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I Think they're different.""" start="00:11:39.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So I don't think there's like any like""" start="00:11:41.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""overlap as far as that stuff goes but you""" start="00:11:44.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""will have the overlap of like you entered,""" start="00:11:47.520" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like you started a major mode for like some""" start="00:11:49.780" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""language, like they'll both probably start""" start="00:11:51.500" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""the language server and provide diagnostics""" start="00:11:53.040" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""and everything. And so then now you're""" start="00:11:55.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""getting like, you're just like doubling the""" start="00:11:58.180" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""work your computer is doing.""" start="00:11:59.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So there's that conflict.""" start="00:12:00.480" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""But if you prefer EGLOT mode or LSP mode for""" start="00:12:04.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like 1 language or framework,""" start="00:12:05.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like 1 major mode and LSP mode for the other,""" start="00:12:09.060" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I think you should be fine.""" start="00:12:10.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: All right. Just to let you know,""" start="00:12:14.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""we have like 1 minute on the stream and then""" start="00:12:20.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""we'll switch back and to the pre-recorded""" start="00:12:22.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""stuff I guess.""" start="00:12:24.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah yeah yeah let's hi sorry for the rude""" start="00:12:27.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""interruption but I'm just doing a little bit""" start="00:12:29.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""of time keeping so thank you so much Austin""" start="00:12:31.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""sadly I wasn't able to follow the Q&A because""" start="00:12:34.340" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I was in the other track answering questions.""" start="00:12:36.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""If, Austin, you want to stay and answer some""" start="00:12:39.960" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""more questions, feel free to do so.""" start="00:12:41.580" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""People tend to start talking as soon as we go""" start="00:12:45.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""off air, And I wouldn't be surprised with LSP""" start="00:12:48.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""that people would do the same.""" start="00:12:49.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""We're gonna move on for this track.""" start="00:12:52.800" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""We're gonna move on in 20 seconds to the next""" start="00:12:54.840" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""1. So Floey, thank you for hosting.""" start="00:12:56.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Austin, thank you for all your answers.""" start="00:12:58.680" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And We'll see you in a bit.""" start="00:13:01.460" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool. Thanks. See you.""" start="00:13:04.740" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Thanks for the Q&A.""" start="00:13:06.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 2]: All right. All right. You are now off air.""" start="00:13:10.120" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Thank you so much, Austin.""" start="00:13:11.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""I'm going to go back running in the""" start="00:13:13.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""background. And thank you,""" start="00:13:13.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Flowey, for everything.""" start="00:13:14.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: And thanks. Yeah. Have a nice,""" start="00:13:20.900" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""probably a nice day at your work.""" start="00:13:23.160" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, no worries. Yeah.""" start="00:13:24.140" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Yeah, it's still it's like lunchtime for me.""" start="00:13:26.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: So okay, here, it's like,""" start="00:13:28.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""09:00. 9pm. Thanks for the talk.""" start="00:13:34.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Sorry for the inconvenience was not having""" start="00:13:36.300" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""any, any questions, really.""" start="00:13:37.540" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: So yeah. Oh yeah, no worries.""" start="00:13:39.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's like, there's like no documentation on""" start="00:13:41.100" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""any of this stuff. So I didn't really expect""" start="00:13:42.940" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""any.""" start="00:13:43.380" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I was kind of interested when I jumped""" start="00:13:47.220" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""into NeoVim. I write it 1 or 2 things on my""" start="00:13:51.000" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""own, but never really got really deep into""" start="00:13:53.140" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""it. And you're gonna see with like compiler""" start="00:13:54.520" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""design and stuff like this,""" start="00:13:55.920" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but not really specific.""" start="00:13:57.400" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""So I was""" start="00:13:58.320" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: kind of- Yeah, that's the hard part.""" start="00:14:00.860" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""It's like, it's, LSP is cool,""" start="00:14:02.440" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""but then you have to like deal with all the""" start="00:14:05.020" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""like compiler stuff and programming language""" start="00:14:06.760" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""theory.""" start="00:14:07.200" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: So yeah. So it's, it shouldn't be too""" start="00:14:10.600" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""complicated. I had not really a question,""" start="00:14:13.280" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""so, but it worked out fine.""" start="00:14:14.700" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Thanks for the Q and A.""" start="00:14:16.500" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""And if I have any questions to Oak Hamill,""" start="00:14:18.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""Elderspeak will get an email from you.""" start="00:14:20.640" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh yeah, definitely.""" start="00:14:21.560" video="qanda-lspocaml" id="subtitle"]] +[[!template text="""[Speaker 0]: Dan?""" start="00:14:23.500" video="qanda-lspocaml" id="subtitle"]] + +Questions or comments? Please e-mail [austin@cutedogs.org](mailto:austin@cutedogs.org?subject=Comment%20for%20EmacsConf%202023%20lspocaml%3A%20Writing%20a%20language%20server%20in%20OCaml%20for%20Emacs%2C%20fun%2C%20and%20profit) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/lspocaml-before.md b/2023/info/lspocaml-before.md new file mode 100644 index 00000000..d3f225c8 --- /dev/null +++ b/2023/info/lspocaml-before.md @@ -0,0 +1,38 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 17-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="lspocaml-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="lspocaml-mainVideo" data=""" +00:00.000 Introduction +00:16.540 What is Semgrep? +00:40.720 How do we show security bugs early? +01:37.880 What is the Language Server Protocol? +02:29.040 Case study: Rust Analyzer +03:42.760 Rust Analyzer in action +04:09.960 Why is this useful? +05:36.220 So what about Emacs? +06:40.700 Technical part - Brief communication overview +07:58.760 Example request +08:03.380 LSP capabilities +09:23.380 Tips on writing a LS +11:03.480 Supporting a LS through LSP mode in Emacs +12:06.000 Create a client +13:07.300 Add to list of client packages +14:11.680 Add documentation! +14:17.880 Adding commands and custom capabilities +15:01.360 Thanks for listening + +"""]]<div></div>Duration: 16:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li><li><a href="https://toobnix.org/w/jgMzmGyx4H1YDwc5n1eRZu">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="lspocaml-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="lspocaml-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus"></audio></div><div></div>Duration: 14:24 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/lspocaml-nav.md b/2023/info/lspocaml-nav.md new file mode 100644 index 00000000..a705e389 --- /dev/null +++ b/2023/info/lspocaml-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a> +Next by track: <a href="/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/matplotllm-after.md b/2023/info/matplotllm-after.md new file mode 100644 index 00000000..2471df19 --- /dev/null +++ b/2023/info/matplotllm-after.md @@ -0,0 +1,227 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="matplotllm-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template text="""Hi, my name is Abhinav and I'm going to talk about""" start="00:00:00.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""this tool that I've been working on called MatplotLLM.""" start="00:00:03.040" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""MatplotLLM is a natural language interface""" start="00:00:06.200" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""over matplotlib, which is a library I use a lot""" start="00:00:09.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""for making visualizations.""" start="00:00:12.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""It's a pretty common Python library used a lot everywhere""" start="00:00:14.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""where there's need of plotting and graphing.""" start="00:00:18.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I usually use it in reports.""" start="00:00:22.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Whenever I'm writing a report in org mode,""" start="00:00:25.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I tend to write a code block which is in Python.""" start="00:00:27.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then that code block has usage of matplotlib""" start="00:00:31.560" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to produce some reports.""" start="00:00:34.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""That works really well.""" start="00:00:36.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But at times what happens is""" start="00:00:38.320" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I have to make a very custom graph, let's say.""" start="00:00:40.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then while I'm writing a report,""" start="00:00:43.960" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""it's kind of a huge leap of abstraction""" start="00:00:46.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""when I'm working on text""" start="00:00:50.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""versus going into actual low-level matplotlib code""" start="00:00:51.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to do that graphing.""" start="00:00:54.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So that's something I don't want to do.""" start="00:00:56.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Here's an example.""" start="00:00:59.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is a graph which is... I think it was made""" start="00:01:00.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""like five or six years back.""" start="00:01:04.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then there are some common things""" start="00:01:05.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""like scatter plot here,""" start="00:01:08.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""the dots that you can see here scattered.""" start="00:01:09.960" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Then... But there are a few things which, to do them,""" start="00:01:12.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to make them, you will actually have to go--at least me,""" start="00:01:16.280" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I have to go to the documentation""" start="00:01:19.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and figure out how to do it. Which is fine,""" start="00:01:20.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""but I don't want to do this, you know,""" start="00:01:24.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""spend so much time here, when I'm working on""" start="00:01:26.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""a tight deadline for a report.""" start="00:01:29.200" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""That's the motivation for this tool.""" start="00:01:32.320" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This tool basically allows me""" start="00:01:33.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to get rid of the complexity of the library""" start="00:01:35.200" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""by working via an LLM.""" start="00:01:38.480" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template new="1" text="""What is an LLM?""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template text="""So an LLM is a large language model.""" start="00:01:40.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""These are models which are""" start="00:01:43.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""trained to produce text, generate text.""" start="00:01:45.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And just by doing that,""" start="00:01:49.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""they actually end up learning a lot of common patterns.""" start="00:01:51.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""For example, if you ask a question,""" start="00:01:55.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""you can actually get a reasonable response.""" start="00:01:56.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""If you ask to write a code for something,""" start="00:01:58.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""you'll actually get code""" start="00:02:00.760" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which can also be very reasonable.""" start="00:02:01.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So this tool is basically a wrapper""" start="00:02:04.760" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""that uses an LLM. For the current version,""" start="00:02:06.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""we use GPT-4, which is OpenAI's model.""" start="00:02:11.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""It's not open in the sense of open source.""" start="00:02:13.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So that's a problem that it has.""" start="00:02:17.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But for this version, we are going to use that.""" start="00:02:21.120" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template new="1" text="""Using this library""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template text="""Using this library is pretty simple.""" start="00:02:23.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""You basically require the library""" start="00:02:25.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and then you set up your OpenAI API key here.""" start="00:02:27.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Then you get a code block""" start="00:02:30.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""where you can specify the language as `matplotllm`.""" start="00:02:33.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then what you can do is,""" start="00:02:35.760" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""you can basically describe what you want""" start="00:02:38.280" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""in natural language.""" start="00:02:40.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I'll take this example of this data set.""" start="00:02:41.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""It's called the Health and Wealth of Nations.""" start="00:02:45.280" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I think that was""" start="00:02:48.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""the name of a visualization where it was used.""" start="00:02:49.640" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is basically life expectancy,""" start="00:02:51.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""GDP of various countries starting from 1800.""" start="00:02:53.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I think it goes up to 2000 somewhere.""" start="00:02:59.280" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So earlier, I would try to write code which reads this CSV""" start="00:03:02.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and then does a lot of matplotlib stuff""" start="00:03:07.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and then finally produces a graph.""" start="00:03:09.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But with this tool, what I'll do is""" start="00:03:11.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I'll just provide instructions in two forms.""" start="00:03:13.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So the first thing I'll do is""" start="00:03:17.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I'll just describe how the data looks like.""" start="00:03:18.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So I'll say data is in a file called `data.csv`,""" start="00:03:21.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which is this file, by the way, on the right.""" start="00:03:29.040" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""It looks like the following.""" start="00:03:33.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I just pasted a few lines from the top, which is enough.""" start="00:03:39.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Since it's a CSV, there's already a structure to it.""" start="00:03:44.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But let's say if you have a log file""" start="00:03:47.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""where there's more complexities to be parsed and all,""" start="00:03:50.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""that also works out really well.""" start="00:03:53.760" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""You just have to describe how the data looks like""" start="00:03:55.040" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and the system will figure out how to work with this.""" start="00:03:58.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Now, let's do the plotting. So what I can do is...""" start="00:04:01.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Let's start from a very basic plot""" start="00:04:06.405" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""between life expectancy and GDP per capita.""" start="00:04:09.560" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I'll just do this.""" start="00:04:11.621" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text=""""Can you make a scatter plot""" start="00:04:13.801" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""for life expectancy and GDP per capita?"""" start="00:04:17.281" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Now, you can see there are some typos,""" start="00:04:26.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and probably there will be some grammatical mistakes""" start="00:04:29.640" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""also coming through.""" start="00:04:31.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But that's all OK, because the models are supposed to""" start="00:04:32.920" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""handle those kinds of situations really well.""" start="00:04:37.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So I send the request to the model.""" start="00:04:40.560" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Since it's a large model--GPT-4 is really large--""" start="00:04:43.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""it actually takes a lot of time to get the response back.""" start="00:04:47.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So this specific response took 17 seconds,""" start="00:04:50.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which is huge.""" start="00:04:53.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""It's not something you would expect""" start="00:04:54.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""in a local file running on a computer.""" start="00:04:57.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But I've got what I wanted. Right.""" start="00:04:59.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So there's a scatter plot here, as you can see below,""" start="00:05:01.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which is plotting what I specified it to do,""" start="00:05:04.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""though it looks a little dense.""" start="00:05:08.880" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template new="1" text="""Further instructions""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template text="""What I can do is""" start="00:05:11.701" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I can provide further instructions as feedback.""" start="00:05:12.641" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I try to feed back on this. So I can say,""" start="00:05:16.001" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text=""""Can you only show points where year is the multiple of 50?"""" start="00:05:18.401" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So since it's starting from 1800, the data points,""" start="00:05:30.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""there are too many years,""" start="00:05:33.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""so I'll just try to thin them down a little.""" start="00:05:34.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Now what's happening in the background""" start="00:05:37.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""is that everything below this last instruction""" start="00:05:40.200" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""is going out as the context to the model""" start="00:05:42.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""along with the code that it wrote till now.""" start="00:05:45.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then this instruction is added on top of it""" start="00:05:47.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""so that it basically modifies the code to make it work""" start="00:05:50.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""according to this instruction.""" start="00:05:53.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""As you can see now, the data points are much fewer.""" start="00:05:55.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is what I wanted also.""" start="00:05:58.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Let's also do a few more things.""" start="00:06:01.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I want to see the progression through time.""" start="00:06:02.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So maybe I'll do something like, color more recent years""" start="00:06:05.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""with a darker shade of...""" start="00:06:13.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Let's change the color map also.""" start="00:06:15.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Now, this again goes back to the model.""" start="00:06:21.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Again, everything below before this line""" start="00:06:24.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""is the context along with the current code,""" start="00:06:26.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and then this instruction is going to the model""" start="00:06:29.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to make the changes. So now this should happen, I guess.""" start="00:06:31.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Once this happens. Yeah. So. OK.""" start="00:06:37.040" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So we have this new color map,""" start="00:06:41.320" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and there's also this change of color.""" start="00:06:44.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And also there's this range of color from 1800 to 2000,""" start="00:06:46.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which is a nice addition.""" start="00:06:51.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Kind of smart. I didn't expect...""" start="00:06:53.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I didn't exactly ask for it, but it's nice.""" start="00:06:55.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So there's a couple more things.""" start="00:06:58.960" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Let's make it more minimal. "Let's make it more minimal.""" start="00:07:00.960" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Can you remove the bounding box?"""" start="00:07:07.760" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Also, let's annotate a few points.""" start="00:07:17.320" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So I want to annotate the point""" start="00:07:21.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""which has the highest GDP per capita.""" start="00:07:23.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text=""""Also annotate the point with highest GDP per capita""" start="00:07:25.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""with the country and year."""" start="00:07:33.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So again, forget about the grammar.""" start="00:07:37.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""The language model works out well.""" start="00:07:41.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Usually it takes care of""" start="00:07:43.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""all those complexities for you.""" start="00:07:46.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is what we have got after that.""" start="00:07:47.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""As you can see, there's the annotation, which is here.""" start="00:07:53.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I think it's still overlapping,""" start="00:07:55.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""so probably it could be done better,""" start="00:07:56.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""but the box is removed.""" start="00:07:58.560" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template new="1" text="""Room for improvement""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]] + +[[!template text="""Now, as you can see, the system is...""" start="00:08:00.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""You will be able to see this""" start="00:08:03.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""that the system is not really robust.""" start="00:08:04.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So the GitHub repository has some examples""" start="00:08:07.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""where it fails miserably,""" start="00:08:10.080" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and you'll actually have to go into the code""" start="00:08:12.120" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""to figure out what's happening.""" start="00:08:13.680" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""But we do expect that to improve slowly,""" start="00:08:15.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""because the models are improving greatly in performance.""" start="00:08:17.880" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is a very general model.""" start="00:08:21.040" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""This is not even tuned for this use case.""" start="00:08:22.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""The other thing is that""" start="00:08:24.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""while I was trying to provide feedback,""" start="00:08:26.640" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I was still using text here all the time,""" start="00:08:29.640" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""but it can be made more natural.""" start="00:08:32.200" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So, for example, if I have to annotate""" start="00:08:34.560" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""this particular point,""" start="00:08:36.160" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""I actually can just point my cursor to it.""" start="00:08:37.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Emacs has a way to figure out""" start="00:08:42.240" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""where your mouse pointer is.""" start="00:08:44.520" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And with that, you can actually go back into the code""" start="00:08:45.800" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""and then see which primitive""" start="00:08:49.621" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""is being drawn here in Matplotlib.""" start="00:08:51.961" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So that there is a way to do that.""" start="00:08:54.481" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And then, if you do that, then it's really nice to""" start="00:08:55.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""just be able to say""" start="00:08:58.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""put your cursor here and then say something like,""" start="00:09:01.320" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text=""""Can you make this?""" start="00:09:04.280" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Can you annotate this point?"""" start="00:09:05.000" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Because text is, you know... There are limitations to text.""" start="00:09:06.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""And if you're producing an image,""" start="00:09:10.720" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""you should be able to do that, too.""" start="00:09:12.480" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So I do expect that to happen soonish.""" start="00:09:13.960" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""If not, from the model side, the hack that I mentioned""" start="00:09:16.400" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""could be made to work.""" start="00:09:19.840" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""So that will come in in a later version, probably.""" start="00:09:21.360" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Anyway, so that's the end of my talk.""" start="00:09:24.440" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""You can find more details in the repository link.""" start="00:09:27.600" video="mainVideo-matplotllm" id="subtitle"]] +[[!template text="""Thank you for listening. Goodbye.""" start="00:09:29.760" video="mainVideo-matplotllm" id="subtitle"]] + + + +Captioner: sachac + +Questions or comments? Please e-mail [abhinav@lepisma.xyz](mailto:abhinav@lepisma.xyz?subject=Comment%20for%20EmacsConf%202023%20matplotllm%3A%20MatplotLLM%2C%20iterative%20natural%20language%20data%20visualization%20in%20org-babel) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/matplotllm-before.md b/2023/info/matplotllm-before.md new file mode 100644 index 00000000..8286a486 --- /dev/null +++ b/2023/info/matplotllm-before.md @@ -0,0 +1,19 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk; Q&A: Etherpad +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="matplotllm-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="matplotllm-mainVideo" data=""" +00:00.000 Introduction +01:40.720 What is an LLM? +02:23.600 Using this library +05:11.701 Further instructions +08:00.160 Room for improvement + +"""]]<div></div>Duration: 09:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/7bwq1vAqYzY24iEMYAdcB1">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/matplotllm-nav.md b/2023/info/matplotllm-nav.md new file mode 100644 index 00000000..340c24f0 --- /dev/null +++ b/2023/info/matplotllm-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a> +Next by track: <a href="/2023/talks/voice">Enhancing productivity with voice computing</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/mentor-after.md b/2023/info/mentor-after.md new file mode 100644 index 00000000..f51dfa88 --- /dev/null +++ b/2023/info/mentor-after.md @@ -0,0 +1,1792 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="mentor-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Hi everyone, my name is Jeremy Friesen, pronouns are he/him,""" start="00:00:01.380" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and today I'll be talking about""" start="00:00:06.320" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""mentoring VS Coders as an Emacs-ian.""" start="00:00:07.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""A little bit of background, since 2015, I've mentored""" start="00:00:11.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""about 40 software developers,""" start="00:00:15.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""many of them in career-transitioning roles,""" start="00:00:16.560" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""oftentimes from boot camps.""" start="00:00:19.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I've also managed a couple of small software development teams.""" start="00:00:21.740" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Framing approaches""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""So I want to think about mentoring and the framing approaches.""" start="00:00:26.740" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""We all don't know what we don't know.""" start="00:00:30.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So while mentoring, I like to be curious---asking questions,""" start="00:00:32.940" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I like to be visible,""" start="00:00:36.420" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I also like to pair so that we can share.""" start="00:00:37.660" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""What are you looking to learn?""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""When I start, I like to ask the following type of question:""" start="00:00:41.940" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""What have you been wanting to learn more of,""" start="00:00:45.300" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""get better at, and improve on?"""" start="00:00:47.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Then I like to ask further questions to get an understanding""" start="00:00:49.360" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""of where they've been, where they're going,""" start="00:00:52.940" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and what they'd like to achieve.""" start="00:00:55.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Later I'll ask coaching questions, "what's going well,"""" start="00:00:57.280" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""where are you getting stuck,"""" start="00:01:00.140" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and "if you change one thing, what would it be?"""" start="00:01:01.420" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Make the work visible""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""So like many people, I shifted to remote work in 2020,""" start="00:01:06.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I've noticed a higher collaboration in remote work,""" start="00:01:09.840" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""when folks make their work visible.""" start="00:01:13.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So to do that I host office hours,""" start="00:01:15.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I try to attend other people's office hours,""" start="00:01:18.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I'll open up a Slack huddle and just code by myself,""" start="00:01:20.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but let folks know, please hop in.""" start="00:01:23.440" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Hop in and be curious""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""I like to pay attention to other huddles that start.""" start="00:01:29.320" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""If they're going still for, like, 45 minutes or so,""" start="00:01:32.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'll hop in and say hello.""" start="00:01:35.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""It's even odds that they're moving along just fine""" start="00:01:36.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""or that they're stuck.""" start="00:01:39.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So by hopping into the Slack huddle,""" start="00:01:40.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'm helping with a common problem.""" start="00:01:43.280" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""How do you know when you're stuck?""" start="00:01:45.480" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""This is something that---as a manager---folks want to know,""" start="00:01:47.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""how can I get unstuck faster?""" start="00:01:50.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""As a human, it can be frustrating to be stuck for a long time,""" start="00:01:53.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but you also learn stuff""" start="00:01:57.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""when you're dealing with the hard things.""" start="00:01:58.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So you really need to balance that time,""" start="00:02:00.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I find hopping in, just being a gentle presence,""" start="00:02:03.220" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""with yes... an agenda, but just to say hi,""" start="00:02:07.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""is crucial to help the team members move along.""" start="00:02:10.360" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Pairing is for sharing""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Pairing is for sharing.""" start="00:02:15.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""When I pair, I like to let others drive.""" start="00:02:17.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""They're typing and working to resolve the problem.""" start="00:02:19.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'm giving guidance, asking questions,""" start="00:02:22.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""maybe thinking through a refactor.""" start="00:02:24.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'm also spending time observing how they interact with their editor.""" start="00:02:27.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""In the moment, I try to limit advice to, like, one concept.""" start="00:02:31.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""A lot of folks don't know that `Control-a`""" start="00:02:35.840" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""will take you to the beginning of line.""" start="00:02:37.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Just sharing that is huge sometimes.""" start="00:02:39.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Just gently do it and let it float there.""" start="00:02:42.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""And assuming we have a regular mentoring session,""" start="00:02:46.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'll make sure to ask how they're feeling""" start="00:02:48.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""about using their tools afterwards.""" start="00:02:50.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I would love to get to the point where they ask,""" start="00:02:52.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""You saw me using my editor, what is something""" start="00:02:55.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I could learn?"""" start="00:02:58.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'm working on getting to that point.""" start="00:03:00.960" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Editor functions""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""While pairing, I like to pay attention""" start="00:03:03.860" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""to how folks handle the following.""" start="00:03:05.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Where do they want to go?""" start="00:03:07.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""How do they get there?""" start="00:03:08.560" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Here they are, now what?""" start="00:03:10.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""How do they summarize?""" start="00:03:12.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I know what I can do in Emacs,""" start="00:03:13.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I assume that VS Code can do something similar.""" start="00:03:15.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""It's a matter of helping the mentees find those packages and plugins.""" start="00:03:17.400" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Where do they want to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Where to go?""" start="00:03:23.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Search within a project.""" start="00:03:24.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Everybody knows about this, but one thing""" start="00:03:25.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""that has been really critical for me""" start="00:03:28.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""has been the arrival of `Orderless`.""" start="00:03:29.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""A little quick demonstration.""" start="00:03:31.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""If I look, and I have this "chicken" and I do "spell",""" start="00:03:34.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I have found one, and they don't have""" start="00:03:40.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""to be in the right order.""" start="00:03:42.201" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""In fact, I can go back, and "spell" is there.""" start="00:03:43.381" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Super easy, helpful, so I don't have to think about it, the order.""" start="00:03:48.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Search across projects.""" start="00:03:52.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Cross-repository searching is super-simple in Emacs,""" start="00:03:54.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I've never seen anyone do it in VS Code.""" start="00:03:59.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I'm also trying to introduce folks to command-line tools""" start="00:04:02.740" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""such as RipGrep and SilverSearcher,""" start="00:04:05.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""not just to look in the project, but to go one directory up""" start="00:04:07.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and look across projects""" start="00:04:10.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""because sometimes when you're working on lots of different projects,""" start="00:04:12.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""there might be solutions or ideas that come from there.""" start="00:04:15.060" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Also notice that a lot of people use directory trees to navigate,""" start="00:04:19.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but I favor the fuzzy text.""" start="00:04:23.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So I can do something like `Command-t`""" start="00:04:25.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and start looking for things in there.""" start="00:04:27.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I just type the name of the file.""" start="00:04:31.280" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I use `consult-projectile`,""" start="00:04:33.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""which has a lot of really cool functionality.""" start="00:04:35.320" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""The big one being I can type `r`, recent file.""" start="00:04:39.540" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I can type `p` and jump to a different project,""" start="00:04:43.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""so it's a quick navigation tool that I've not seen in VS Code.""" start="00:04:47.720" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""How do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Next up is how do they get there?""" start="00:04:53.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I like to use LSP for the languages,""" start="00:04:56.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and I bound `M-.` to this""" start="00:04:58.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and jump back and forth to definitions.""" start="00:05:02.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I just showed `projectile` or `consult-projectile`""" start="00:05:05.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and its super-amazing multifunction finder.""" start="00:05:09.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Also another one that I am very avid about""" start="00:05:12.860" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""is the jump between definition and test.""" start="00:05:15.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I bind that to `Super-.`""" start="00:05:19.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and it helps me jump back and forth""" start="00:05:22.840" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""between my production code and my test code---""" start="00:05:25.840" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""especially in Ruby, there's an idiom for that.""" start="00:05:28.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""There is plugins in VS Code that does this correctly.""" start="00:05:32.120" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Here they are, now what?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Next up, now I'm here, what do I do?""" start="00:05:36.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Word completion, Emacs just knocks everything out of the park:""" start="00:05:39.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""`dabbrev`, `templates`, `hippie-expand`, `completion-at-point`.""" start="00:05:44.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Sometimes it just hurts to watch people type stuff""" start="00:05:48.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""that they could quickly expand""" start="00:05:52.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""because there are words within the code.""" start="00:05:54.320" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Another one is auto-formatting.""" start="00:05:56.300" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Tree sitter...its arrival is great.""" start="00:05:57.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I assume this is going to get better.""" start="00:06:00.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I love highlighting a region, hitting `TAB`, and it's just formatted.""" start="00:06:01.480" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I've seen a lot of VS Coders... that doesn't work for them.""" start="00:06:04.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Don't know why, trying to get them to see it.""" start="00:06:08.761" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Multi-cursor [`multiple-cursors`] and `iedit`...""" start="00:06:11.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""took me a long time to explore `iedit`,""" start="00:06:12.901" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but the practice... but practicing was huge,""" start="00:06:14.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and it has transformed my approach to coding and typing.""" start="00:06:17.840" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Folks know about multi-cursor editing and editing-in-region""" start="00:06:21.480" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but make sure that they are aware of it.""" start="00:06:24.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""It's important.""" start="00:06:27.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Next up is inline searching.""" start="00:06:29.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""My beloved Textmate... it was the first thing.""" start="00:06:32.620" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""In fact, it was why I chose not to use Emacs in 2005""" start="00:06:35.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and went with Textmate.""" start="00:06:38.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""This is something quite simple.""" start="00:06:41.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I can do `search` within here, and I can see "introduced",""" start="00:06:43.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and it will show me the line.""" start="00:06:50.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""What I like about that is when I'm in code,""" start="00:06:52.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I can see the neighborhood of other things""" start="00:06:54.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and get a good idea of what's around.""" start="00:06:56.320" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Yes, there is `occur-mode` that can be super useful,""" start="00:06:58.360" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but I'm used to the Textmate in it.""" start="00:07:01.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I just love it.""" start="00:07:03.840" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""How do they summarize?""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Next up is how they summarize.""" start="00:07:06.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I've seen a lot of bootcamp graduates write commit messages""" start="00:07:08.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""by going to the command line.""" start="00:07:11.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""In my experience, commit messages written in the command line""" start="00:07:14.380" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""tend to be terse.""" start="00:07:17.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""They miss something.""" start="00:07:18.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""So I try to really quickly shift folks to use their text editor,""" start="00:07:19.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""encourage them and""" start="00:07:23.480" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""teach them about `$GIT_EDITOR` and `$EDITOR` for the environment variables""" start="00:07:24.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""so they can make their commits from the command line.""" start="00:07:28.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""And if not there, help them improve how they do VS Code.""" start="00:07:31.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""My little screed at the top:""" start="00:07:34.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""the interface for VS Code's commit is trash.""" start="00:07:35.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""It is why I stepped away from VS Code when I was exploring editors.""" start="00:07:38.960" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""General strategies""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Next up, my goal is to encourage folks to use editors for writing,""" start="00:07:44.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""to think about owning that tool.""" start="00:07:48.440" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Commit to one item of learning each week""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""I have them try to learn one thing a week.""" start="00:07:52.060" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Maybe they aren't going to learn it,""" start="00:07:54.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but just not to overwhelm them""" start="00:07:55.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and find those high-value things.""" start="00:07:57.800" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Jump to spec, jump to code... super-valuable""" start="00:07:59.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""because I see folks doing it a lot during the day,""" start="00:08:03.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and it can really speed up the transition time""" start="00:08:06.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and keep the focus between the test...""" start="00:08:10.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""what you're trying to test and what you're trying to define,""" start="00:08:12.760" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""which can get lost if you do the tree navigation.""" start="00:08:15.480" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Practice within your knowledge domain""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Also I encourage people to practice their domain knowledge.""" start="00:08:18.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I learned a lot about programming by doing a bunch of things""" start="00:08:22.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""related to RPGs---role-playing games.""" start="00:08:27.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I did this previously in Ruby---dice rollers, note takers,""" start="00:08:30.020" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""random table lookups---and now I'm doing it in Emacs.""" start="00:08:33.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Knowing the domain helps me set aside the problem space""" start="00:08:35.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and then explore how I code""" start="00:08:40.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and how I can implement things differently.""" start="00:08:42.000" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Note-taking""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Note-taking: pay attention to how folks create a fleeting note.""" start="00:08:47.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""It can be excruciating as they try to figure out""" start="00:08:51.240" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""where am I going to put this?"""" start="00:08:54.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""What file?"""" start="00:08:55.600" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""Where does it go?"""" start="00:08:56.160" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Emacs, we have the *scratch* buffer or anything else,""" start="00:08:57.660" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but ask them about their note-taking habits""" start="00:09:01.760" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Help them navigate the proprietary software tar pits""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""and help them navigate the proprietary software tar pits.""" start="00:09:07.120" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""We know that anything that is venture-capital funded""" start="00:09:11.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""will eventually collapse.""" start="00:09:14.360" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""We know that things that don't have a sustainable business model""" start="00:09:16.040" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""without surveillance capitalism""" start="00:09:20.920" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""is going to also have problems.""" start="00:09:22.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Encourage folks to think about how they're owning their notes.""" start="00:09:25.300" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Do they place true value on those,""" start="00:09:28.560" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""or are they things that are kind of ephemeral?""" start="00:09:30.640" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""And then help them find the thing that makes sense for them.""" start="00:09:33.120" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Help show the joy of holisting computering""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""Put another way, I want people to think holistically""" start="00:09:38.520" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""about their generalized "computering" environment.""" start="00:09:43.240" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Playing is for staying""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""And I also think about the reason why""" start="00:09:47.740" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I've stayed a software developer for 25-years plus""" start="00:09:50.080" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""is because I approach all of this as play and storytelling.""" start="00:09:53.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Sometimes happy byproduct is that I ship features and documentation""" start="00:09:58.000" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""and help people get stuff done.""" start="00:10:02.440" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Yet I don't tell folks to use Emacs.""" start="00:10:05.200" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Instead, I'm doing my best to show a myriad of reasons""" start="00:10:07.960" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""for why folks should consider Emacs.""" start="00:10:10.720" video="mainVideo-mentor" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]] + +[[!template text="""In conclusion, ask questions.""" start="00:10:14.900" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Find a person who is a VS Coder and just say,""" start="00:10:18.740" video="mainVideo-mentor" id="subtitle"]] +[[!template text=""""hey, I learned something new."""" start="00:10:22.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""We play this game all the time, me and my coworker Kirk.""" start="00:10:23.880" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""I love it.""" start="00:10:26.720" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Another goal is showing the malleability of Emacs,""" start="00:10:27.700" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""how easy it is to extend.""" start="00:10:31.480" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""And obviously there's so much more than what I've highlighted,""" start="00:10:34.400" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""but then again, that's Emacs.""" start="00:10:36.680" video="mainVideo-mentor" id="subtitle"]] +[[!template text="""Thank you, and I look forward to your questions.""" start="00:10:38.720" video="mainVideo-mentor" id="subtitle"]] + + + +Captioner: hannah + +<a name="mentor-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:09.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""Hi, Jeremy, how are you doing?""" start="00:00:10.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. I'm doing all right.""" start="00:00:11.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""How about you?""" start="00:00:12.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm doing great as well.""" start="00:00:14.759" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm really happy to see all the talk that""" start="00:00:16.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""we're having. And I was particularly excited""" start="00:00:18.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""when I got your proposal for this talk""" start="00:00:21.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""because mentoring, as I was telling you""" start="00:00:24.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""during the check-in process,""" start="00:00:25.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""is a subject dear to my heart.""" start="00:00:27.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I'm really excited,""" start="00:00:28.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""not only for the talk that you've just done,""" start="00:00:30.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""but also for the question that people are""" start="00:00:32.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""going to ask you.""" start="00:00:32.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I'm looking forward to answering some""" start="00:00:35.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""questions. Mentoring is also something near""" start="00:00:39.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""and dear. Something I did not mention is when""" start="00:00:43.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""folks would ask me, like,""" start="00:00:45.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""what was your most important class?""" start="00:00:47.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""Or I said, oh, easy, easy,""" start="00:00:48.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""easy, high school English.""" start="00:00:50.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like, it's my whatever your primary written""" start="00:00:54.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""and spoken languages I think is the most""" start="00:00:56.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""useful skill as a programmer""" start="00:00:58.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: right so as usual people if you want to ask""" start="00:01:05.379" video="qanda-mentor" id="subtitle"]] +[[!template text="""questions to Jeremy, feel free to find the""" start="00:01:09.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""link to the other pad either on the talk page""" start="00:01:11.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""or on IRC. We're also going to open the chat""" start="00:01:15.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""so that people can join us and ask questions.""" start="00:01:17.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""Let me just make sure that I tell Sasha can""" start="00:01:20.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""you open ID Mentor. All right so in the""" start="00:01:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""meantime what we'll do is that I'll be""" start="00:01:27.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""reading questions of the pad and Jeremy will""" start="00:01:29.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""be answering them whilst we wait for you to""" start="00:01:31.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""join. Now just to be clear with the time,""" start="00:01:32.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""we have a little bit of time now,""" start="00:01:34.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""a little more time than before.""" start="00:01:36.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""We have 22 minutes, so until 10 of the next""" start="00:01:39.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""hours to answer as many questions as""" start="00:01:41.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""possible. And believe me,""" start="00:01:42.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""if you people watching right now are not""" start="00:01:45.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""asking questions, I will be asking plenty of""" start="00:01:47.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""them. So please, save Jeremy from my""" start="00:01:49.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: I look forward to it.""" start="00:01:53.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: inquisitive mind. All right.""" start="00:01:55.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""Starting with the first question,""" start="00:01:56.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""a very trivial 1, perhaps,""" start="00:01:59.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""but always 1 that I ask myself when I look at""" start="00:02:01.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""a keyboard. Regarding super key,""" start="00:02:03.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""which key do you bind to super?""" start="00:02:05.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so my left command,""" start="00:02:09.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""which is on a Mac keyboard,""" start="00:02:12.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""so the key right to the left of the space bar""" start="00:02:16.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""is super. And the key immediately to the""" start="00:02:20.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""right of spacebar, which is the right command""" start="00:02:23.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""key, is bound to hyper,""" start="00:02:24.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""which opens up a whole new suite of keys.""" start="00:02:28.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I thought it would take a little bit to""" start="00:02:31.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""get used to, but it's been amazing.""" start="00:02:33.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I definitely recommend having a hyper""" start="00:02:37.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""binding.""" start="00:02:38.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: I will, yes. I was also going to say super""" start="00:02:42.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""binding. No, it's a hyper binding.""" start="00:02:43.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""We already have super.""" start="00:02:44.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's your Windows key or your Linux key or""" start="00:02:47.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""whatever you want to call it.""" start="00:02:48.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""But I will warn people though,""" start="00:02:51.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's the gateway into fancy keyboard setups""" start="00:02:57.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""because it starts, it's the Trojan horse of""" start="00:03:00.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""fancy keyboard setup. Just,""" start="00:03:02.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""oh I wish I could have another modifier.""" start="00:03:04.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then many years later,""" start="00:03:06.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""you find yourself with this little thing that""" start="00:03:09.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm showing, which is a fully customized QMK""" start="00:03:11.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""keyboard.""" start="00:03:12.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: All right.""" start="00:03:13.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Following on that, then meta is to the left""" start="00:03:18.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""of super, and then control is to the left of""" start="00:03:21.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""meta. And also, caps lock maps to control as""" start="00:03:26.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""well. Definitely tried a bunch of tap for""" start="00:03:31.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""this and that on a programmable keyboard,""" start="00:03:35.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I have settled on keep it simple and use""" start="00:03:39.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""something like carabiner elements to do most""" start="00:03:41.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. It's good that you were able to stop""" start="00:03:46.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""there. I wish I'd stopped there at some point""" start="00:03:48.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: of the mapping. It was a terrible moment""" start="00:03:50.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""where I'm like, oh, what have I done when I""" start="00:03:52.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""was trying to type once?""" start="00:03:53.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: in my life. All right,""" start="00:03:57.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""moving on to the next question.""" start="00:03:58.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""Great talk. What's the package you used to""" start="00:04:01.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""make the org slide?""" start="00:04:02.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: So yeah, it's great. Yeah,""" start="00:04:03.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""so I am using Protz Logos and have,""" start="00:04:13.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think, like, Olivet mode.""" start="00:04:15.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'll post a link to the configuration for""" start="00:04:19.959" video="qanda-mentor" id="subtitle"]] +[[!template text="""turning it on and off.""" start="00:04:21.019" video="qanda-mentor" id="subtitle"]] +[[!template text="""But it's basically narrow region to an org""" start="00:04:24.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""heading, which is, I find that to be super""" start="00:04:27.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""helpful. Don't have to fiddle with it.""" start="00:04:30.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, just to be clear,""" start="00:04:32.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's Olivetti, right? I think that's the...""" start="00:04:34.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh yeah, Olivetti, yeah.""" start="00:04:36.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: A typical Italian word that is really tough""" start="00:04:39.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""to pronounce between Europeans and people in""" start="00:04:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I had a... For some reason I dropped""" start="00:04:46.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""the I at the end. So in my head""" start="00:04:48.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: the US. Yeah, moving to the next question if""" start="00:04:52.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""people do get interested in picking up emacs""" start="00:04:54.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""because of what they see you do How do you""" start="00:04:56.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""recommend they say they get into it?""" start="00:04:58.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""Oh""" start="00:04:58.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so I've been I think a lot of it comes""" start="00:05:05.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""down to what are the problems that they're""" start="00:05:09.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""trying to solve. And so I walked them through""" start="00:05:11.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""my journey. I worked in TextMate for a long""" start="00:05:15.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""time, then Sublime, then Atom.""" start="00:05:16.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then in 2020, I hopped over to Emacs,""" start="00:05:20.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""started writing in it and I chose Space Max""" start="00:05:25.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then I chose Doom.""" start="00:05:26.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then I was like, wait,""" start="00:05:28.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""start over, erase everything and just do the""" start="00:05:33.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""tutorial. So I did the tutorial and then I""" start="00:05:36.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""started writing and I was like,""" start="00:05:37.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""oh, I really want this functionality.""" start="00:05:39.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so I went and I looked for it and I""" start="00:05:43.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""installed the package.""" start="00:05:44.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then I got the functionality,""" start="00:05:46.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""went back to writing, and I'm like,""" start="00:05:47.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""oh, my editor should really be able to do""" start="00:05:49.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""this. And I thought about it.""" start="00:05:52.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""So a lot of it came down to the experience of""" start="00:05:55.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""what they're trying to accomplish.""" start="00:05:56.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And really helping ask them that.""" start="00:06:00.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""I had 1 mentee had used Vim for a long time""" start="00:06:04.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then was exploring using Evil Mode and""" start="00:06:07.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs and we had conversations and it was""" start="00:06:13.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""like go back to Vim like you were using VS""" start="00:06:16.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""Code just go back to Vim and they went back""" start="00:06:19.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""to Vim and then they started writing,""" start="00:06:20.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""well, they went to NeoVim and they started""" start="00:06:22.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""writing Lua plugins for stuff and it just""" start="00:06:27.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""helped free them and they gained that""" start="00:06:29.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""ownership in their text editor.""" start="00:06:31.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I try to have them think through what are""" start="00:06:37.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""the common tasks that they're trying to""" start="00:06:40.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""accomplish and then thinking in terms of""" start="00:06:44.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""that. So instead of going and finding a""" start="00:06:46.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""solution, understand the problems they're""" start="00:06:48.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""experiencing, which tends to be what we""" start="00:06:52.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""should do in software development.""" start="00:06:53.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""Instead of implementing the solve a problem.""" start="00:06:57.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""Sometimes It's fun to implement an idea.""" start="00:07:02.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I think it's really the crux,""" start="00:07:04.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""really, when it comes to software""" start="00:07:06.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""development, because what is at the crux of""" start="00:07:08.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""any kind of engineering?""" start="00:07:09.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""Well, it's the problem you're trying to""" start="00:07:11.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""solve. If you've got 2 islands and you need""" start="00:07:13.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""to join them up together,""" start="00:07:14.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""well, I need to build a bridge.""" start="00:07:15.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""Now, obviously with software,""" start="00:07:17.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""we have problems that defy the law of""" start="00:07:19.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""physics, which is great because we get very""" start="00:07:21.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""complex problems that are very exciting to""" start="00:07:23.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""solve. But when it comes to onboarding people""" start="00:07:26.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""into those ways of solving problems,""" start="00:07:28.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""well, I think mentoring,""" start="00:07:29.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""The key behind mentoring is that together,""" start="00:07:32.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""we're going to look at a problem and we're""" start="00:07:35.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""going to try to see how high would fix it.""" start="00:07:37.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""And you're going to try to appreciate whether""" start="00:07:40.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""this is something you would do as well or""" start="00:07:42.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""would like to do.""" start="00:07:43.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yep, Absolutely. Yeah,""" start="00:07:50.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's really taking time to walk with them on""" start="00:07:54.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""the journey to understand what's frustrating""" start="00:07:56.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""them. I have a coworker we've been working""" start="00:07:59.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""together for a very long time.""" start="00:08:01.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""She is not a fast navigator of her editor,""" start="00:08:05.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""but as we've talked, that's not where she's""" start="00:08:08.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""looking to get better.""" start="00:08:09.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""She's looking to get better at asking the""" start="00:08:17.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""questions of the clients early so that we""" start="00:08:20.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""don't go down long paths of implementation.""" start="00:08:23.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""So it's been great because she's not looking""" start="00:08:27.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""to get better at her text editor.""" start="00:08:29.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""She's adequate for how she navigates.""" start="00:08:32.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""Other people look and they're like,""" start="00:08:34.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""man, I want to do it faster.""" start="00:08:35.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want to do it different.""" start="00:08:36.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want to do it better.""" start="00:08:37.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then we have a different conversation.""" start="00:08:39.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. All right. Moving on to the next""" start="00:08:44.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""question. I've been using Emacs for about 30""" start="00:08:46.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""years and I find it really difficult to""" start="00:08:49.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""figure out how to help people get started""" start="00:08:50.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""with it So I guess my question is the same as""" start="00:08:54.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""the green question right about it.""" start="00:08:55.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think it's slightly different though You""" start="00:08:57.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""could it is more about well go on please.""" start="00:09:00.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""Yeah""" start="00:09:01.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: so My wife a while ago,""" start="00:09:06.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""talked about the idea of,""" start="00:09:10.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""relative to anybody, I am an expert or""" start="00:09:15.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""slightly more informed on a topic than the""" start="00:09:19.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""person quote behind me.""" start="00:09:20.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""And there's a person ahead of me who's""" start="00:09:22.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""slightly more informed than I am.""" start="00:09:24.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so what we're looking at is perhaps with""" start="00:09:27.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""30 years of experience,""" start="00:09:28.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""introducing someone to Emacs might be""" start="00:09:32.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""difficult because you've you're too much of""" start="00:09:35.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""an expert. So maybe the there's a an idea of""" start="00:09:41.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""like what are the principles of pedagogy.""" start="00:09:42.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""I know we that was talked about yesterday in""" start="00:09:45.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""a presentation about like here's a""" start="00:09:47.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""constraint, you're using Emacs for the""" start="00:09:49.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""course. But so it's that idea of sharing what""" start="00:09:54.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""you have, where you're at,""" start="00:09:56.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""will, I think by nature,""" start="00:10:00.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""move the entire queue of people,""" start="00:10:03.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""like they don't really exist.""" start="00:10:04.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, they do, but they don't.""" start="00:10:06.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Behind you, it'll help move them together""" start="00:10:08.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""forward just a little bit.""" start="00:10:10.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And maybe we all move the condition together.""" start="00:10:13.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""So It's not a only 1 person kind of thing.""" start="00:10:17.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's a mindset of improving shared""" start="00:10:22.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""understanding.""" start="00:10:22.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Exactly, and I'd like to come back on""" start="00:10:26.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""something that you mentioned in your answer,""" start="00:10:28.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""because it's, you know,""" start="00:10:30.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""what the person asking the question""" start="00:10:33.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""mentioned, 30 years of advance,""" start="00:10:35.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""basically, on starting Emacs.""" start="00:10:36.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""You know, that's a lot of time,""" start="00:10:37.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""And you tend to equate this to a massive gap""" start="00:10:40.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""in terms of skills between the 2 people.""" start="00:10:42.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""And whilst it's obvious that would be a gap""" start="00:10:47.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""of skills. You know, I find that learning in""" start="00:10:50.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""terms of pedagogy works best when the person""" start="00:10:54.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""doing the teaching is very close in terms of""" start="00:10:58.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""skill levels to the person being taught.""" start="00:11:00.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Why is it the case? It's because it's much""" start="00:11:02.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""fresher in their memory what are the""" start="00:11:05.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""different elements that they have to go""" start="00:11:08.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""through to acquire a particular skill.""" start="00:11:09.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""To go a little bit into the theory,""" start="00:11:12.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm not sure if you're familiar with Vygotsky""" start="00:11:14.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""or at least the I plus 1.""" start="00:11:16.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Are you familiar with this,""" start="00:11:17.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: I am not, go on.""" start="00:11:20.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Jeremy? So I used to be a teacher before,""" start="00:11:22.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""and it's 1 of the things they taught us.""" start="00:11:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's about the fact that when you are trying""" start="00:11:26.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""to make someone acquire a skill,""" start="00:11:28.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""I represents the current knowledge,""" start="00:11:31.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""and plus 1 is the thing that you should be""" start="00:11:34.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""teaching them and the theory behind it is""" start="00:11:38.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""that it's much easier to teach someone to""" start="00:11:41.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""teach something to someone when they only""" start="00:11:44.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""have to focus on plus 1 i.e.""" start="00:11:46.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""Something that is very close nearby to them""" start="00:11:48.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""If you go with something that is I plus 2,""" start="00:11:50.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""I plus 3, or god forbid I plus 10,""" start="00:11:53.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's going to be much harder for them to get""" start="00:11:55.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""to the understanding because the distance is""" start="00:11:58.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""much greater. And that's why I think""" start="00:12:01.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""mentoring can be taken in 2 ways.""" start="00:12:05.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""It could be a mentor who's merely ahead of""" start="00:12:07.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""you by plus 1, or it could be a mentor that""" start="00:12:10.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""is ahead of you by plus 10,""" start="00:12:12.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""but who has the understanding of what plus 1,""" start="00:12:14.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""plus 2, and plus 3 is.""" start="00:12:15.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, and it can be very challenging to""" start="00:12:22.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""unwind that. I know if we think about all of""" start="00:12:27.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""our hands or input methods have a memory of""" start="00:12:33.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""something that I honestly couldn't tell you""" start="00:12:35.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""what it is. Right? Like,""" start="00:12:38.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I know how to do it on a keyboard,""" start="00:12:40.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? We've internalized so much.""" start="00:12:43.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so, yeah, how to walk backward is a""" start="00:12:47.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""distinct challenge and being curious with""" start="00:12:51.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""them and close to them and not asking,""" start="00:12:55.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""trying to diffuse questions and not ask like""" start="00:13:00.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""leading, not overly leading.""" start="00:13:03.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""An example, early on in my mentoring career,""" start="00:13:09.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was working in a community project,""" start="00:13:11.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""and I really wanted to go in and say to""" start="00:13:14.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""everybody, why do we suck at sharing code?""" start="00:13:18.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""But instead I said, wait a minute,""" start="00:13:21.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""what would be the question I could ask the""" start="00:13:24.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""group in which I could then ask my question?""" start="00:13:27.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""So instead I went into the group and I said,""" start="00:13:30.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""how are we doing about sharing code?""" start="00:13:32.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""And collectively, we were able to establish""" start="00:13:37.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""we didn't feel very good about it.""" start="00:13:39.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""And that conversation now 9 years ago,""" start="00:13:42.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""helped move a process along for the last,""" start="00:13:47.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""like it gave it energy for 9 years of how""" start="00:13:50.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""we're sharing and how we're approaching""" start="00:13:51.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""stuff. So yeah, the curious questions are""" start="00:13:58.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""super helpful.""" start="00:14:00.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, lovely way to finish this point.""" start="00:14:04.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""We have about 10 more minutes so I'm glad""" start="00:14:06.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""that we have a little bit of extra time to""" start="00:14:08.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""answer the questions because we have a little""" start="00:14:10.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""more. All right, I'm gonna switch to the next""" start="00:14:13.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""question we can come back to people reacting""" start="00:14:15.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""to what you just said a little bit later.""" start="00:14:16.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Sure.""" start="00:14:17.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, have you encountered anyone that""" start="00:14:20.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""are being negative about the fact that you're""" start="00:14:23.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""using Emacs, assuming that they just don't""" start="00:14:26.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""know or have misconceptions about Emacs and""" start="00:14:28.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""nothing malicious? If so,""" start="00:14:30.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""how do you handle these kinds of people?""" start="00:14:32.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure, So at work, I get a gentle elbowing of""" start="00:14:40.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""like, oh, Jeremy's going to talk about Emacs""" start="00:14:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""again. So it's not entirely...""" start="00:14:45.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""Maybe it's a little dismissive,""" start="00:14:50.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I don't actually care because like it's""" start="00:14:56.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""like being, I don't know,""" start="00:15:00.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's like being made fun of for using a""" start="00:15:02.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""particular type of pen.""" start="00:15:03.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like goal is to write something,""" start="00:15:05.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? And I'm using a pen that gives me joy.""" start="00:15:09.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""When I talk with my mentees,""" start="00:15:11.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""like I want to meet them exactly where""" start="00:15:14.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""they're at with their code and like what""" start="00:15:16.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""they're comfortable with and help them remove""" start="00:15:20.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""any of that potential like inadequacy,""" start="00:15:23.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""sense of inadequacy or imposter syndrome or""" start="00:15:27.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""any of those things because The goal is to,""" start="00:15:32.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""for me, to be better at computering.""" start="00:15:36.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like hop on my computer.""" start="00:15:39.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want to be able to use it at a speed of""" start="00:15:45.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""thought that doesn't introduce a lot of""" start="00:15:47.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""friction. Another speaker talked about that""" start="00:15:50.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""using HyperBowl and a couple of plugins to""" start="00:15:54.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""write stream of consciousness.""" start="00:15:55.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""And that was an important consideration.""" start="00:15:57.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want my text editor to flow with me.""" start="00:16:01.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so I'm like, well,""" start="00:16:02.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs flows with me smooth.""" start="00:16:03.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like you can deride it all you want.""" start="00:16:08.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""It doesn't thread very well,""" start="00:16:09.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it's just me on this machine.""" start="00:16:12.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't need it to overly thread,""" start="00:16:14.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""at least for my use cases.""" start="00:16:15.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I can only agree 100% with what you've""" start="00:16:22.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""just said. And it's very easy to dismiss""" start="00:16:25.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""stuff like Vim or Emacs based on the very""" start="00:16:28.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""trite sentences that everyone use.""" start="00:16:31.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""But at the end of the day,""" start="00:16:32.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I really like what you said.""" start="00:16:33.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Those are just pencil that we're using to""" start="00:16:36.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""express ourselves. And we're doing something""" start="00:16:39.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""a little more fancy than just writing words""" start="00:16:41.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""on a page. But ultimately,""" start="00:16:43.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's just text at the very bottom.""" start="00:16:46.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""So whatever helps us write this test,""" start="00:16:48.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""this text more easily,""" start="00:16:50.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, it's always good.""" start="00:16:52.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""Yeah. All right. Moving on to the next""" start="00:16:56.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""question. I love the attitudes and worldview""" start="00:16:59.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""that infuse your blog post and your talk this""" start="00:17:02.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""weekend. Learn something every week.""" start="00:17:05.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's cumulative. English class was the most""" start="00:17:08.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""important. What other advice do you have and""" start="00:17:11.319" video="qanda-mentor" id="subtitle"]] +[[!template text="""how is it generalizable to those of us who""" start="00:17:13.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""are not devs?""" start="00:17:14.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure. So I think 1 of the really big changes""" start="00:17:26.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""for me, and I talked about this in the""" start="00:17:29.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""writing Q&A, is switching my blog from a""" start="00:17:34.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""topical 1 about role-playing games and board""" start="00:17:38.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""games into anything that I think I want to""" start="00:17:43.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""write. And that shift happened about the time""" start="00:17:47.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""that I was really exploring using Emacs for""" start="00:17:50.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""writing. And so previously I had,""" start="00:17:54.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""I would write blog posts in Markdown using,""" start="00:17:57.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""or I would write it in the web interface.""" start="00:18:00.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""And getting to the point where my writing was""" start="00:18:06.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""the same as my coding,""" start="00:18:08.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""was the same as my RSS consumption,""" start="00:18:12.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""was the same of a lot of these things,""" start="00:18:15.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""freed up my general interests so that they""" start="00:18:21.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""all can kind of play in that space.""" start="00:18:23.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""So and that's the, I think,""" start="00:18:27.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""Feynman said, like, his notes are his""" start="00:18:33.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""thoughts. It's not him thinking,""" start="00:18:35.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, they are him thinking as well.""" start="00:18:38.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""So it's really framing it that way.""" start="00:18:40.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then for not devs,""" start="00:18:44.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""My daughter has been doing screenwriting and""" start="00:18:49.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""she just had her school license for the tool""" start="00:18:53.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""that they use for writing screenplays.""" start="00:18:54.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""She had to pay for it on her own.""" start="00:18:57.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I was like, hey, let's take a look at""" start="00:18:59.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs. There's a package for this.""" start="00:19:01.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""Maybe it makes sense to you.""" start="00:19:03.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I think the, really to summarize it is""" start="00:19:09.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""like the broad curiosity in like,""" start="00:19:12.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""I have a liberal arts degree,""" start="00:19:14.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""I have barely any computer science classwork""" start="00:19:20.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""practice. I have a lot of practical""" start="00:19:23.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""experience doing software development,""" start="00:19:26.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""but theory is minimal.""" start="00:19:28.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""Instead, I look to things like Lord of the""" start="00:19:32.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""Rings or role-playing games or poetry or""" start="00:19:35.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""history or whatever and be curious and Then""" start="00:19:40.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""be playful The introduction of git locally""" start="00:19:47.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""where I can just have a Git repo means my""" start="00:19:51.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""text is recoverable. I don't,""" start="00:19:56.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""I can play. I'll just break it,""" start="00:19:59.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'll change it. It's software,""" start="00:20:00.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""let it be soft. It's not hard.""" start="00:20:02.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""It can be hard to work with it,""" start="00:20:05.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""but let it be soft. Let it be pruned,""" start="00:20:08.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""let it go away, let it die,""" start="00:20:09.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""let it come back.""" start="00:20:11.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, That's a lovely attitude to have.""" start="00:20:16.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, I've already talked about my past as""" start="00:20:20.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""an English major in 1 of the EmacsConf talks,""" start="00:20:23.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""but just like you, I don't have a comp sci""" start="00:20:26.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""education. I just started with needing a""" start="00:20:30.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""better pen, and that was about 10 years ago.""" start="00:20:32.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""And now I find myself hosting Emacs Cons,""" start="00:20:36.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it was a very incremental process,""" start="00:20:38.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""a very cumulative process,""" start="00:20:40.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""to reuse the word that we used before.""" start="00:20:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""And What I also like about people outside of""" start="00:20:48.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""CompSight using Emacs,""" start="00:20:49.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""and we've got plenty of such examples in the""" start="00:20:53.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""presentations we've had this year,""" start="00:20:54.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""but also last year, is that you get so many""" start="00:20:57.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""different windows into how people are using""" start="00:21:00.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs, and it kind of harks back to what I""" start="00:21:03.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""was saying before about Emacs being a""" start="00:21:06.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""platform with many horizontal packages""" start="00:21:08.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""permitting any kind of workflow imaginable""" start="00:21:10.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""and some people are going to gravitate""" start="00:21:13.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""towards old mode. I think it was your sister""" start="00:21:16.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""that you mentioned that was looking into""" start="00:21:18.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""packages for writing screenplays.""" start="00:21:20.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Well, we've got such a thing in Emacs.""" start="00:21:23.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, a screenplay is just a monospace font""" start="00:21:26.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""with some fancy formatting.""" start="00:21:27.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's not very complicated.""" start="00:21:29.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""And if you can get behind,""" start="00:21:32.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, someone using such a stable format""" start="00:21:36.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""for writing screenplay with many rules,""" start="00:21:38.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""but ultimately all the screenplay look the""" start="00:21:40.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""same, well, Emacs is kind of just the same.""" start="00:21:42.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's about standardizing the way you edit""" start="00:21:45.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""text. So I think your sister was already half""" start="00:21:47.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it was my it was my my daughter.""" start="00:21:51.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm trying to sell her on.""" start="00:21:52.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: on the idea. Oh, no, sorry.""" start="00:21:53.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, she also picked up programming just 1""" start="00:21:56.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""day and was like, I forget that.""" start="00:21:58.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like she was playing with a stage manager""" start="00:22:01.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""programming thing or like have a little""" start="00:22:03.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""avatars moving around.""" start="00:22:04.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so she's got a predisposition to like the""" start="00:22:11.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""craft of things. And I think that's another""" start="00:22:15.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""aspect is like, I'm not,""" start="00:22:18.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, I appreciate science.""" start="00:22:21.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm here for a scientific approach,""" start="00:22:23.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I also Really enjoy the craft of things""" start="00:22:27.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""Playing with it Like this is my playground.""" start="00:22:32.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""I love kind of hacking on it and looking at""" start="00:22:36.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""packages and Seeing how I might use it pick""" start="00:22:39.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""it up for a little bit and then maybe I""" start="00:22:42.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""forget about it""" start="00:22:42.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, well Jeremy I think that was Lovely""" start="00:22:47.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""finish. Oh, sorry plasma.""" start="00:22:49.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""Oh, sorry. I thought he was someone on Mumble""" start="00:22:51.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""talking to me. I'm actually going to have to""" start="00:22:54.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""be sorry because we only have about 50""" start="00:22:56.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""seconds until we move on to the next talk.""" start="00:22:58.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""But please, Plasma Strike,""" start="00:22:59.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""If you want to ask your question to Jeremy,""" start="00:23:01.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""by all means, stay in the room.""" start="00:23:02.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yep, I'll be here.""" start="00:23:04.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: And we'll be recording all of this and we'll""" start="00:23:07.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""put this later on the talk page.""" start="00:23:09.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""So Jeremy, I'll have to say bye now because I""" start="00:23:12.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""need to prepare the next room.""" start="00:23:13.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""But It was lovely talking with you and thank""" start="00:23:16.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""you for all your answers.""" start="00:23:17.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Absolutely. Thank you.""" start="00:23:19.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 0]: Bye-bye. Bye.""" start="00:23:21.220" video="qanda-mentor" id="subtitle"]] + +[[!template new="1" text="""Start of section to review""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]] + +[[!template text="""[Speaker 2]: See you. Hello. One of the things with Emacs is""" start="00:23:26.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's not... It's like when you change the""" start="00:23:28.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""file management, you just change very,""" start="00:23:30.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""very small amounts of what exactly you need,""" start="00:23:33.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""you want to change. Like you go from text""" start="00:23:38.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""editing to your file manager,""" start="00:23:43.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""you're not changing your theme,""" start="00:23:44.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""you're not changing your font.""" start="00:23:46.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: And you""" start="00:23:49.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: use your bookmarks, you use your bookmarks in""" start="00:23:52.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""your emails, you use your bookmarks in your""" start="00:23:54.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""org-mod documents, you use it in E-dub,""" start="00:23:59.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""W-W buffers if you use that,""" start="00:24:02.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it's just the, Yeah,""" start="00:24:06.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's just the least amount of Incremental""" start="00:24:10.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""changes""" start="00:24:10.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: yeah, you're when you were talking about like""" start="00:24:14.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""the Reducing friction like turn off editing""" start="00:24:18.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""or not editing, but auto correct while you're""" start="00:24:22.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""typing, it's absolutely spot on.""" start="00:24:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""You're wanting to get whatever is flowing""" start="00:24:29.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""needs to keep flowing,""" start="00:24:31.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""like as a programmer or as a creative,""" start="00:24:33.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""anytime I can hit flow is my goal.""" start="00:24:38.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so paying attention to what removes flow""" start="00:24:42.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""or hinders it or saps energy and that unified""" start="00:24:48.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""environment of Emacs is really helpful to""" start="00:24:52.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""maintain that. So yeah.""" start="00:24:57.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: I think it's about speed and then once after""" start="00:25:02.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""you get some of that, then you're like,""" start="00:25:04.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""well, yeah, it's important,""" start="00:25:06.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""but this is like the last thing I care about.""" start="00:25:09.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Speed is all like,""" start="00:25:14.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""Yeah, there's a quote that I love called,""" start="00:25:19.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""I forget the author. It's,""" start="00:25:22.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""there is a connection between slowness and""" start="00:25:30.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""remembering and fastness and forgetting.""" start="00:25:33.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""And the slowness is an interesting,""" start="00:25:39.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""like it's, I am moving fast in Emacs because""" start="00:25:43.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""I've forgotten how I'm doing it.""" start="00:25:46.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""I just do it now, right?""" start="00:25:47.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then the slowness of like being in my""" start="00:25:52.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""thought and staying on that stream is where I""" start="00:25:57.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""want to be and ride whatever that pathway is.""" start="00:26:01.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""And a text editor is still hard to do that""" start="00:26:07.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""because if I were using a pen and paper it's""" start="00:26:10.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""more cumbersome to auto-edit.""" start="00:26:11.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""But I can't get it out without losing my""" start="00:26:18.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""thinking. And so I ended up having to type""" start="00:26:21.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""it.""" start="00:26:21.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Something I've been experimenting with is""" start="00:26:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""using, well, recording.""" start="00:26:26.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""Some other people are using dictation for""" start="00:26:29.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""this to just get the blur out of the ideas""" start="00:26:31.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""and you can go back and glean some of that""" start="00:26:35.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""stuff out of it.""" start="00:26:36.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, what I will do when I'm capturing like""" start="00:26:41.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""quotes or epigraphs is I will almost always""" start="00:26:44.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""turn on dictation because I got a book in 1""" start="00:26:47.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""hand. So I'm like, on goes the typing.""" start="00:26:52.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""And yeah, that is, there's a,""" start="00:26:56.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm really thankful that that exists as well.""" start="00:26:59.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like my mother is blind.""" start="00:27:01.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so having that helps her and me""" start="00:27:05.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""communicate Through text because we're both""" start="00:27:08.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""able to appreciate it And use it in a way""" start="00:27:12.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""that is accessible for both of us""" start="00:27:15.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Go ahead""" start="00:27:19.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: There's the L feet to package which will""" start="00:27:23.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""which will allow you to both of us.""" start="00:27:25.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""There's the ElfieTube package which will""" start="00:27:25.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""allow you to subscribe to a YouTube channel""" start="00:27:28.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then download the subtitles and give you""" start="00:27:32.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""remote control access to the MPV player to""" start="00:27:36.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""watch the YouTube thing.""" start="00:27:37.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""And considering you have a really big""" start="00:27:41.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""subtitle thing that you can click at the""" start="00:27:44.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""various different places,""" start="00:27:45.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's really surprising about how different""" start="00:27:47.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""that makes YouTube feel.""" start="00:27:49.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah I've...""" start="00:27:50.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: And then on top of that about how much like""" start="00:27:54.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""if you've used it why would you never have""" start="00:27:57.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""thought about that before because it's...""" start="00:27:59.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""Right. It's even better.""" start="00:28:00.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right absolutely. Sasha?""" start="00:28:04.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Oh I would say I do use the caption slot also""" start="00:28:10.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""when I'm skimming through stuff for Emacs""" start="00:28:11.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""News. But for books specifically,""" start="00:28:13.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""I often use Google Lens to just capture the""" start="00:28:18.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""text and copy it so that I don't have to deal""" start="00:28:21.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""with recognition errors or whatever.""" start="00:28:24.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""really useful.""" start="00:28:25.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: It's just So 1 of my hobbies is role-playing""" start="00:28:31.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""games and the tabular data that is in the""" start="00:28:35.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""role-playing books is never in correct,""" start="00:28:38.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""like copy it out. And so I was like this is""" start="00:28:43.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""really annoying And I ended up taking""" start="00:28:46.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""screenshots on my machine,""" start="00:28:47.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""running Tesseract to pipe it in,""" start="00:28:50.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then using Emacs to like edit it because""" start="00:28:53.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""Tesseract adheres to the column format that""" start="00:28:57.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm looking for. And I'm really thankful that""" start="00:29:00.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""we're at a place where the OCR is in good""" start="00:29:05.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""shape. That's part of my day job is working""" start="00:29:09.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""on some old documents that OCR is good,""" start="00:29:14.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""but not great because of like their 19th""" start="00:29:18.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""century documents, but having that ability to""" start="00:29:23.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""me is really powerful because we're gonna be""" start="00:29:28.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""able to share that text And also then once""" start="00:29:32.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's understood in what it's ASCII or UTF-8""" start="00:29:35.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""encoding is, it can be translated as well.""" start="00:29:39.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""So we can make it even more generally""" start="00:29:41.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""available, which I think is a nice thing to""" start="00:29:46.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""have.""" start="00:29:46.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: I wanted to go back to the topic of mentoring""" start="00:29:51.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""since that's something that I'm very much""" start="00:29:54.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""interested in figuring out how to facilitate""" start="00:29:55.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""in the Emacs community.""" start="00:29:56.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""Other people have been working on kind of""" start="00:30:00.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""remote mentoring initiatives with Emacs""" start="00:30:03.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""Buddy. And there are meetups as well that""" start="00:30:07.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""kind of get that sense of like,""" start="00:30:09.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, what people are doing things and""" start="00:30:10.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""then somebody can look over their shoulder""" start="00:30:12.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""and say, hey, have you ever thought about""" start="00:30:14.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right.""" start="00:30:15.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: this? Is there any things that you can can""" start="00:30:17.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""suggest specifically in the context of this""" start="00:30:20.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""kind of mentoring over a distance?""" start="00:30:23.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""Any chance you've thought about it?""" start="00:30:25.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm on the Emacs buddy repo and I've had a""" start="00:30:30.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""handful of people reach out to me.""" start="00:30:32.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""Most often we start with email and every so""" start="00:30:37.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""often it'll be like, hey,""" start="00:30:38.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""let's hop on some kind of video or audio,""" start="00:30:44.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""even just done phone calls.""" start="00:30:47.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""Yeah, I haven't done any of the like shared""" start="00:30:53.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""buffer stuff. I know like at work we have""" start="00:30:57.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""replit where we can use that.""" start="00:30:59.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""Seeing the presentation on CDRT,""" start="00:31:02.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was like, oh, that's really great.""" start="00:31:04.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""But what I found is being able to see""" start="00:31:10.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""someone, I don't get to see them typing,""" start="00:31:15.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I get to see the results of what they're""" start="00:31:17.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""doing on the computer.""" start="00:31:18.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""You know paying attention to that is the big""" start="00:31:22.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""1 to help them think of a different way.""" start="00:31:26.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""Depending on where they're at when they're""" start="00:31:28.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""writing if they are like at a pause point,""" start="00:31:32.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""if I'm at my best, I'll be like,""" start="00:31:35.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""so what are you thinking?""" start="00:31:37.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""Where are you stuck? Cause maybe they're""" start="00:31:40.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""trying to navigate somewhere and that starts""" start="00:31:43.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""to create a point for a conversation of like,""" start="00:31:46.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""how do I go from here to there?""" start="00:31:48.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so it's looking for those moments is""" start="00:31:57.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""where I try to operate.""" start="00:31:58.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: And sometimes, you know,""" start="00:32:03.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""so there's kind of like,""" start="00:32:05.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""how do you go from here to there?""" start="00:32:06.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""And sometimes even the,""" start="00:32:08.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""what there should I be going for is a""" start="00:32:12.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""challenge, right? Because especially with""" start="00:32:15.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs newbies, they might not necessarily""" start="00:32:16.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""know what's possible or what's nearby in""" start="00:32:19.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""terms of what their current knowledge is.""" start="00:32:21.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""And that's an interesting thing to map out.""" start="00:32:23.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Is that something that you've thought about""" start="00:32:25.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""and as you're conversing with all these""" start="00:32:29.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""people?""" start="00:32:29.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: The main thing, the main function that I do""" start="00:32:37.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""talk, I talked about this,""" start="00:32:38.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think in the, I did in the talk where it's,""" start="00:32:41.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""I need to jump between the test and the""" start="00:32:46.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""implementation. And since 2005,""" start="00:32:50.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""I've had that. And I watch folks not have""" start="00:32:56.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""that. I'm just like, Oh,""" start="00:32:57.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""my goodness, like there's a convention in the""" start="00:33:00.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""language we work in. Let's get that""" start="00:33:02.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""installed. Let's get it going.""" start="00:33:04.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like that's 1 thing, that's 1 access I know""" start="00:33:07.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""they're gonna go to. Another 1 is the jump to""" start="00:33:11.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""definition. And I've never gotten like C""" start="00:33:14.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""tags. I haven't really spent time on that,""" start="00:33:16.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""but with the advent of LSP,""" start="00:33:18.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""it works a lot better.""" start="00:33:21.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so I try to get people to use that.""" start="00:33:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""And what I've noticed weirdly is like VS""" start="00:33:30.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""code, it doesn't work as well as I would have""" start="00:33:34.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""thought. And there's lots of like errors and""" start="00:33:36.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""warnings popping up in the bottom corner.""" start="00:33:38.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I'm like, well, you gotta pay attention to""" start="00:33:41.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""that. But I try not to get into anybody's""" start="00:33:45.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""business about like, I'm like,""" start="00:33:47.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""maybe we could fix that.""" start="00:33:48.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""Maybe we can clean it up,""" start="00:33:50.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it's your, you know,""" start="00:33:51.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's your car you're driving.""" start="00:33:54.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm just long for a ride.""" start="00:33:56.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's safe, we're fine.""" start="00:33:57.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""So yeah, that jumped to definition.""" start="00:34:01.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then the, I mean, search in project,""" start="00:34:07.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""like everybody understanding that.""" start="00:34:10.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""But I feel that the, like I mentioned in the""" start="00:34:15.219" video="qanda-mentor" id="subtitle"]] +[[!template text="""talk, the advent of orderless is just huge.""" start="00:34:17.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""I did not realize how much I loved it because""" start="00:34:21.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't have to think about things and can""" start="00:34:24.159" video="qanda-mentor" id="subtitle"]] +[[!template text="""have slightly more forgiving default""" start="00:34:28.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""searches. Yeah, it's hard.""" start="00:34:34.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""The principles of organizing 10 things versus""" start="00:34:39.159" video="qanda-mentor" id="subtitle"]] +[[!template text="""100 versus 1,000 versus 10,000""" start="00:34:41.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""are just, they're not the same.""" start="00:34:44.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: A common hang up for, that would easily make""" start="00:34:52.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""you skip off of Emacs,""" start="00:34:54.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""Org Mode, Hyperbole is if you go into any of""" start="00:35:00.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""those with the mindset of I'm going to master""" start="00:35:03.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""it all before I use it.""" start="00:35:05.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""That's not going to work.""" start="00:35:06.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Absolutely. I was terrified of org mode when""" start="00:35:13.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""I started because I'm like,""" start="00:35:14.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't need to organize my life.""" start="00:35:16.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""I need to like type. And then that,""" start="00:35:20.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""yes, incremental. What did I find helpful?""" start="00:35:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: It's for the, for the Linux CLI toolbox,""" start="00:35:28.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""but you have to look at them as more of just,""" start="00:35:30.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""I have a whole bunch of tools available to me""" start="00:35:34.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""and I'll just pick them up as I have a""" start="00:35:39.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""problem and as I, and as the tool can be""" start="00:35:42.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""useful for this problem and incrementally.""" start="00:35:44.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. It's""" start="00:35:47.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: actually, so, in fact,""" start="00:35:54.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""when when I'm mentoring people,""" start="00:35:56.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""I have to take a step back and say,""" start="00:35:58.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""OK, what are we with the note taking thing""" start="00:36:00.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""that you mentioned in your talk.""" start="00:36:01.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""How do you like to take notes?""" start="00:36:03.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""How do you like to keep track of the things""" start="00:36:04.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""that you want to work on when you have an""" start="00:36:06.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""idea? Where does it go?""" start="00:36:07.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Because if you improve that practice,""" start="00:36:10.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""and especially if you can sneak some literate""" start="00:36:12.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""programming in without them really noticing,""" start="00:36:14.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""then it becomes the thing that they can use""" start="00:36:17.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""to learn more efficiently.""" start="00:36:18.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. I was presenting at,""" start="00:36:23.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""I wasn't presenting at this seminar,""" start="00:36:26.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I attended it and it was a crash course""" start="00:36:30.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""in command line tools.""" start="00:36:31.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I didn't, I mean, I went there to listen""" start="00:36:35.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""and there was a point where the people were""" start="00:36:38.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""like, I use this command line tool.""" start="00:36:40.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm not a programmer, I'm a librarian,""" start="00:36:42.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm an archivist. I use it,""" start="00:36:45.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm like, great, I'm gonna remember this.""" start="00:36:47.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then I forget about it and I might use it""" start="00:36:49.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""6 months from now. And so I tried to""" start="00:36:54.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""encourage everybody, like come up with,""" start="00:36:56.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""like you have a degree in knowledge and""" start="00:37:00.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""information, management and organization,""" start="00:37:02.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""introspect, right? Spend some time on it.""" start="00:37:06.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""Think about what is a way that I can do this""" start="00:37:09.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""and ask questions to get to the point where""" start="00:37:13.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""you can create a discoverable inventory of""" start="00:37:18.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""the tools you've used and what that means.""" start="00:37:22.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""And my answer was, I use literate programming""" start="00:37:26.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""or I shove it in my bin directory in GitHub""" start="00:37:30.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""and like, I don't know if I'll remember it,""" start="00:37:34.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I can go there every now and then and be""" start="00:37:35.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""like, oh yeah, that command.""" start="00:37:37.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""So note taking is the most critical component""" start="00:37:44.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""of any number of work.""" start="00:37:46.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Sometimes I wonder if we can maybe""" start="00:37:51.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""externalize some of all this mentoring""" start="00:37:54.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""insight and kind of like this choose your own""" start="00:37:57.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""adventure thing, where the person says,""" start="00:37:59.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""OK, this is what I got at the moment.""" start="00:38:01.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then through a series of diagnostic""" start="00:38:03.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""questions, we can figure out what hurts,""" start="00:38:05.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? Where is the thing that they would""" start="00:38:08.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""like to learn more about?""" start="00:38:08.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then, okay, if that hurts,""" start="00:38:09.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""try this and keep that manageable.""" start="00:38:12.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""And if there's only a way to also be able to""" start="00:38:15.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""capture each person's state,""" start="00:38:17.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""the things that they know about and have""" start="00:38:19.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""absorbed into their habits.""" start="00:38:20.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""So you can say, right,""" start="00:38:22.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, my recommendation for someone who's""" start="00:38:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""brand new to org is not the same as somebody""" start="00:38:28.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""who's like, okay, they've got their agendas""" start="00:38:30.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""and everything set up already.""" start="00:38:31.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""Just how do we represent that as like WISPs?""" start="00:38:33.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: I've given up on trying to map that.""" start="00:38:39.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""I like the one-on-one conversations and""" start="00:38:43.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""discovery. And I think that's the part where""" start="00:38:47.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""you're looking at, you're asking about how do""" start="00:38:51.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""we make the process and like I heard,""" start="00:38:55.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""like how do we help equip those who want to""" start="00:38:58.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""mentor as well, right?""" start="00:39:01.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""Making that, reducing the barrier in a way.""" start="00:39:05.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: I don't""" start="00:39:06.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: know, I think what you said about enjoying""" start="00:39:08.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""the conversation and the fact that it is""" start="00:39:10.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""really unique for each person,""" start="00:39:12.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""each situation that comes up.""" start="00:39:14.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""I suspect what it just comes down to is more""" start="00:39:18.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""like capturing the good stuff of each""" start="00:39:21.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""mentoring session or whatever.""" start="00:39:23.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""Maybe it's getting the mentees to write very""" start="00:39:25.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""short blog posts about what they learned this""" start="00:39:27.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""week or whatever else.""" start="00:39:28.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then, oh, yeah, you know,""" start="00:39:30.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""we ran into the same problem 3 months ago.""" start="00:39:33.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""Let me go look it up. And then that becomes a""" start="00:39:36.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""reusable segment.""" start="00:39:37.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, when I worked at a coding bootcamp,""" start="00:39:41.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""they tried to encourage the mentors to say,""" start="00:39:46.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""like write a blog posts for the mentees.""" start="00:39:49.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And that was, some of them did,""" start="00:39:57.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it was intimidating because like they""" start="00:40:01.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""didn't wanna, I don't know.""" start="00:40:03.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""Are we enculturated in an education system""" start="00:40:06.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""where we can't get it wrong or we need to""" start="00:40:09.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""look like we're more of an expert than we""" start="00:40:11.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""are? I don't know. I have a lot of like,""" start="00:40:15.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm a middle aged white guy,""" start="00:40:17.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""I've got a lot of background and privilege in""" start="00:40:20.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""my career. So like, it's not as scary to put""" start="00:40:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""something forward for myself as it might be""" start="00:40:28.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""as like a woman in tech or a minority in""" start="00:40:31.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""tech, because that's a different place.""" start="00:40:35.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I want to really get done with that.""" start="00:40:38.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't like that at all.""" start="00:40:40.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I would love our, like,""" start="00:40:43.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""just write. And it doesn't have to be public,""" start="00:40:46.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? You don't have to make it public,""" start="00:40:48.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""but if you make it discoverable to yourself,""" start="00:40:51.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""that's the big thing. And 1 of my coworkers,""" start="00:40:58.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""She doesn't blog, but she definitely has a""" start="00:41:04.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""large knowledge base of stuff that she""" start="00:41:07.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""references because she's pulling out all""" start="00:41:08.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""kinds of stuff and I'm like whatever you're""" start="00:41:10.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""doing is working.""" start="00:41:11.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: I'm trying to have something.""" start="00:41:17.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""There's a good opportunity with the Emacs""" start="00:41:23.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""conference to accomplish this.""" start="00:41:25.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""So like if you make like a,""" start="00:41:28.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""because 1 of the things with it is,""" start="00:41:31.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""Sasha, you do a really good job of using all.""" start="00:41:36.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""You're the 1 who has the Emacs buffer with""" start="00:41:38.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""the time on it, right?""" start="00:41:39.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""Is that your screen that's being recorded for""" start="00:41:41.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""that? Because you have a really good example""" start="00:41:45.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""of a really consolidated emacs workflow that""" start="00:41:50.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""works really good with the Emacs conference""" start="00:41:53.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""so if you had like a page that described how""" start="00:41:56.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""you did all that stuff in the emacs""" start="00:42:00.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""conference like on that and then we then you""" start="00:42:04.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""did even more stuff with that.""" start="00:42:06.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like you do the org mode file that you can""" start="00:42:09.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""just put straight into your agenda for your""" start="00:42:12.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""time zone. I used that.""" start="00:42:14.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""That was really nice, just because it allowed""" start="00:42:17.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""me to reorganize and see how all the talks""" start="00:42:19.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""would work together, and which ones I wanted""" start="00:42:21.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""to do. You could add Org Mode to do tags with""" start="00:42:25.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""that, to say, plan to watch,""" start="00:42:31.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want to re-watch but I have to skip it""" start="00:42:36.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""because there's another talk I'm watching,""" start="00:42:37.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, like a couple tags don't care about""" start="00:42:40.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""so that people can easily tag all the talks""" start="00:42:43.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""that they care about on top of that.""" start="00:42:47.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then with, I'm going to try to email""" start="00:42:52.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""these ideas on it too,""" start="00:42:54.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""but then you can also,""" start="00:42:57.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""you have the either pad questions,""" start="00:43:00.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""you could put all those in org-mode documents""" start="00:43:03.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""with crdt.el, post all those in the Emacs""" start="00:43:08.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""conference and then people could use that to""" start="00:43:11.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""edit all the documents at the same time so""" start="00:43:13.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""then everybody's actually collaboratively""" start="00:43:15.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""editing. And then people have all the""" start="00:43:20.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""scaffolding for if you do the Emacs meetings,""" start="00:43:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""buddy meetings, because they know exactly how""" start="00:43:27.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""to set it all up with that.""" start="00:43:29.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then you combine it with any number of""" start="00:43:34.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""whatever chat video program so that people""" start="00:43:38.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""can talk and watch each other.""" start="00:43:39.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: I have a presentation later on EmacsConf""" start="00:43:45.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""infrastructure and I will capture the note""" start="00:43:48.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""And maybe I can include a mini tutorial in""" start="00:43:51.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""the schedule org so that people can be like,""" start="00:43:53.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""hey, by the way, you could refile these""" start="00:43:55.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""things into your own org files or tag them""" start="00:43:58.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""and here's a list thingy that filters your""" start="00:44:01.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""agenda by your tag or whatever,""" start="00:44:03.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""it'll be fine. But it's,""" start="00:44:04.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, it's, it's kind of like,""" start="00:44:06.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""it is, you're right. It is an opportunity to""" start="00:44:09.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""expose people to more things that they could""" start="00:44:12.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""do in kind of a scaffolded way.""" start="00:44:14.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""That's interesting stuff,""" start="00:44:16.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I, your point actually driving also going""" start="00:44:18.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""back to previous parts of conversation about,""" start="00:44:21.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's difficult for people to share.""" start="00:44:24.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""When you realize, like I keep telling""" start="00:44:26.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""everyone, hey, if you blog about Emacs,""" start="00:44:28.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""you'll not only learn things for yourself and""" start="00:44:30.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""make things more searchable,""" start="00:44:31.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""other people will come by and tell you even""" start="00:44:33.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""better ways of doing things,""" start="00:44:34.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""which is something that always happens to me""" start="00:44:36.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""too, and I'm posting this.""" start="00:44:37.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""Has that ever happened?""" start="00:44:38.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm sure that happens to you.""" start="00:44:39.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: It's great. I love getting those things like,""" start="00:44:45.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""yeah, Howard's presentation on the game""" start="00:44:49.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""stuff. I'm like, I'm going to go explore that""" start="00:44:51.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""now. Because it's my little house.""" start="00:44:54.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: You just have to make it less intimidating,""" start="00:44:57.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? And kind of change people's perception""" start="00:45:00.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""that, oh, blogging or sharing tutorials or""" start="00:45:03.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""whatever, that's then when you're an expert,""" start="00:45:05.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""when you're an experienced,""" start="00:45:06.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""to rather working out loud,""" start="00:45:09.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""thinking out loud, this is just that I'm""" start="00:45:11.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""learning along the way.""" start="00:45:12.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""And it might not be the most efficient way to""" start="00:45:15.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""do things, but this is what I'm doing right""" start="00:45:17.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""now.""" start="00:45:17.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. And I had a handful of times where I""" start="00:45:23.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""posted something and someone was like,""" start="00:45:25.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Oh yeah, this is, this would have you tried""" start="00:45:27.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""this? Or I'm like, I didn't even know that""" start="00:45:30.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""existed. That makes this easier.""" start="00:45:32.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: I've written this like little hack and I'm""" start="00:45:37.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""very proud of it because it's clever.""" start="00:45:38.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then someone's like,""" start="00:45:39.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Oh yeah, there's a package for that.""" start="00:45:41.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's called this. Right?""" start="00:45:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you. Right? Yeah.""" start="00:45:43.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's just it's Yeah, it the fantastic part""" start="00:45:49.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""it. I played Legos as a kid and me and my""" start="00:45:54.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""friends would play Legos at the house.""" start="00:45:55.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""And Emacs has this like feeling of playing""" start="00:46:00.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""Legos with a group of people across the""" start="00:46:04.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""world. In fact, 1 of my current,""" start="00:46:06.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""well, 1 of my best friends now,""" start="00:46:09.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""we met a year ago. And it turns out we both""" start="00:46:14.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""love Emacs. We talk every Thursday and we""" start="00:46:18.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""hang out and we talk poetry.""" start="00:46:19.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""We talk Tom Petty. We talk Emacs.""" start="00:46:23.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""We talk software development.""" start="00:46:24.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""He does Python. I do Ruby.""" start="00:46:26.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""Just anything and everything.""" start="00:46:29.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""And it's also we both are curious because we""" start="00:46:36.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""don't use it the same way.""" start="00:46:38.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""And we like how we accomplish a task.""" start="00:46:43.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think that's the fascinating part to me is""" start="00:46:47.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""we each get to explore our way to interact""" start="00:46:50.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""with the computer uniquely by whatever""" start="00:46:54.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""pathways are in our brain.""" start="00:46:55.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""We see stuff, we pick it up,""" start="00:46:58.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""and we're like, that doesn't quite work for""" start="00:47:00.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""me, or, oh, that worked really well.""" start="00:47:01.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""Fascinating, like, I don't know,""" start="00:47:06.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""shared art installation.""" start="00:47:08.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: I think you're onto something that I also""" start="00:47:13.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""resonate with. 1 of the things that""" start="00:47:15.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""fascinates me about Emacs is all these""" start="00:47:18.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""people's configuration jobs are crystallized""" start="00:47:21.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""workflows. And it's really when you talk to""" start="00:47:24.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""them and you see how they're using it,""" start="00:47:26.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""and you understand a little bit of their""" start="00:47:29.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""story and things that they need,""" start="00:47:32.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""the ideas they've had,""" start="00:47:33.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""that's really fascinating.""" start="00:47:35.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I think that's 1 of the things that makes""" start="00:47:37.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""it possible to be perpetually curious about""" start="00:47:39.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs, because it's not just the,""" start="00:47:42.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, this is the,""" start="00:47:43.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""these are all the Lego pieces there are,""" start="00:47:45.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""but you have this community of people who are""" start="00:47:47.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""using these Lego bricks in such fascinating""" start="00:47:50.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""ways and always inventing new things for it.""" start="00:47:53.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, new colors, new shapes,""" start="00:47:56.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""they show up. It's great.""" start="00:47:59.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: It's like powered twice or something like""" start="00:48:03.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""that because it's like you can use Emacs with""" start="00:48:06.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""a thousand different customizations and then""" start="00:48:09.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""you can interact with people who can each""" start="00:48:12.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""also Use Emacs in a thousand different ways""" start="00:48:16.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Mm-hmm, Right,""" start="00:48:17.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Then you can both learn from each other and""" start="00:48:20.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""that can go a thousand different ways.""" start="00:48:21.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""So it's like, it's like powering your""" start="00:48:24.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Yep.""" start="00:48:25.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Something along those lines with each other""" start="00:48:27.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""and like how different and how much you can""" start="00:48:30.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""learn from it.""" start="00:48:31.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, the kind of touching back to the mentee""" start="00:48:38.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""that I have who went, he had originally""" start="00:48:41.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""started in Vim and then did VS code.""" start="00:48:44.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then we were talking and he was gonna go""" start="00:48:47.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""into Emacs and I didn't have a,""" start="00:48:50.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, sure, that'd be great.""" start="00:48:52.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""But he's like, I don't have a lot of time.""" start="00:48:53.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I'm like, well, go back to the place that""" start="00:48:56.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""you have that experience.""" start="00:48:57.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""And he did, And then he started writing Lua""" start="00:49:01.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""plugins. He was like, this is so much fun.""" start="00:49:02.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm like, good, you're on the right path.""" start="00:49:05.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like maybe there'll be space like over time,""" start="00:49:10.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""how Lua plugins and Emacs,""" start="00:49:13.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, who knows? I know that Lua,""" start="00:49:16.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""you can use Fennel to write Lisp.""" start="00:49:19.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""In you write Lisp and it will transpile""" start="00:49:24.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""Fennel to Lua. I forget how that plays out,""" start="00:49:29.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""but we're not too far away from those 2""" start="00:49:31.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""things being able to play.""" start="00:49:34.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""But I guess the question is,""" start="00:49:39.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""does it need to? I don't know.""" start="00:49:41.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah, I mean, even without direct code""" start="00:49:44.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""translation, the cross-pollination of ideas""" start="00:49:47.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""is certainly enough. I love the fact that""" start="00:49:51.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""people are borrowing ideas from VS Code and""" start="00:49:54.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""from Vim and people look at Emacs videos and""" start="00:49:57.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""other things and say, hey,""" start="00:49:58.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""that's a cool thing in Emacs,""" start="00:49:59.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I don't want to ever use Emacs.""" start="00:50:01.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm going to do that whole thing in Vim.""" start="00:50:03.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I think that's fantastic.""" start="00:50:04.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Absolutely. Yeah. I mean,""" start="00:50:07.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""monocultures die. They just do.""" start="00:50:10.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""And computer software and computer industry""" start="00:50:16.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""pushes towards monoculture because of it""" start="00:50:24.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""wants the highest efficiency.""" start="00:50:26.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I'm like, I'm not,""" start="00:50:31.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I mean, sometimes I'm here for that,""" start="00:50:33.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""but most of the time I'm like,""" start="00:50:35.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want the bumps and the warts.""" start="00:50:37.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want the art, the human interaction,""" start="00:50:40.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""the like, why are we trying to accomplish""" start="00:50:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""this?""" start="00:50:43.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: It determines, It depends on how you""" start="00:50:46.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""determine efficiency because Emacs is far""" start="00:50:49.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""Even if Emacs isn't multi-threaded is far""" start="00:50:52.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""more efficient because because of the mental""" start="00:50:56.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""model shifts because you're able to play and""" start="00:51:00.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""tweak with it and then have as much of a""" start="00:51:04.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""mental model shift for each task change that""" start="00:51:07.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""you want. Like, yeah, I want my file manager""" start="00:51:10.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""to not be an editable text buffer.""" start="00:51:16.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""Although sometimes when I want to rename""" start="00:51:18.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""files, I want it to be that.""" start="00:51:20.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Yeah, and really,""" start="00:51:23.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""like, to be clear, I like the idea of Emacs""" start="00:51:26.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""as a projection of, like,""" start="00:51:29.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""how I think about stuff.""" start="00:51:30.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""So it's that whatever my neurons have made a""" start="00:51:33.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""good pathway for, I can have Emacs flow with""" start="00:51:37.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""me. That efficiency side is I want a factory,""" start="00:51:41.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want to stamp out widgets,""" start="00:51:43.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""I want them to be the same,""" start="00:51:44.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""chop, chop, chop, chop,""" start="00:51:45.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""chop, chop. That emacs runs in its spirit""" start="00:51:51.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""along with vim contrary to that and I like""" start="00:51:57.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""that""" start="00:51:57.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: emacs is a 1 of the things with the like the""" start="00:52:00.530" video="qanda-mentor" id="subtitle"]] +[[!template text="""mental model of Emacs is you should look at""" start="00:52:03.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs like this is probably something that""" start="00:52:06.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""people should think about when they are""" start="00:52:08.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""introducing Emacs to other people is Emacs is""" start="00:52:10.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""a treasure trove of conflicting ways of""" start="00:52:15.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""solving the same problem so you get,""" start="00:52:18.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""so you can individuate yourself on how you""" start="00:52:22.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""actually want to solve that problem.""" start="00:52:23.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Do you""" start="00:52:25.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: want Vim bindings or not?""" start="00:52:26.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""You get to choose. Or do you want Meow""" start="00:52:30.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""bindings? You can choose.""" start="00:52:31.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yep. Absolutely. Yeah.""" start="00:52:34.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""I, I came, I'm, I consider my,""" start="00:52:38.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""I, I lament because in 2005 I almost picked""" start="00:52:42.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""up Emacs and it wasn't until 2020 that I""" start="00:52:46.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""picked it up. And fortunately I picked it up""" start="00:52:49.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""when I did because I was able to look at""" start="00:52:54.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""things I had previously accomplished and find""" start="00:52:58.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""analogs And things like Helm and Ivy were""" start="00:53:05.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""both 2 different ways of doing it and consult""" start="00:53:08.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then, or Selectrum and then consult,""" start="00:53:11.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""like they all had these different ways And it""" start="00:53:15.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""felt great because I could find the thing""" start="00:53:18.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""that worked for me. And they're close,""" start="00:53:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""but then they also like branch out and do""" start="00:53:27.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""things differently. And it was so fascinating""" start="00:53:30.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""to explore each of those and spend an hour or""" start="00:53:34.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""2 on a primary task in seeing where that""" start="00:53:39.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""little thread went. It's great.""" start="00:53:42.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: So tell me a bit more about how you got into""" start="00:53:47.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs. What pulled you""" start="00:53:51.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: in? Yeah, this is a great little moment.""" start="00:53:55.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""I started in TextMate,""" start="00:53:59.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""That's kind of where I would say the""" start="00:54:03.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""beginning for coding for open source and""" start="00:54:06.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""using open source software.""" start="00:54:07.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""Sorry, using open source frameworks and""" start="00:54:11.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""languages. So TextMate to Sublime,""" start="00:54:14.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""basically TextMate couldn't search very well""" start="00:54:18.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""at the time. It was getting bogged down.""" start="00:54:20.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I moved to Sublime,""" start="00:54:21.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""which solved it, felt well,""" start="00:54:23.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""carried the same UI look with me.""" start="00:54:27.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then when I was at a conference,""" start="00:54:30.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""there was a talk about using an open source""" start="00:54:34.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""editor. I was like, yeah,""" start="00:54:36.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""I need to do that. I really need to.""" start="00:54:38.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""And Adam was viable. I was like,""" start="00:54:43.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""Oh, this is really close.""" start="00:54:44.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'll use it. And I didn't think too much""" start="00:54:47.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""about it. And then the writing was on the""" start="00:54:49.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""wall, that Adam is going away.""" start="00:54:51.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I was like, I need to find an open source""" start="00:54:55.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""editor that speaks to me.""" start="00:54:57.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I said, all right,""" start="00:54:59.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""Vim, This is my fifth time.""" start="00:55:00.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""I will try. And I gave an earnest 2 weeks.""" start="00:55:06.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I'm just like, I cannot get this mental""" start="00:55:09.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""model in my head. So I'm like,""" start="00:55:11.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""all right, I set it down.""" start="00:55:12.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""I can use Vim, I'm comfortable.""" start="00:55:14.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think it's a great tool,""" start="00:55:15.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""but my mental model doesn't map well there.""" start="00:55:19.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I'm like, all right,""" start="00:55:21.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""here we go, VS code. All right,""" start="00:55:24.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""you're fine. But I feel like I might""" start="00:55:28.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""accidentally charge my credit card in the""" start="00:55:31.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""text editor on the default installation.""" start="00:55:33.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""And that was alluded to by in 1 of the talks,""" start="00:55:38.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""I forget who he German about mandating Emacs""" start="00:55:46.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""in his computer science classes.""" start="00:55:48.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""He mentioned like the Microsoft Office or""" start="00:55:51.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""Microsoft Marketplace felt like it was there.""" start="00:55:54.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""So that was 1, but the moment where I was""" start="00:55:58.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""like, oh, hell no, VS Code.""" start="00:56:02.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""Or I wanted to use a commit from the command""" start="00:56:08.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""palette, and it brought up an HTML text input""" start="00:56:12.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""area, and it was 30 characters.""" start="00:56:15.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""And in that moment, I saw several things.""" start="00:56:23.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""1, I'm like, no, that's terrible because I""" start="00:56:27.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""want to write something meaningful.""" start="00:56:28.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""2, this is the behavior that this tool is""" start="00:56:33.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""modeling. That tells me that history and like""" start="00:56:38.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""how it is built is not important.""" start="00:56:41.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And yes, I can fix it and get around it.""" start="00:56:47.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I kind of did. And I was like,""" start="00:56:49.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""the principles are just,""" start="00:56:51.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""they're there. And then also understanding""" start="00:56:53.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""like there's a bunch of telemetry underneath""" start="00:56:56.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""it. So I used VS Codium,""" start="00:56:58.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""there's still telemetry.""" start="00:57:00.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I was like, all right,""" start="00:57:03.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""2005 Jeremy, let's go try Emacs,""" start="00:57:07.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""let's see if we can do it.""" start="00:57:08.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I hopped in, I grabbed Space Max.""" start="00:57:13.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was Like, yeah, this works pretty well.""" start="00:57:16.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like, I don't know how to use the keys very""" start="00:57:18.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""well. I'm figuring it out.""" start="00:57:20.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""And. And I was like, you know what?""" start="00:57:26.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""Why don't I do the tutorial?""" start="00:57:27.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""And it was the tutorial that hooked me.""" start="00:57:30.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""Not because everything made 100% sense""" start="00:57:36.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""because Emacs is old. It had a lot of""" start="00:57:42.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""language that was hard to internalize,""" start="00:57:45.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it presented it in a conversational I'm""" start="00:57:50.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""gonna meet you where you're at and we're""" start="00:57:52.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""gonna walk with it together.""" start="00:57:53.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then when I was done with the tutorial,""" start="00:57:56.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""I said, you know, Space Max,""" start="00:57:58.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't understand it.""" start="00:57:59.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""And it's got some performance.""" start="00:58:00.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""It looks like there's like extra stuff that I""" start="00:58:04.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""may not need. So I went vanilla,""" start="00:58:08.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""nothing Emacs and just started working.""" start="00:58:11.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was like, well, how do you do this?""" start="00:58:14.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Although 5 minutes of Space Max or any of""" start="00:58:17.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""those Emacs distribution shows you""" start="00:58:19.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""unequivocally how different it can be.""" start="00:58:22.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: It was, it was, it was so amazing,""" start="00:58:25.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""and it was so good. But I knew my nature was,""" start="00:58:31.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was frustrated in, like I wrote an Atom""" start="00:58:34.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""package, and that was awful.""" start="00:58:37.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""It was so terrible. But I knew what I wanted.""" start="00:58:42.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then I wrote, I started writing a VS code""" start="00:58:48.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""and I'm like, oh no, no,""" start="00:58:49.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""no, we're not here for this.""" start="00:58:50.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so, yeah, SpaceMax showed me like this""" start="00:58:55.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""can look and feel like a space that I used to""" start="00:59:00.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""be in. And then it has more functionality,""" start="00:59:03.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""more stuff. It's gonna be great.""" start="00:59:07.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then I just was like,""" start="00:59:09.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm gonna go find my own.""" start="00:59:11.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm really happy that I took the path because""" start="00:59:15.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""I just worked, wrote, and I'm like,""" start="00:59:19.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""I bet you this, I bet you the tool,""" start="00:59:21.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""I know it can do this because it,""" start="00:59:22.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, text me, did this or Adam,""" start="00:59:24.620" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm gonna go, I went on to Melpa and I found""" start="00:59:27.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""a couple different things.""" start="00:59:29.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm like, all right, let's try them.""" start="00:59:31.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm like, that's the 1,""" start="00:59:32.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""great. Roll it in, keep working.""" start="00:59:34.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""I know it can do this.""" start="00:59:36.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""Find a package. And so I built up this sense""" start="00:59:39.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""of the packages and my strategy was go to""" start="00:59:46.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""Melpa, look at, that was the 1 that showed""" start="00:59:49.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""up, look at the number of downloads.""" start="00:59:52.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I'm like, what's the high stuff?""" start="00:59:54.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""What really gets used?""" start="00:59:55.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""There's something there.""" start="00:59:57.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then also look at what was most recently""" start="01:00:00.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""updated. So kind of pivot on those along with""" start="01:00:03.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""a keyword search and I found the tools that""" start="01:00:06.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""worked well. But it really came down to like""" start="01:00:17.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""that VS Code I was almost in,""" start="01:00:19.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I've been around long enough to know what""" start="01:00:24.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""Microsoft will do.""" start="01:00:25.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: For me, I was always like customizing things.""" start="01:00:32.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""I think I saw some interesting emacs videos.""" start="01:00:34.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""I wanted to try Well, I wanted to try working""" start="01:00:42.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""more with the keyboard and not need I think""" start="01:00:44.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: mm-hmm""" start="01:00:46.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: the mouse on a laptop And so I was looking""" start="01:00:51.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""explicitly for ways to just work on the""" start="01:00:54.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""keyboard only, which meant that I wasn't""" start="01:00:56.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""looking for programs that followed Cua,""" start="01:00:59.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""which really leaves you like 2 options,""" start="01:01:04.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""Vim and Emacs. And when I looked at the 2,""" start="01:01:10.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""I saw 1 of the big differentiating factors I""" start="01:01:13.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""saw was Tramp, which was,""" start="01:01:15.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""oh, you mean I get a SSH into a machine and""" start="01:01:18.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""have my customizations too?""" start="01:01:19.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yep. Yeah.""" start="01:01:22.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: And then I started using Emacs more and more.""" start="01:01:29.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""Eventually I combined that with a tiling""" start="01:01:34.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""window manager, NixOS,""" start="01:01:36.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""and started banishing as much of the GUI as I""" start="01:01:40.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""possibly could, running MPV or VLC,""" start="01:01:44.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""so I could edit so that my config files could""" start="01:01:49.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""be keyboard oriented. My settings config""" start="01:01:53.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""menus are now keyboard oriented.""" start="01:01:55.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""And yeah, that was the incremental process of""" start="01:02:00.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""just, yeah, making the computer nicer,""" start="01:02:04.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""more efficient, and then you figure out all""" start="01:02:06.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""the other advantages of the...""" start="01:02:08.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. How did you get in to it,""" start="01:02:13.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, you're lost.""" start="01:02:18.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Sasha? Your sound is gone.""" start="01:02:21.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Sorry, my face mute button.""" start="01:02:27.345" video="qanda-mentor" id="subtitle"]] +[[!template text="""Okay, I'll tell you that story,""" start="01:02:29.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""I get thought out of my head,""" start="01:02:30.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""so I forget it. But what you described,""" start="01:02:32.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""Jerry, about kind of starting with the""" start="01:02:34.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""distribution and then pulling back and""" start="01:02:37.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""starting with vanilla and building up,""" start="01:02:39.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""kind of close the stories that I've heard""" start="01:02:41.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""from a lot of people in the community where""" start="01:02:42.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""the distribution gives them kind of an end""" start="01:02:46.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""goal, at least work requirements,""" start="01:02:48.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""So get the stuff done and they're not""" start="01:02:50.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""slugging through the weeds around the start.""" start="01:02:52.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""I have a hard time modifying it because""" start="01:02:55.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""modifying the distribution itself is very""" start="01:02:57.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""different from the tools they see.""" start="01:02:59.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""They feel like they want to understand the""" start="01:03:01.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""different possible part.""" start="01:03:02.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""And so then they pull back and say,""" start="01:03:04.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""okay, I've got this thing that can use""" start="01:03:06.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""everything to just get some quick work done,""" start="01:03:08.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""but I have this thing that I can call,""" start="01:03:10.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""that's mine. And I understand because I'm""" start="01:03:13.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""building it up from the ground up.""" start="01:03:15.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""Okay, so that's like, oh,""" start="01:03:19.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""interesting, there's a lot of people who are""" start="01:03:21.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""like that, and it really helps them to both""" start="01:03:23.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""have that insight, which is see through""" start="01:03:27.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""distributions and also videos of other""" start="01:03:29.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""people's workflows and press kind of""" start="01:03:32.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""conference presentations often about""" start="01:03:34.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""completely different topics,""" start="01:03:35.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""right? So someone whizzing through Ruby on""" start="01:03:37.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Rails or whatever else and doing all of this.""" start="01:03:39.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""But also having 1 help them break out,""" start="01:03:43.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""okay, well, there's a lot of work from where""" start="01:03:46.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""I am to where that is.""" start="01:03:47.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""How do I do it without being overwhelmed?""" start="01:03:49.740" video="qanda-mentor" id="subtitle"]] +[[!template text="""Because if they try to learn everything,""" start="01:03:51.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""they'll go crazy. And then they'll fall.""" start="01:03:55.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""And the brain is super important.""" start="01:03:57.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""And how I got into this whole eMac thing was""" start="01:04:01.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""I was reading all the computer science books""" start="01:04:03.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""in the university library and 1 of the Unix""" start="01:04:06.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""power tools had a chapter on Emacs and had""" start="01:04:09.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""them you know well there's another type of""" start="01:04:11.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""whatever. Okay that's interesting so I went""" start="01:04:14.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""and tried it out But the reason I really got""" start="01:04:17.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""into it was because I was using John Wigley's""" start="01:04:19.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""Planner Mode. This was before Org Mode came""" start="01:04:23.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""about. So Planner Mode was a link.""" start="01:04:25.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""I said, hey, this is great.""" start="01:04:27.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""I'm looking for ways to help out.""" start="01:04:29.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""If you need help verifying any bugs,""" start="01:04:31.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""you know, send it to me and I'll do the""" start="01:04:34.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""figuring out. He's an author and an inventor.""" start="01:04:37.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: And then""" start="01:04:37.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: he made me the miniature for it.""" start="01:04:39.480" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I'm like, okay. And then that's how I got""" start="01:04:42.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""to know this wonderful community of people""" start="01:04:44.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""who customize emacs so much.""" start="01:04:46.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""And it just goes there because really,""" start="01:04:51.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""when you see all these different ways that""" start="01:04:54.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""people use in all these different stories""" start="01:04:55.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""that you get send off because they're using""" start="01:05:00.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""it to bake sourdough bread and do knitting""" start="01:05:03.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""and all the crazy things that people come up""" start="01:05:06.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""with. I've been using it as an audio editor.""" start="01:05:08.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's just weird. It's just fun.""" start="01:05:11.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, that's great.""" start="01:05:13.100" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah. Every, Sasha, like 2 things that I was""" start="01:05:19.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""meaning to say is every time I see the on the""" start="01:05:22.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""EMAX conference the time that the scratch""" start="01:05:26.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""buffer with the big clock that is ticking""" start="01:05:29.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""down as and the multi multiple sized fonts As""" start="01:05:34.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""I always think wow, that's really cool.""" start="01:05:37.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""I didn't know Emacs could do that.""" start="01:05:38.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""Wait, no, I saw that last year.""" start="01:05:40.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""How do you do, now, how do I do that?""" start="01:05:43.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""Cause that's not, and that's not something I""" start="01:05:45.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""normally even think about Emacs doing.""" start="01:05:46.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right.""" start="01:05:48.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: I'll think about putting""" start="01:05:51.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: There's an EmacsConf-stream.el""" start="01:05:55.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""in the EmacsConf-el repository.""" start="01:05:59.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Grab the link and open but you can grab the""" start="01:06:03.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""code from there. It's basically the text""" start="01:06:07.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""property.""" start="01:06:08.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: But it's a thought that has repeated multiple""" start="01:06:15.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""years. Like, I didn't know we could do that""" start="01:06:17.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""way. I thought about that.""" start="01:06:18.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""I had this exact thought last year when I saw""" start="01:06:21.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""it.""" start="01:06:21.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: It's, we're like, I'm at the point where it's""" start="01:06:28.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""like I have memories of remembering doing""" start="01:06:31.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""something. I don't have memories of doing it.""" start="01:06:34.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like all of the things.""" start="01:06:36.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like so it's again, we,""" start="01:06:40.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs helps expose like the,""" start="01:06:45.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""like it's, anything's possible.""" start="01:06:48.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""And we see how it becomes possible through""" start="01:06:53.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""other people. And then it gets our brains""" start="01:06:55.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""thinking about other ways of doing stuff.""" start="01:06:57.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""And I think that's the exciting part.""" start="01:06:59.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""Dog who wants to go play Frisbee.""" start="01:07:02.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: And that's actually 1 of the reasons why I""" start="01:07:07.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""want to encourage people to not only talk""" start="01:07:11.060" video="qanda-mentor" id="subtitle"]] +[[!template text="""about Emacs and write Emacs blog posts,""" start="01:07:12.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""but also actually demonstrate Emacs in the""" start="01:07:15.380" video="qanda-mentor" id="subtitle"]] +[[!template text="""sense of doing something else.""" start="01:07:16.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""So for example, we can match people at Emacs""" start="01:07:20.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""if you're presenting about Ruby on Rails and""" start="01:07:23.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""you're doing all of your and education and""" start="01:07:27.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""things while you're presenting Rails,""" start="01:07:30.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""you reach all these people who are interested""" start="01:07:32.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""in Rails, developer Rails,""" start="01:07:34.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""but might not have even considered Emacs.""" start="01:07:36.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""And here, you know, you probably would.""" start="01:07:41.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""I would probably have a hard time writing an""" start="01:07:44.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""entire talk about adding text properties,""" start="01:07:47.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""but the fact that there's a thing here that""" start="01:07:49.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""shows, hey, this is possible,""" start="01:07:50.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs can get people to think,""" start="01:07:53.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""okay, so how do I get from here to there?""" start="01:07:54.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""Just showing the possible.""" start="01:07:57.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""Yeah. Which source code is in the,""" start="01:08:02.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""whatchamacallit.""" start="01:08:02.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, yeah. Yeah, I just saw that.""" start="01:08:04.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: There's a weird interesting thing how Emacs""" start="01:08:08.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""dovetails with people who are interested in""" start="01:08:12.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""making their own local first Zettelkasten,""" start="01:08:15.940" video="qanda-mentor" id="subtitle"]] +[[!template text="""because look at how many Zettelkasten""" start="01:08:17.720" video="qanda-mentor" id="subtitle"]] +[[!template text="""packages you have. Especially with how much,""" start="01:08:21.300" video="qanda-mentor" id="subtitle"]] +[[!template text="""like it feels like, it seems like Emacs has""" start="01:08:23.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""more than Vim, but Vim is bigger or VS,""" start="01:08:27.439" video="qanda-mentor" id="subtitle"]] +[[!template text="""feels like it has more than Vim or VS Code,""" start="01:08:30.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""and VS Code's bigger. I'm not sure,""" start="01:08:31.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""but it feels like it. Same thing with that""" start="01:08:36.819" video="qanda-mentor" id="subtitle"]] +[[!template text="""HyperCore. That HyperCore felt more like a""" start="01:08:39.920" video="qanda-mentor" id="subtitle"]] +[[!template text="""local first peer-to-peer system.""" start="01:08:42.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""So there's a weird dovetail where they want""" start="01:08:48.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""the knowledge bases that are local first,""" start="01:08:52.279" video="qanda-mentor" id="subtitle"]] +[[!template text="""comprehensive, because 1 of the properties of""" start="01:08:58.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""the Zettelkasten or Org Mode agendas is that""" start="01:09:03.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's all your notes in 1 place.""" start="01:09:07.359" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's not, you know, your notes in either pad""" start="01:09:14.439" video="qanda-mentor" id="subtitle"]] +[[!template text="""and your notes in Google Calendar,""" start="01:09:19.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""your notes in 20 different places,""" start="01:09:23.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""your notes in Evernote.""" start="01:09:24.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's your notes in 1 program in 1 place""" start="01:09:28.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""because you have to deal with them And""" start="01:09:30.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""they're going to be in files on your hard""" start="01:09:32.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""drive, and you're going to have packages""" start="01:09:34.279" video="qanda-mentor" id="subtitle"]] +[[!template text="""there. That's the other weird thing too,""" start="01:09:37.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""is how many, like, you install an Emacs""" start="01:09:40.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""package, 1 of the guarantees,""" start="01:09:41.399" video="qanda-mentor" id="subtitle"]] +[[!template text="""some of the guarantees you seem to get with""" start="01:09:43.439" video="qanda-mentor" id="subtitle"]] +[[!template text="""it is if it does use an external program,""" start="01:09:46.260" video="qanda-mentor" id="subtitle"]] +[[!template text="""it's going to have a lot of configuration in""" start="01:09:48.399" video="qanda-mentor" id="subtitle"]] +[[!template text="""Emacs. It's going to be installed.""" start="01:09:51.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""It's going to be local first.""" start="01:09:53.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Cause like you have flow bits,""" start="01:09:56.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""but how many programs like are,""" start="01:09:59.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""are cloud first. And it feels like most of""" start="01:10:05.140" video="qanda-mentor" id="subtitle"]] +[[!template text="""those are like org Trello,""" start="01:10:06.820" video="qanda-mentor" id="subtitle"]] +[[!template text="""where it's like, I want to use org mode,""" start="01:10:10.160" video="qanda-mentor" id="subtitle"]] +[[!template text="""but other people use Trello.""" start="01:10:12.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I'm going to be grudgingly using this org""" start="01:10:15.460" video="qanda-mentor" id="subtitle"]] +[[!template text="""Trello to be a bridge between the 2,""" start="01:10:17.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""not because I wanted to use org,""" start="01:10:19.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""not because I wanted to use Trello in the""" start="01:10:21.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""first place or I started off with Trello and""" start="01:10:23.200" video="qanda-mentor" id="subtitle"]] +[[!template text="""now I wanna use org mode.""" start="01:10:24.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, no, you're that local first.""" start="01:10:27.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""The Thought I have is with the 2022 interest""" start="01:10:37.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""rates going up, the era of free money,""" start="01:10:43.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""or even like getting money for more,""" start="01:10:46.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""more money than it actually costs Like it was""" start="01:10:49.960" video="qanda-mentor" id="subtitle"]] +[[!template text="""minting money. We are going to be seeing how""" start="01:10:55.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""these organizations that had financial""" start="01:10:59.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""runways, all of these cloud services,""" start="01:11:01.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""what's not gonna last because there's no""" start="01:11:06.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""funding. And like the durability of our local""" start="01:11:12.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""first plain text, free open source stuff.""" start="01:11:16.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""Like I won't have to do a content migration""" start="01:11:21.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""unless I get a B of my bonnet and want to""" start="01:11:24.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""like change from org mode to markdown for""" start="01:11:27.700" video="qanda-mentor" id="subtitle"]] +[[!template text="""some reason. Like I have it and Then I can""" start="01:11:30.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""send it out. So there's also like that posse""" start="01:11:32.980" video="qanda-mentor" id="subtitle"]] +[[!template text="""principle publish on-site syndicate""" start="01:11:36.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""everywhere Is what emacs and vim like they""" start="01:11:41.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""allow for us to do?""" start="01:11:42.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, that's part of the individuation is you""" start="01:11:46.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""have multiple options of doing something so""" start="01:11:48.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""you can choose something so you can take""" start="01:11:51.580" video="qanda-mentor" id="subtitle"]] +[[!template text="""ownership of your data in the way you want.""" start="01:11:54.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""It all dovetails into each other and I think""" start="01:12:00.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""that's something worth thinking about,""" start="01:12:02.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""especially in relation with who should learn""" start="01:12:05.540" video="qanda-mentor" id="subtitle"]] +[[!template text="""and how should you introduce Emacs to people,""" start="01:12:08.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""because like, with the idea of people should""" start="01:12:14.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""try an Emacs distribution and then start""" start="01:12:16.560" video="qanda-mentor" id="subtitle"]] +[[!template text="""their own from scratch,""" start="01:12:17.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""just so that they, like,""" start="01:12:18.880" video="qanda-mentor" id="subtitle"]] +[[!template text="""if you use it for 10 minutes,""" start="01:12:20.280" video="qanda-mentor" id="subtitle"]] +[[!template text="""you'll gain so much because you use your 3""" start="01:12:24.400" video="qanda-mentor" id="subtitle"]] +[[!template text="""and then all of a sudden you realize,""" start="01:12:25.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""you also know how malleable Emacs can be.""" start="01:12:29.180" video="qanda-mentor" id="subtitle"]] +[[!template text="""And then you start saying,""" start="01:12:30.520" video="qanda-mentor" id="subtitle"]] +[[!template text="""now, how do I do that?""" start="01:12:32.000" video="qanda-mentor" id="subtitle"]] +[[!template text="""So I get to make those choices?""" start="01:12:33.240" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah.""" start="01:12:34.840" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 2]: Or you might say, this person did it well""" start="01:12:39.340" video="qanda-mentor" id="subtitle"]] +[[!template text="""enough, I don't have to.""" start="01:12:40.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: That reminded me of something that I also""" start="01:12:43.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""wanted to mention, shocking word,""" start="01:12:45.360" video="qanda-mentor" id="subtitle"]] +[[!template text="""as in malleability. Another tip I came""" start="01:12:49.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""across, don't know from whom,""" start="01:12:50.600" video="qanda-mentor" id="subtitle"]] +[[!template text="""might have been from you,""" start="01:12:51.500" video="qanda-mentor" id="subtitle"]] +[[!template text="""I don't know, is to define aliases,""" start="01:12:53.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""because we use different words from what the""" start="01:12:56.320" video="qanda-mentor" id="subtitle"]] +[[!template text="""functions are. It's 1 of those little meta""" start="01:12:58.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""things that, you know,""" start="01:13:00.420" video="qanda-mentor" id="subtitle"]] +[[!template text="""If you keep calling it something else,""" start="01:13:02.080" video="qanda-mentor" id="subtitle"]] +[[!template text="""just define it so that you can call it like""" start="01:13:05.900" video="qanda-mentor" id="subtitle"]] +[[!template text="""commencing your words.""" start="01:13:06.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: it's interesting. Anyway,""" start="01:13:12.440" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 3]: Yeah. Yeah, gotta go disappear and get ready""" start="01:13:14.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""for my dog. Okay, I'll listen to what you""" start="01:13:17.220" video="qanda-mentor" id="subtitle"]] +[[!template text="""say. All right, I""" start="01:13:18.120" video="qanda-mentor" id="subtitle"]] +[[!template text="""[Speaker 1]: I need to take my dogs out and play Frisbee.""" start="01:13:20.020" video="qanda-mentor" id="subtitle"]] +[[!template text="""They have been so patient.""" start="01:13:21.780" video="qanda-mentor" id="subtitle"]] +[[!template text="""So it was great talking with all of you and""" start="01:13:26.040" video="qanda-mentor" id="subtitle"]] +[[!template text="""Sasha, thanks for the organizing energy""" start="01:13:29.640" video="qanda-mentor" id="subtitle"]] +[[!template text="""you've put into this. Plasma Strike,""" start="01:13:31.680" video="qanda-mentor" id="subtitle"]] +[[!template text="""thank you for your presentation.""" start="01:13:32.800" video="qanda-mentor" id="subtitle"]] +[[!template text="""I love this conference.""" start="01:13:34.860" video="qanda-mentor" id="subtitle"]] +[[!template text="""So thank you very much.""" start="01:13:36.660" video="qanda-mentor" id="subtitle"]] +[[!template text="""And now have a good rest of your Sunday.""" start="01:13:41.760" video="qanda-mentor" id="subtitle"]] +[[!template text="""Bye.""" start="01:13:43.100" video="qanda-mentor" id="subtitle"]] + +Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20mentor%3A%20Mentoring%20VS-Coders%20as%20an%20Emacsian%20%28or%20How%20to%20show%20not%20tell%20people%20about%20the%20wonders%20of%20Emacs%29) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/mentor-before.md b/2023/info/mentor-before.md new file mode 100644 index 00000000..bcf457eb --- /dev/null +++ b/2023/info/mentor-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 11-min talk; Q&A: BigBlueButton conference room +Status: TO_INDEX_QA + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="mentor-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/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" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 10:44 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/sV9eKtGiPYZi5urxjoqerv">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="mentor-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/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" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="mentor-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 1:13:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/mentor-nav.md b/2023/info/mentor-nav.md new file mode 100644 index 00000000..86a45646 --- /dev/null +++ b/2023/info/mentor-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/steno">Programming with steno</a> +Next by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/multi-after.md b/2023/info/multi-after.md new file mode 100644 index 00000000..513b51ba --- /dev/null +++ b/2023/info/multi-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202022%20multi%3A%20Emacs%20for%20the%20Indecisive%2FMulti-Talented) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/multi-before.md b/2023/info/multi-before.md new file mode 100644 index 00000000..af9cef3a --- /dev/null +++ b/2023/info/multi-before.md @@ -0,0 +1,4 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/multi-nav.md b/2023/info/multi-nav.md new file mode 100644 index 00000000..0441b432 --- /dev/null +++ b/2023/info/multi-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a> +Next by track: <a href="/2023/talks/hn">The many ways to browse Hacker News from Emacs</a> +Track: <span class="sched-track gen">gen</span> +</div> diff --git a/2023/info/nabokov-after.md b/2023/info/nabokov-after.md new file mode 100644 index 00000000..0e1ccfe4 --- /dev/null +++ b/2023/info/nabokov-after.md @@ -0,0 +1,512 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="nabokov-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]] + +[[!template text="""Hello, fellow Emacs enthusiasts.""" start="00:00:00.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""My name is Edmund Jorgensen.""" start="00:00:05.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I'm a software engineer by day,""" start="00:00:06.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but by night I love to write novels,""" start="00:00:08.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and I lean on Emacs heavily""" start="00:00:10.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""for both of these activities.""" start="00:00:11.774" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Today, I would like to talk to you about how Emacs,""" start="00:00:13.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""specifically with Org mode,""" start="00:00:15.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""has helped me manage some of the practical""" start="00:00:17.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""difficulties of writing long-form prose,""" start="00:00:18.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""novels in my case,""" start="00:00:20.940" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and I'd like to get at this by talking about how""" start="00:00:22.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""another, much more famous novelist managed""" start="00:00:24.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""some of those same difficulties in a way""" start="00:00:26.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that makes me suspect he might well use Emacs""" start="00:00:28.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and Org mode himself""" start="00:00:30.874" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""if he were still alive and writing today.""" start="00:00:31.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""This talk will probably be""" start="00:00:34.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""of the most interest to listeners""" start="00:00:35.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""who either already write long-form prose in Emacs""" start="00:00:36.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or are considering doing so,""" start="00:00:39.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but I think that anyone""" start="00:00:40.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""with an interest in literature or Emacs""" start="00:00:42.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""will find something to take away.""" start="00:00:44.080" video="mainVideo-nabokov" id="subtitle"]] + +[[!template new="1" text="""Nabokov's process of writing novels""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]] + +[[!template text="""So let's get to it.""" start="00:00:45.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Here's a picture of a man lying on a bed,""" start="00:00:51.120" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""writing something on an index card.""" start="00:00:53.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""If we didn't know any better,""" start="00:00:56.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""we might think that he was just jotting down""" start="00:00:57.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""a recipe for beef stew or something like that.""" start="00:00:58.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""But in fact, this is not just any old man.""" start="00:01:01.680" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""This is Vladimir Nabokov, one of the most""" start="00:01:03.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""celebrated novelists of the 20th century,""" start="00:01:06.174" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and he's not jotting down""" start="00:01:08.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""a recipe for beef stew in this picture.""" start="00:01:09.280" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""He's actually hard at work here,""" start="00:01:11.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""composing a classic of English literature""" start="00:01:12.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""on an index card.""" start="00:01:15.007" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""That's how he wrote all his novels, in fact,""" start="00:01:16.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""on index cards.""" start="00:01:18.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I don't mean that he just took notes on these cards""" start="00:01:20.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or wrote outlines on them.""" start="00:01:22.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""He did both of those things as well,""" start="00:01:24.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but he also wrote the actual prose of his novels,""" start="00:01:25.680" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""word by word, sentence by sentence, on index cards.""" start="00:01:28.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Let's see what that looked like at scale.""" start="00:01:32.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""This box you see here,""" start="00:01:37.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""full of groups of bundled cards,""" start="00:01:39.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""is what a novel in progress looked like for Nabokov.""" start="00:01:41.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""If you squint, you can see that these cards""" start="00:01:43.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""were from the composition of Lolita,""" start="00:01:46.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""probably his most famous novel.""" start="00:01:47.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""So why did he write novels on index cards?""" start="00:01:50.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""It's not necessarily an obvious choice.""" start="00:01:53.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Yes, sadly, Emacs wasn't available to him at the time,""" start="00:01:56.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but most writers in his day,""" start="00:01:59.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""if they weren't using typewriters,""" start="00:02:01.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""which were available,""" start="00:02:02.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""were using notebooks or loose-leaf sheets""" start="00:02:03.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or something like that.""" start="00:02:06.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Not these tiny little index cards.""" start="00:02:07.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""But Nabokov loved index cards.""" start="00:02:09.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""He swore by them because they represented""" start="00:02:11.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""an elegant solution""" start="00:02:14.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to three of the most pressing practical problems""" start="00:02:15.200" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that every novelist faces.""" start="00:02:18.000" video="mainVideo-nabokov" id="subtitle"]] + +[[!template new="1" text="""Three practical problems novelists face""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]] + +[[!template text="""Writing a good novel""" start="00:02:24.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""is artistically difficult, of course.""" start="00:02:25.307" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""You have to write something interesting""" start="00:02:27.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""with a good story,""" start="00:02:28.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""something that people want to read.""" start="00:02:30.107" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""But writing any novel at all,""" start="00:02:31.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""whether it's good or bad,""" start="00:02:33.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""is brutally, practically difficult.""" start="00:02:35.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""You're hacking something like 100,000 words""" start="00:02:37.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""into unified shape over a long period of time,""" start="00:02:39.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""months or years.""" start="00:02:42.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""There are organizational challenges""" start="00:02:43.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""inherent in that process,""" start="00:02:45.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and each writer needs practical techniques""" start="00:02:46.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to manage those challenges.""" start="00:02:48.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""The most basic challenge, of course, is that,""" start="00:02:51.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""unless you're trying to bring back""" start="00:02:53.400" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""the Homeric Bard tradition""" start="00:02:55.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""of reciting books from memory in firelit halls,""" start="00:02:57.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""you need to actually set down""" start="00:02:59.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""those 100,000 words on some medium.""" start="00:03:01.200" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""In Nabokov's case, index cards worked fine for this.""" start="00:03:03.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""A little cramped, maybe, but workable.""" start="00:03:05.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Secondly, as you're writing,""" start="00:03:08.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""you're bound to think of little but important things""" start="00:03:09.680" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""about the story that you want to record.""" start="00:03:11.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I'm not talking here about big thematic notes""" start="00:03:13.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or research that can go in a separate document,""" start="00:03:16.207" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but smaller, more contextual notes""" start="00:03:19.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that belong right along the prose that they refer to.""" start="00:03:21.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""These might be reminders, like,""" start="00:03:23.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text=""""Remember to clean up this sentence,"""" start="00:03:26.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or questions for yourself""" start="00:03:28.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to consider during rewrites, like,""" start="00:03:29.707" video="mainVideo-nabokov" id="subtitle"]] +[[!template text=""""Why does Shirley feel this way here?"""" start="00:03:31.907" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Nabokov recorded these notes""" start="00:03:33.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""in the margins of his cards or on the backs.""" start="00:03:35.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Paper, in general, is great for this kind of""" start="00:03:37.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""intertextual note-taking.""" start="00:03:40.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""That's not particular to index cards.""" start="00:03:41.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""But what Nabokov really loved about index cards""" start="00:03:44.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""was how they solved the novelist's""" start="00:03:47.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""third and most difficult practical problem,""" start="00:03:49.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""which is imposing some kind of structure""" start="00:03:52.120" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""on this mountain of words.""" start="00:03:54.280" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""To have any hope of wrangling a novel into being,""" start="00:03:55.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""you need some way to break it down""" start="00:03:58.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""into parts, chapters, scenes, snatches of dialogue.""" start="00:04:00.120" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""You need some kind of higher-level outline""" start="00:04:03.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that you can read, navigate, and rearrange""" start="00:04:05.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""as you consider and reconsider your story.""" start="00:04:08.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""You need structure.""" start="00:04:09.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Index cards gave Nabokov a really powerful way""" start="00:04:11.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to impose this structure""" start="00:04:14.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""because they created small, independent""" start="00:04:16.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""chunks of prose""" start="00:04:18.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that he could bundle together into groups,""" start="00:04:19.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""like we saw in the box.""" start="00:04:21.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""This let him navigate his novel in progress quickly.""" start="00:04:22.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""He could just flip through those bundles,""" start="00:04:31.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""bundle by bundle, instead of card by card.""" start="00:04:33.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""He could also impose on""" start="00:04:36.120" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and modify the structure of his novel""" start="00:04:38.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""just by shuffling those bundles around.""" start="00:04:40.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""So that's why Nabokov loved index cards""" start="00:04:42.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""for writing novels.""" start="00:04:45.307" video="mainVideo-nabokov" id="subtitle"]] + +[[!template new="1" text="""Org mode for writing novels""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]] + +[[!template text="""Now I'd love to talk about""" start="00:04:46.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""why I love Org mode so much for writing novels""" start="00:04:48.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and how it helps me tackle those same challenges.""" start="00:04:51.280" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""The first practical challenge,""" start="00:04:54.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""recording your words on some medium,""" start="00:05:01.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""is pretty simple.""" start="00:05:03.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Org mode is a part of Emacs,""" start="00:05:04.774" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""a text editor, so you can just type in your text.""" start="00:05:06.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""We're not going to spend any more time on that.""" start="00:05:09.200" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""For the second practical challenge,""" start="00:05:10.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""recording small intertextual notes,""" start="00:05:13.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Org mode offers comments, like this one here.""" start="00:05:16.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""The comment, "maybe I need to say which store?",""" start="00:05:19.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""with the leading pound sign there.""" start="00:05:21.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I think that comments are generally""" start="00:05:23.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""underappreciated outside of coding.""" start="00:05:25.874" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""When writing fiction, for example,""" start="00:05:28.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I love that Org mode lets me keep these comments""" start="00:05:29.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""close to the prose they refer to.""" start="00:05:32.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I can see right here that I'm talking about""" start="00:05:33.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""saying which store in this first line,""" start="00:05:37.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text=""""One day, Bob went to the store."""" start="00:05:39.120" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I get to keep these things close to""" start="00:05:40.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""the prose they refer to""" start="00:05:44.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""without ever having to worry that""" start="00:05:45.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""they'll accidentally be exported to a reader.""" start="00:05:46.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""That's great.""" start="00:05:48.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""So let's talk about how Org Mode handles the third""" start="00:05:50.540" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and most brutal challenge of all, which is structure.""" start="00:05:52.807" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Here we've taken the same text""" start="00:06:00.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and we've imposed some structure on it.""" start="00:06:03.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Like index cards,""" start="00:06:04.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""this is where Org mode really shines.""" start="00:06:07.807" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Org mode extends outline mode,""" start="00:06:09.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""which is built around the concept of header lines,""" start="00:06:12.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""with different levels denoted by""" start="00:06:14.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""different numbers of leading asterisks (`*`).""" start="00:06:15.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Personally, I tend to use top line headers""" start="00:06:18.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""as chapters and second line headers as scenes.""" start="00:06:20.974" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""You can see that here, where chapter one says""" start="00:06:23.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text=""""Bob and Shirley meet."""" start="00:06:26.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Here's a scene, "Bob goes to the store."""" start="00:06:27.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""And here below is chapter two, yet unwritten,""" start="00:06:29.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""where Bob goes to work.""" start="00:06:32.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Pretty exciting. Since Org mode supports folding,""" start="00:06:34.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I can read quickly through a summary of my novel""" start="00:06:39.680" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""at either the chapter or the scene level""" start="00:06:42.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""just by flipping through different levels of""" start="00:06:44.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""visibility, just like Nabokov could flip through""" start="00:06:46.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""different bundles of cards.""" start="00:06:48.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""So here's the chapter level.""" start="00:06:51.307" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I can see at a chapter level,""" start="00:06:52.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text=""""Bob and Shirley meet", "Bob goes to work."""" start="00:06:54.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""And then I can get one level more specific""" start="00:06:56.680" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and see the various scenes in the chapter""" start="00:06:59.080" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""at the second header level.""" start="00:07:01.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""And I can, if I want,""" start="00:07:02.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I can go all the way back to the prose level.""" start="00:07:04.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""And just like Nabokov shuffling""" start="00:07:10.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""his index cards around,""" start="00:07:12.774" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I can move scenes around as logical units.""" start="00:07:14.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Let's say, for example,""" start="00:07:16.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that we wanted to move Bob's thoughts about life,""" start="00:07:18.200" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""which are down here, up further.""" start="00:07:20.400" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Well, I can grab "Bob thinks about life,"""" start="00:07:22.920" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and I can move it up or down as a logical unit.""" start="00:07:26.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""But Org mode offers some even more powerful tricks""" start="00:07:30.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""for structuring and navigating your novel,""" start="00:07:34.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""beyond what even index cards can do.""" start="00:07:36.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""For example, you can use tags""" start="00:07:38.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""on your scene headings. You can see these here.""" start="00:07:41.974" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""They're the prominent colon separated words""" start="00:07:44.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""on the header lines.""" start="00:07:46.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""In this case, I'm using `bob` and `shirley`.""" start="00:07:47.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""These tags can represent characters""" start="00:07:49.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""who appear in the scene,""" start="00:07:52.720" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""which is what I'm doing here,""" start="00:07:53.674" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or locations in which the scenes occur,""" start="00:07:54.640" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or plot lines that the scenes further,""" start="00:07:57.207" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""really anything that you want.""" start="00:07:59.160" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""And you can then use Org mode's sparse view features""" start="00:08:00.480" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to query a set of tags and trim your novel down to""" start="00:08:04.240" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""a subset of related scenes.""" start="00:08:07.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""For example, let's say we want to filter down to""" start="00:08:09.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""only the scenes in which Shirley appears.""" start="00:08:12.560" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""This could allow us to read quickly through""" start="00:08:14.800" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""just a subset of the prose,""" start="00:08:25.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""the prose that referred to Shirley in some way.""" start="00:08:27.440" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Maybe we want to do that""" start="00:08:29.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""to check continuity for her character,""" start="00:08:31.360" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or make sure that her character develops""" start="00:08:33.280" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""along a compelling arc,""" start="00:08:35.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or even just to get a sense""" start="00:08:37.000" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""of how much airtime she gets in the novel.""" start="00:08:38.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Thanks for listening to this whirlwind exploration""" start="00:08:44.040" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""of some of the practical challenges of writing""" start="00:08:49.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""novels and other long-form prose,""" start="00:08:51.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and how Org mode can help tackle them.""" start="00:08:53.600" video="mainVideo-nabokov" id="subtitle"]] + +[[!template new="1" text="""Takeaways and next steps""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]] + +[[!template text="""I'd like to leave you with a couple takeaways""" start="00:08:55.600" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and next steps for those who are interested.""" start="00:08:57.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""First, if you're writing a novel""" start="00:08:59.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or other long-form prose,""" start="00:09:01.907" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""or even considering doing so,""" start="00:09:02.841" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""take a look at Org mode,""" start="00:09:04.874" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""especially if you're already familiar with Emacs.""" start="00:09:06.108" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""It won't solve the artistic problem""" start="00:09:08.375" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""of writing an interesting book for you,""" start="00:09:10.475" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""not even with a ChatGPT plugin,""" start="00:09:11.875" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""but it's a fantastic tool for managing""" start="00:09:13.908" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""some of the practical challenges""" start="00:09:15.875" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""that come with hacking 100,000 words into shape""" start="00:09:16.875" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""over the months or years that that process takes.""" start="00:09:19.841" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Second, if you're interested in learning more""" start="00:09:22.741" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""about some of the advanced features of Org mode""" start="00:09:25.840" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and how they can help in this process,""" start="00:09:27.960" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I wrote a long blog post about my difficulties""" start="00:09:29.520" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""writing a novel with 13 interconnected subplots,""" start="00:09:32.320" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""and how Emacs and Org mode saved it from imploding.""" start="00:09:34.880" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""I'll put a link here below. [ewj.io/emacs]""" start="00:09:37.760" video="mainVideo-nabokov" id="subtitle"]] +[[!template text="""Thanks for listening, and Emacs on!""" start="00:09:44.000" video="mainVideo-nabokov" id="subtitle"]] + + + +Captioner: bhavin192 + +<a name="nabokov-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: About 3""" start="00:00:03.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""seconds. And I believe we are live.""" start="00:00:16.020" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Hi Edmund, how are you doing?""" start="00:00:17.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Hi, how's it going Leo?""" start="00:00:19.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I'm doing well, thanks.""" start="00:00:20.279" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Yourself?""" start="00:00:20.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm also doing well. So Edmund doesn't have""" start="00:00:24.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""his webcam on but he will be able to answer""" start="00:00:26.980" video="qanda-nabokov" id="subtitle"]] +[[!template text="""questions that you ask inside of the Azure""" start="00:00:29.960" video="qanda-nabokov" id="subtitle"]] +[[!template text="""pad that I've shared again on IRC.""" start="00:00:32.159" video="qanda-nabokov" id="subtitle"]] +[[!template text="""By the way, we only have 1 question and we""" start="00:00:35.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""have about 40 minutes of question time,""" start="00:00:37.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""so feel free to add as many questions as you""" start="00:00:40.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""want and in the meantime,""" start="00:00:41.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""we'll get started on the first 1.""" start="00:00:43.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Unless, Edmond, do you have anything to say""" start="00:00:45.020" video="qanda-nabokov" id="subtitle"]] +[[!template text="""after your presentation?""" start="00:00:45.920" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: No, we can jump in.""" start="00:00:48.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, lovely. So first question,""" start="00:00:51.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""is the index, sorry, does the index really""" start="00:00:54.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""matter here? I mean his colleague is also""" start="00:00:57.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""using some A4 paper and you think that the""" start="00:01:00.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""index card is the most important thing here?""" start="00:01:02.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: That's a great question.""" start="00:01:04.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I mean, I think you can do anything with a""" start="00:01:08.000" video="qanda-nabokov" id="subtitle"]] +[[!template text="""larger piece of paper that you can do with a""" start="00:01:09.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""smaller piece of paper.""" start="00:01:10.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""But I actually encourage you to try this out.""" start="00:01:12.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I did, not for research for this talk,""" start="00:01:14.820" video="qanda-nabokov" id="subtitle"]] +[[!template text="""but just when I read about Nabokov and his""" start="00:01:17.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""index cards to begin with,""" start="00:01:18.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I kind of tried it out a little bit and wrote""" start="00:01:20.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""some shorter things on index cards and so on""" start="00:01:22.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and there really is something about the size""" start="00:01:24.640" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and the kind of ability to manipulate them.""" start="00:01:27.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""You really can bundle them and move them""" start="00:01:30.200" video="qanda-nabokov" id="subtitle"]] +[[!template text="""around easier and I think that that I think""" start="00:01:33.420" video="qanda-nabokov" id="subtitle"]] +[[!template text="""he enjoyed that. So sure I mean I think you""" start="00:01:35.800" video="qanda-nabokov" id="subtitle"]] +[[!template text="""can do anything with a4 paper that you could""" start="00:01:37.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""do with index cards but I think there's""" start="00:01:38.860" video="qanda-nabokov" id="subtitle"]] +[[!template text="""something about that form that lends itself""" start="00:01:40.760" video="qanda-nabokov" id="subtitle"]] +[[!template text="""to the especially to the reorganization maybe""" start="00:01:43.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""to the focus as well just because it's""" start="00:01:45.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""smaller but but definitely to the""" start="00:01:47.060" video="qanda-nabokov" id="subtitle"]] +[[!template text="""reorganization.""" start="00:01:47.220" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Definitely So we have a lot more questions""" start="00:01:53.600" video="qanda-nabokov" id="subtitle"]] +[[!template text="""now. So thank you, everyone,""" start="00:01:54.640" video="qanda-nabokov" id="subtitle"]] +[[!template text="""for answering my plea for more questions.""" start="00:01:56.479" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Next question. How do you explore the second""" start="00:01:59.760" video="qanda-nabokov" id="subtitle"]] +[[!template text="""level headings, i.e. The scenes in this""" start="00:02:01.880" video="qanda-nabokov" id="subtitle"]] +[[!template text="""example, without the heading itself,""" start="00:02:03.600" video="qanda-nabokov" id="subtitle"]] +[[!template text="""just the content? Is that clear enough?""" start="00:02:05.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Great question. Yeah, so I've tried 2 ways,""" start="00:02:09.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""sorry, 3 ways with this and landed on 1 that""" start="00:02:13.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I like. Originally I used the OX package.""" start="00:02:16.080" video="qanda-nabokov" id="subtitle"]] +[[!template text="""There's an OX ignore thing in there where you""" start="00:02:20.080" video="qanda-nabokov" id="subtitle"]] +[[!template text="""can add an ignore tag to where you don't want""" start="00:02:23.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""the headings, but you do want the content""" start="00:02:24.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""exported. I found that a little bit annoying,""" start="00:02:26.920" video="qanda-nabokov" id="subtitle"]] +[[!template text="""just visually annoying,""" start="00:02:27.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""when I'm, again, My theme here is navigating""" start="00:02:31.320" video="qanda-nabokov" id="subtitle"]] +[[!template text="""100,000 word documents effectively and having""" start="00:02:34.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""that extra visual noise was kind of a pain.""" start="00:02:36.900" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So I ended up, first I just did like a dumb""" start="00:02:40.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""ox script as part of my publication kind of""" start="00:02:43.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""pipeline that removed headlines at the scene""" start="00:02:47.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""level. And then actually,""" start="00:02:48.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""because I ended up leaning so heavily on""" start="00:02:50.980" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Pandoc, and Pandoc, for those of you who have""" start="00:02:53.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""not looked at recent versions of Pandoc,""" start="00:02:56.200" video="qanda-nabokov" id="subtitle"]] +[[!template text="""they've got a really fantastic way to use Lua""" start="00:03:00.920" video="qanda-nabokov" id="subtitle"]] +[[!template text="""at this point to write filters.""" start="00:03:02.420" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So you can kind of take the AST of your""" start="00:03:04.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""document and run these very simple Lua""" start="00:03:07.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""filters over it. They used to be in Haskell,""" start="00:03:09.140" video="qanda-nabokov" id="subtitle"]] +[[!template text="""which I'm not smart enough to write Haskell""" start="00:03:11.780" video="qanda-nabokov" id="subtitle"]] +[[!template text="""is 1 of the things that I've discovered.""" start="00:03:13.140" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I keep bouncing off of it,""" start="00:03:14.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""but I'm just smart enough to write Lua.""" start="00:03:16.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""And so I use a Lua filter now,""" start="00:03:19.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""which I'm happy to publish to anyone who's""" start="00:03:21.180" video="qanda-nabokov" id="subtitle"]] +[[!template text="""interested. That basically lets me say,""" start="00:03:22.880" video="qanda-nabokov" id="subtitle"]] +[[!template text="""you know, what level headings to get rid of""" start="00:03:27.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""the heading, but publish the content.""" start="00:03:28.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""And part of the reason that's been useful is""" start="00:03:30.320" video="qanda-nabokov" id="subtitle"]] +[[!template text="""that some of the other novels I'm working on""" start="00:03:31.920" video="qanda-nabokov" id="subtitle"]] +[[!template text="""for example have different levels of""" start="00:03:33.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""hierarchy where maybe there's a part and then""" start="00:03:35.640" video="qanda-nabokov" id="subtitle"]] +[[!template text="""you know at the top level and then chapter""" start="00:03:37.260" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and then scene and it's now the third level""" start="00:03:39.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""instead of the second and it's much easier in""" start="00:03:41.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""the Lua to just be like remove the third""" start="00:03:43.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""level headings or the second level headings""" start="00:03:45.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""or whatever it is so that's been that's been""" start="00:03:47.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""helpful.""" start="00:03:47.860" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Great, Moving on to the next question,""" start="00:03:53.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""slightly off topic, where can we see your""" start="00:03:58.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""novels?""" start="00:03:58.260" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh well yeah, you can,""" start="00:04:01.060" video="qanda-nabokov" id="subtitle"]] +[[!template text="""they're on Amazon, there's 2 of them and a""" start="00:04:05.500" video="qanda-nabokov" id="subtitle"]] +[[!template text="""book of short stories.""" start="00:04:06.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I think the short stories and the second""" start="00:04:10.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""novel, which is called World Enough in Time,""" start="00:04:11.960" video="qanda-nabokov" id="subtitle"]] +[[!template text="""which is the 1 that kind of prompted this""" start="00:04:13.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""talk, are probably of more interest to this,""" start="00:04:16.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""to the Emacs focused group.""" start="00:04:18.320" video="qanda-nabokov" id="subtitle"]] +[[!template text="""The first one's like a philosophical murder""" start="00:04:20.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""mystery, but the World Enough in Time is a""" start="00:04:25.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""kind of Douglas Adams inspired sci-fi comedy""" start="00:04:29.820" video="qanda-nabokov" id="subtitle"]] +[[!template text="""about kind of hijinks on a relativistic speed""" start="00:04:34.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""space cruiser, which was a lot of fun to""" start="00:04:37.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""write. It has a lot of twisty subplots,""" start="00:04:38.980" video="qanda-nabokov" id="subtitle"]] +[[!template text="""which is where I developed that technique of""" start="00:04:42.500" video="qanda-nabokov" id="subtitle"]] +[[!template text="""being able to filter down to tags and see a""" start="00:04:46.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""reduced version of the novel,""" start="00:04:47.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""which was very handy when trying to juggle 13""" start="00:04:51.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""subplots. So yeah, check it out.""" start="00:04:53.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Great, we'll make sure that you have the""" start="00:04:57.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""links available on the talk page afterwards.""" start="00:04:59.860" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Right now I sadly have to host so I cannot""" start="00:05:03.420" video="qanda-nabokov" id="subtitle"]] +[[!template text="""look up the links but we'll make sure or if""" start="00:05:05.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: I put it in there for you.""" start="00:05:08.100" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: anyone in the chat... Oh you did?""" start="00:05:09.020" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Yeah. In the meantime we'll move on to the""" start="00:05:13.800" video="qanda-nabokov" id="subtitle"]] +[[!template text="""next question. Have you looked at the Denote""" start="00:05:16.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""signature features? The hierarchical nature""" start="00:05:19.700" video="qanda-nabokov" id="subtitle"]] +[[!template text="""of Lumen's ideas and index cards works well""" start="00:05:23.180" video="qanda-nabokov" id="subtitle"]] +[[!template text="""with Denote signatures.""" start="00:05:24.100" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So are you familiar with Denote first?""" start="00:05:26.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: I am not. No, it sounds like something that I""" start="00:05:28.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""should check out.""" start="00:05:29.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, Denote is a way to work with slip""" start="00:05:33.080" video="qanda-nabokov" id="subtitle"]] +[[!template text="""boxes. We talked a little bit about it""" start="00:05:35.460" video="qanda-nabokov" id="subtitle"]] +[[!template text="""earlier today. We talked about Orgroam,""" start="00:05:37.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""we talked about Denote as well as a lighter""" start="00:05:40.600" video="qanda-nabokov" id="subtitle"]] +[[!template text="""alternative to Orgroam.""" start="00:05:41.580" video="qanda-nabokov" id="subtitle"]] +[[!template text="""And yeah, the organization with index cards""" start="00:05:45.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""feels like it's something that would highly""" start="00:05:47.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""benefit from linking and back links and any""" start="00:05:50.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""kind of UX functionality for relating pieces""" start="00:05:53.880" video="qanda-nabokov" id="subtitle"]] +[[!template text="""of information. So yeah,""" start="00:05:56.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""definitely look it up.""" start="00:05:57.620" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I'm a heavy org-roam user.""" start="00:06:00.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I use org-roam for a lot of different stuff""" start="00:06:03.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and I would love, I will definitely check out""" start="00:06:05.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Denote as an alternative.""" start="00:06:06.740" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure, I'm not particularly personally""" start="00:06:09.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""familiar with what Signature is within Denote""" start="00:06:11.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and it'd be great if the person who asked the""" start="00:06:13.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""question could perhaps provide more details""" start="00:06:15.580" video="qanda-nabokov" id="subtitle"]] +[[!template text="""so that Edmund could get a little more""" start="00:06:17.980" video="qanda-nabokov" id="subtitle"]] +[[!template text="""information when he returns to the document.""" start="00:06:20.000" video="qanda-nabokov" id="subtitle"]] +[[!template text="""But yeah, if you're using Org-ROM,""" start="00:06:21.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""you're already within the mindset that you""" start="00:06:25.140" video="qanda-nabokov" id="subtitle"]] +[[!template text="""need, and perhaps you'd gain a little bit""" start="00:06:27.180" video="qanda-nabokov" id="subtitle"]] +[[!template text="""extra stuff from using Dino's signature,""" start="00:06:29.260" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I assume. We have 8 minutes.""" start="00:06:32.920" video="qanda-nabokov" id="subtitle"]] +[[!template text="""We're still good on time.""" start="00:06:34.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Next question, do you have a workflow""" start="00:06:36.500" video="qanda-nabokov" id="subtitle"]] +[[!template text="""combining handwritten index cards and org""" start="00:06:39.020" video="qanda-nabokov" id="subtitle"]] +[[!template text="""mode?""" start="00:06:39.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Great question. I do not.""" start="00:06:42.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I do write by hand when I get,""" start="00:06:46.620" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I don't know what a good term for it is,""" start="00:06:49.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I'll call it like editorial paralysis or""" start="00:06:51.420" video="qanda-nabokov" id="subtitle"]] +[[!template text="""something when I find it very hard to move""" start="00:06:53.100" video="qanda-nabokov" id="subtitle"]] +[[!template text="""forward in something because I keep going""" start="00:06:54.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""back and tweaking. And I will handwrite stuff""" start="00:06:56.940" video="qanda-nabokov" id="subtitle"]] +[[!template text="""at that point and then type it in because""" start="00:06:58.520" video="qanda-nabokov" id="subtitle"]] +[[!template text="""it's so much harder to get stuck in editing""" start="00:07:02.120" video="qanda-nabokov" id="subtitle"]] +[[!template text="""mode when you have to move forward on the""" start="00:07:04.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""page. I don't use index cards.""" start="00:07:07.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""In the blog article that I link in my talk,""" start="00:07:11.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""the ewj.io slash emacs 1,""" start="00:07:14.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I did try using handwritten or spreadsheet""" start="00:07:18.240" video="qanda-nabokov" id="subtitle"]] +[[!template text="""outlines at 1 point and found them very,""" start="00:07:22.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""very clumsy for novel writing just because I""" start="00:07:27.640" video="qanda-nabokov" id="subtitle"]] +[[!template text="""do so much, I mean, I do so much revision""" start="00:07:29.820" video="qanda-nabokov" id="subtitle"]] +[[!template text="""that moving things around meant that I had to""" start="00:07:32.600" video="qanda-nabokov" id="subtitle"]] +[[!template text="""keep 2 things in sync with each other,""" start="00:07:34.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""the pros and the outline.""" start="00:07:35.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""And that was what really led me to Org Mode""" start="00:07:37.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""as a way to keep the, again,""" start="00:07:39.800" video="qanda-nabokov" id="subtitle"]] +[[!template text="""I think part of the key for me is keeping the""" start="00:07:42.040" video="qanda-nabokov" id="subtitle"]] +[[!template text="""outline and the pros right next to each other""" start="00:07:44.580" video="qanda-nabokov" id="subtitle"]] +[[!template text="""in a way that they move around which is just""" start="00:07:46.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""really, I don't know, for me really really""" start="00:07:48.800" video="qanda-nabokov" id="subtitle"]] +[[!template text="""powerful.""" start="00:07:49.000" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay great, so we finished the list of""" start="00:07:54.280" video="qanda-nabokov" id="subtitle"]] +[[!template text="""questions available on the pad,""" start="00:07:55.840" video="qanda-nabokov" id="subtitle"]] +[[!template text="""but I see that some people have joined us on""" start="00:07:58.260" video="qanda-nabokov" id="subtitle"]] +[[!template text="""BBB, so hi everyone. If you have any""" start="00:08:01.100" video="qanda-nabokov" id="subtitle"]] +[[!template text="""questions feel free to unmute yourself and""" start="00:08:03.340" video="qanda-nabokov" id="subtitle"]] +[[!template text="""ask them. Otherwise, we might go on a break.""" start="00:08:06.560" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So I'm going to give you about 10 seconds to""" start="00:08:08.360" video="qanda-nabokov" id="subtitle"]] +[[!template text="""unmute yourself. Or if you just want to add""" start="00:08:14.480" video="qanda-nabokov" id="subtitle"]] +[[!template text="""more questions on the pad,""" start="00:08:15.660" video="qanda-nabokov" id="subtitle"]] +[[!template text="""that's also fine. And that'll give you about""" start="00:08:17.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""30 seconds. Otherwise,""" start="00:08:19.540" video="qanda-nabokov" id="subtitle"]] +[[!template text="""we'll need to go on a break.""" start="00:08:20.660" video="qanda-nabokov" id="subtitle"]] +[[!template text="""And in the meantime, I'll thank you,""" start="00:08:24.020" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Edmund, for your presentation,""" start="00:08:25.600" video="qanda-nabokov" id="subtitle"]] +[[!template text="""because it's always nice,""" start="00:08:27.880" video="qanda-nabokov" id="subtitle"]] +[[!template text="""you know, we The reason why we have 2 tracks,""" start="00:08:31.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and we've been having 2 tracks for the last 2""" start="00:08:34.200" video="qanda-nabokov" id="subtitle"]] +[[!template text="""or 3 editions of EmacsConf is because it's""" start="00:08:36.039" video="qanda-nabokov" id="subtitle"]] +[[!template text="""really nice to have those talks which are""" start="00:08:38.799" video="qanda-nabokov" id="subtitle"]] +[[!template text="""still related to Emacs and to far distance""" start="00:08:43.500" video="qanda-nabokov" id="subtitle"]] +[[!template text="""developments because we are obviously using""" start="00:08:45.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""packages. But it's really nice to see when we""" start="00:08:48.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""foray into other areas like writing or any""" start="00:08:51.960" video="qanda-nabokov" id="subtitle"]] +[[!template text="""kind of academia-based topics.""" start="00:08:53.400" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So thank you, it's really nice.""" start="00:08:55.440" video="qanda-nabokov" id="subtitle"]] +[[!template text="""It brings different colors to the spectrum of""" start="00:09:01.500" video="qanda-nabokov" id="subtitle"]] +[[!template text="""what EmacsConf is and what ultimately Emacs""" start="00:09:03.580" video="qanda-nabokov" id="subtitle"]] +[[!template text="""is as well. Thank you.""" start="00:09:04.680" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Well thanks to everyone who tuned in and Leo""" start="00:09:06.960" video="qanda-nabokov" id="subtitle"]] +[[!template text="""thanks to you and all the other organizers""" start="00:09:08.160" video="qanda-nabokov" id="subtitle"]] +[[!template text="""for putting this together.""" start="00:09:09.060" video="qanda-nabokov" id="subtitle"]] +[[!template text="""Appreciate it.""" start="00:09:09.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you. All right I think we're going to""" start="00:09:12.720" video="qanda-nabokov" id="subtitle"]] +[[!template text="""go on a little break for 5 minutes because I""" start="00:09:14.380" video="qanda-nabokov" id="subtitle"]] +[[!template text="""don't see other questions being asked.""" start="00:09:16.060" video="qanda-nabokov" id="subtitle"]] +[[!template text="""So everyone we'll see you again in 5 minutes""" start="00:09:18.900" video="qanda-nabokov" id="subtitle"]] +[[!template text="""and thank you again, Edmund.""" start="00:09:19.900" video="qanda-nabokov" id="subtitle"]] +[[!template text="""[Speaker 1]: Cheers.""" start="00:09:20.720" video="qanda-nabokov" id="subtitle"]] + +Questions or comments? Please e-mail [ewj@inkwellandoften.com](mailto:ewj@inkwellandoften.com?subject=Comment%20for%20EmacsConf%202023%20nabokov%3A%20Why%20Nabokov%20would%20use%20Org-Mode%20if%20he%20were%20writing%20today) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/nabokov-before.md b/2023/info/nabokov-before.md new file mode 100644 index 00000000..e9aa2951 --- /dev/null +++ b/2023/info/nabokov-before.md @@ -0,0 +1,25 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 10-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="nabokov-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="nabokov-mainVideo" data=""" +00:00.000 Introduction +00:45.760 Nabokov's process of writing novels +02:24.080 Three practical problems novelists face +04:46.560 Org mode for writing novels +08:55.600 Takeaways and next steps + +"""]]<div></div>Duration: 09:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li><li><a href="https://toobnix.org/w/bDou9TDETryMt18KcdB56A">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="nabokov-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="nabokov-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus"></audio></div><div></div>Duration: 09:21 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/nabokov-nav.md b/2023/info/nabokov-nav.md new file mode 100644 index 00000000..f7ef3f32 --- /dev/null +++ b/2023/info/nabokov-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a> +Next by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/one-after.md b/2023/info/one-after.md new file mode 100644 index 00000000..e7b63c57 --- /dev/null +++ b/2023/info/one-after.md @@ -0,0 +1,904 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="one-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Hi, everybody. Welcome to the EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""I hope you're doing well and you're having fun.""" start="00:00:04.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""I'm Tony Aldon, and in this talk,""" start="00:00:06.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""we are going to see how to build a static website""" start="00:00:08.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""with the package one.el that I wrote.""" start="00:00:11.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""But before we start, I'd like to thank""" start="00:00:14.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""all the people who organized that conference,""" start="00:00:17.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""so thank you all for the great work.""" start="00:00:20.560" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Documentation""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now let's jump into the documentation of one.el,""" start="00:00:24.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is built with one.el. In the install page,""" start="00:00:27.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""we can see that we have a sidebar""" start="00:00:31.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""with all of the pages in the documentation,""" start="00:00:33.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""some buttons to switch between pages,""" start="00:00:35.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we also have a table of contents""" start="00:00:39.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""for some of the pages if we need it.""" start="00:00:41.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now let's jump into one.el repository""" start="00:00:45.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""and see why I like how it is implemented,""" start="00:00:49.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""because the website that we've seen,""" start="00:00:52.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""the documentation, is just one file.""" start="00:00:53.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is that file, with the headline of level 1""" start="00:00:55.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""being the web pages.""" start="00:01:00.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""There needs to be a web page to have the property,""" start="00:01:03.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""the Org property `:ONE:`, set to a render function.""" start="00:01:06.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""We are going to see how they work after.""" start="00:01:09.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`,""" start="00:01:11.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""is the path of the page. So really,""" start="00:01:14.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""the website that we have on the left""" start="00:01:17.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""is this file. So to me, this is something simple like that""" start="00:01:20.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""that I wanted.""" start="00:01:24.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""And another thing is that when we want to""" start="00:01:25.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""change something with one.el,""" start="00:01:29.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""we don't change configuration""" start="00:01:33.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""or write JavaScript or anything else.""" start="00:01:36.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""We just write Emacs Lisp code or a bit of CSS.""" start="00:01:38.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is what we have with a minibuffer website""" start="00:01:43.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""that is built with one.el,""" start="00:01:45.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the only thing that I had to do""" start="00:01:47.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""is to write Emacs Lisp code.""" start="00:01:50.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""So those are two things: the content in one file,""" start="00:01:51.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""and if we want to change the layout, CSS and Emacs Lisp.""" start="00:01:55.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is one.el.""" start="00:01:58.680" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Starting a new project""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now let's go to our node,""" start="00:02:02.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we are going to start a new project.""" start="00:02:03.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""How do we do that?""" start="00:02:07.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""In a new empty directory,""" start="00:02:09.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""so new project directory,""" start="00:02:11.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""we call the function `one-default-new-project`.""" start="00:02:15.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""We have that project, which is one file with the""" start="00:02:19.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""five default type of pages that we have,""" start="00:02:22.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""and one CSS file.""" start="00:02:25.760" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Building""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]] + +[[!template text="""How to build that website?""" start="00:02:27.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""Okay, so we call the function `one-build`.""" start="00:02:29.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""This builds the website.""" start="00:02:32.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""We jump into a terminal, and now if we run tree,""" start="00:02:33.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""we can see that the website""" start="00:02:36.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""has been built in the public directory""" start="00:02:39.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""with the information in the Org properties""" start="00:02:42.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the content of one.org files. Okay, cool.""" start="00:02:45.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now we are going to render that in the browser""" start="00:02:50.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""to serve that, and to do that""" start="00:02:53.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""we can use browser-sync utility,""" start="00:02:58.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is cool with that,""" start="00:03:01.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""in that each time we are going to...""" start="00:03:02.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we go into public...""" start="00:03:06.420" video="mainVideo-one" id="subtitle"]] +[[!template text="""Each time we are going to change and rebuild the website,""" start="00:03:07.861" video="mainVideo-one" id="subtitle"]] +[[!template text="""this will be reloaded in the browser.""" start="00:03:11.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""So one, this is that website, is now this one.""" start="00:03:14.320" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Side by side""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]] + +[[!template text="""So let's put them side by side.""" start="00:03:19.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""We go there, and we may do something like that.""" start="00:03:22.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""So one.el, the home page, so our custom ID""" start="00:03:26.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""with the value just a /,""" start="00:03:30.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""is rendered with that function `one-default-home`,""" start="00:03:32.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is a render function,""" start="00:03:36.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the first argument of that function is the headline,""" start="00:03:37.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""this current headline. So, parsed with the Org parser,""" start="00:03:41.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""and then we do the thing that we want to do,""" start="00:03:45.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the render function returns an HTML string""" start="00:03:48.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""that is used to build the pages at the custom ID.""" start="00:03:52.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now we can go to another web page, the second web page,""" start="00:03:57.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see that there is a different value""" start="00:04:03.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""for the `:ONE:` property, so another render function,""" start="00:04:05.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the custom ID at the path of that page.""" start="00:04:10.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we can see that in the browser.""" start="00:04:14.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is `/blog/default-home-list-pages`.""" start="00:04:16.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is that. Now there are three other pages,""" start="00:04:19.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""but we can list that like that.""" start="00:04:23.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""We do a grep in that files,""" start="00:04:25.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see the different default render function.""" start="00:04:28.360" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Writing a render function""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]] + +[[!template text="""In the second part of that talk,""" start="00:04:32.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""we are going to write a render function.""" start="00:04:34.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we are going to see that after.""" start="00:04:38.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now maybe we can go to the default page,""" start="00:04:41.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""and let's modify that default page.""" start="00:04:47.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""We see that this uses `one-default` render function,""" start="00:04:50.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now let's write "foo bar baz".""" start="00:04:54.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""We want to modify the content. We save.""" start="00:04:57.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""We call again one-build distribute,""" start="00:05:00.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see here we have it: foo bar baz in the default page.""" start="00:05:10.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now we can use... When we use one-build,""" start="00:05:16.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""this also copies the files in the asset directory""" start="00:05:19.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""into the public directory.""" start="00:05:23.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is not always what we want to do.""" start="00:05:25.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""Sometimes we just change the content,""" start="00:05:28.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""and for that we can use `one-render-page-at-point`.""" start="00:05:29.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""If we use that one, this just renders the current page.""" start="00:05:34.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we see that we have again "foo bar baz" in the page.""" start="00:05:39.480" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""New page""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now let's add a new page. To add a new page,""" start="00:05:44.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""we just have to copy one of them, maybe the default page.""" start="00:05:47.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""We are going to call it maybe emacsconf-2023.""" start="00:05:52.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""We still use one default render function to render it,""" start="00:05:58.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""but we want to change the path.""" start="00:06:01.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""So the custom ID, we are going to give it /blog""" start="00:06:04.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and emacsconf-2023 with a slash at the end,""" start="00:06:08.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the content... We no longer want this one,""" start="00:06:12.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""but maybe "We're having a lot of fun".""" start="00:06:18.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we save that, we rebuild with `one-build` this,""" start="00:06:22.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we can look at the top""" start="00:06:28.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and pass it the path `/blog/emacsconf-2023/.""" start="00:06:33.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we have that new page.""" start="00:06:39.280" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Linking between pages""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now, how to link between pages?""" start="00:06:41.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we are going to write a link""" start="00:06:44.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""that links to the last page,""" start="00:06:46.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""so a page with the table of contents.""" start="00:06:48.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""To do that, we just have to use the value of the custom ID,""" start="00:06:50.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and to link to a custom ID inside Org mode,""" start="00:06:54.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""we use the hashtag. We pass it here,""" start="00:06:58.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""then we pass it in the description,""" start="00:07:03.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""so TOC and sidebar,""" start="00:07:07.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now if we press RET inside Emacs,""" start="00:07:09.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""we jump to that page. So this is cool.""" start="00:07:12.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now we build again,""" start="00:07:15.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see that we are going to have""" start="00:07:17.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""the link to the page in the browser.""" start="00:07:19.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this link to the default page with a table of contents,""" start="00:07:22.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""fine, but maybe what we want to do""" start="00:07:27.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""is to link to the "Headline foo" in that page.""" start="00:07:29.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""How do we do that?""" start="00:07:33.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""We do that by adding a custom id.""" start="00:07:34.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""We keep the first part,""" start="00:07:36.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is the page where we are,""" start="00:07:41.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we added hash with foo,""" start="00:07:43.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""so that Headline foo will have the ID "foo"""" start="00:07:46.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""in its H2 tag, HTML tag,""" start="00:07:50.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we can link it here with still custom ID, so "foo",""" start="00:07:57.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now it's headline... headline with what?""" start="00:08:05.081" video="mainVideo-one" id="subtitle"]] +[[!template text="""Headline foo in TOC page. So we have that.""" start="00:08:10.540" video="mainVideo-one" id="subtitle"]] +[[!template text="""If we press RET, we jump to that headline in Emacs.""" start="00:08:14.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is super cool.""" start="00:08:19.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""And now, if we call `one-build`,""" start="00:08:20.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""we see in the browser""" start="00:08:23.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we have a new link,""" start="00:08:25.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""and this link linked to that specific headline.""" start="00:08:26.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is cool. So we have the link between pages""" start="00:08:30.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""that works inside Emacs""" start="00:08:34.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""and that works well also in the browser.""" start="00:08:36.320" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""CSS""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now let's say that we want to change the CSS.""" start="00:08:40.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we've added a page with specific content,""" start="00:08:44.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we've done some links.""" start="00:08:50.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now we want to modify the CSS file""" start="00:08:51.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is in the asset directory, the one.css.""" start="00:08:55.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""Each time we change it,""" start="00:09:00.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""we want to have live reload""" start="00:09:02.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""that copy that file into the public directory,""" start="00:09:05.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""so the same. We go back here,""" start="00:09:10.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""and there is a utility called `entr`, e-n-t-r.""" start="00:09:14.660" video="mainVideo-one" id="subtitle"]] +[[!template text="""Yes, this one, and using that, so a new terminal,""" start="00:09:18.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""we are at the beginning.""" start="00:09:26.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""This will watch the changing in what.css,""" start="00:09:28.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""and `entr` will copy it into the public directory""" start="00:09:32.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""each time this changes. Let's go back to Org mode,""" start="00:09:35.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""because I chose some color that is cool,""" start="00:09:38.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we go back to the CSS files.""" start="00:09:43.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""We put them side by side, and maybe we go to the new page""" start="00:09:47.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we were changing,""" start="00:09:53.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we are going to change the body,""" start="00:09:55.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""the background color, and maybe we can change""" start="00:10:01.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""with the color that we've just taken.""" start="00:10:03.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we save, and we see the changing happening.""" start="00:10:06.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""We can do it again with the color""" start="00:10:10.220" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we have at the beginning,""" start="00:10:14.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""and this is the user experience""" start="00:10:16.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we have with one.el and the default function.""" start="00:10:18.880" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""How to write a render function""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now that we've seen that,""" start="00:10:23.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""we've done all of that part,""" start="00:10:26.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we are going to see""" start="00:10:30.461" video="mainVideo-one" id="subtitle"]] +[[!template text="""how to write a render function.""" start="00:10:31.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""So let's go. The render function,""" start="00:10:34.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""so one.org, we remember these are the functions""" start="00:10:36.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""that are in the `:ONE:` Org property.""" start="00:10:41.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we are going to remove that part.""" start="00:10:43.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""We no longer want that one. We don't want this.""" start="00:10:45.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""We just keep that. `one-default`,""" start="00:10:49.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""we want this to be the home of our website.""" start="00:10:52.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""We have that. We rebuild,""" start="00:10:55.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we just have one page, and we have that page.""" start="00:10:57.660" video="mainVideo-one" id="subtitle"]] +[[!template text="""We are going to add another page that we call "foo",""" start="00:11:05.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""and here we pass it the render function foo""" start="00:11:10.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""that doesn't exist yet, and we are going to write it.""" start="00:11:15.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""So maybe with some content, and we copy, copy.""" start="00:11:20.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""We have that. We call it "bar" to have something to show.""" start="00:11:27.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""So here we are. If we build that, so we build it,""" start="00:11:33.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see in the echo area at the bottom""" start="00:11:39.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we have an error "void",""" start="00:11:42.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is because the function foo doesn't exist.""" start="00:11:43.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""So now we are going to write that function,""" start="00:11:46.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we write it in the onerc.el""" start="00:11:48.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""where we put any Elisp code""" start="00:11:53.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we want to be run""" start="00:11:57.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""each time we build the website or render the pages.""" start="00:11:58.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we want a render function called foo.""" start="00:12:03.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""So that takes three arguments: page-tree, pages, and global.""" start="00:12:06.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""We are going to look at the page-tree in our case,""" start="00:12:10.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the render function return an HTML string.""" start="00:12:16.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is the thing that we want from them.""" start="00:12:19.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""So maybe foo, bar, and baz.""" start="00:12:22.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now this is something well-defined,""" start="00:12:25.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""and with one.org here, the file, we rebuild this,""" start="00:12:28.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we can see now in the browser,""" start="00:12:34.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""if we go to the page foo, that we have "foo bar baz".""" start="00:12:39.620" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is exactly what we have rendered""" start="00:12:42.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""by the render function that is set,""" start="00:12:45.460" video="mainVideo-one" id="subtitle"]] +[[!template text="""we see at the bottom in the one.org file,""" start="00:12:47.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""in the `:ONE:` property. Now this is HTML, so we can pass it,""" start="00:12:51.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""for instance, h1, the tag h1.""" start="00:12:56.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""We save that file. We go in the one.org file,""" start="00:13:00.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""we build again, and now we see that we have an h1.""" start="00:13:06.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""Okay, this is interesting, but if we would have to""" start="00:13:10.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""build this function with a string like that,""" start="00:13:14.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is boring and not the best way.""" start="00:13:18.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we can use the library Jack,""" start="00:13:22.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""which offers function `jack-html`""" start="00:13:24.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""that takes some data structure,""" start="00:13:27.589" video="mainVideo-one" id="subtitle"]] +[[!template text="""for instance, an h1, a nested list""" start="00:13:31.581" video="mainVideo-one" id="subtitle"]] +[[!template text="""that represents the HTML that we want to render,""" start="00:13:34.180" video="mainVideo-one" id="subtitle"]] +[[!template text="""and transform it into an HTML string.""" start="00:13:38.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we have that, we saved,""" start="00:13:41.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""we rebuild in the one.org file with `one-build`,""" start="00:13:43.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see now that this has been built using `jack-html`.""" start="00:13:48.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now what do we want to do?""" start="00:13:55.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""Okay, see, the thing that we want to do""" start="00:13:59.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""is to understand page-tree. So what is page-tree?""" start="00:14:02.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""page-tree is when we go to one.org,""" start="00:14:05.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is really for foo,""" start="00:14:07.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is the parsed data of that headline, that page.""" start="00:14:09.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""So this is done with, no, not this one, we use,""" start="00:14:17.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""so in the mini-buffer, we use `one-parse-buffer`,""" start="00:14:23.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see this is the data""" start="00:14:27.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we have with that function, first headline,""" start="00:14:30.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the second headline,""" start="00:14:33.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is the parse tree that we have there.""" start="00:14:34.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is that data that is passed to""" start="00:14:38.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""the `foo` render function. One thing that is cool,""" start="00:14:40.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""so I see here, is that as we are dealing with data,""" start="00:14:45.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""we have all the data of the website,""" start="00:14:51.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""we can show them in the web page. Now, why not?""" start="00:14:53.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""It's great to write the website""" start="00:14:57.361" video="mainVideo-one" id="subtitle"]] +[[!template text="""and also to debug if we need to debug at some point.""" start="00:15:00.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""So let's render page-tree directly in the page, one.org,""" start="00:15:02.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we rebuild, we reload, and we see this is what we have,""" start="00:15:10.280" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is the data that we have, okay?""" start="00:15:15.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""And we have, for instance, the `:raw-value` with this "foo",""" start="00:15:17.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""which is the headline,""" start="00:15:20.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""the content of the headline in a raw format,""" start="00:15:22.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we also have custom,""" start="00:15:27.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`,""" start="00:15:29.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""which are the properties,""" start="00:15:33.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""and when we are inside those render functions,""" start="00:15:35.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""we have access to this.""" start="00:15:40.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""So let's, what can we do now, is to,""" start="00:15:43.241" video="mainVideo-one" id="subtitle"]] +[[!template text="""let's get the row value.""" start="00:15:46.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""So we no longer need that.""" start="00:15:48.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""Maybe we can do something like that.""" start="00:15:51.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""We create now HTML. In HTML, we want the body,""" start="00:15:54.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""we want an h1 tag, and we are going to pass it""" start="00:16:04.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""a title, and in the title,""" start="00:16:08.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""this is something that we let-bind here,""" start="00:16:10.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""so the value of the title,""" start="00:16:13.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""we get it with `org-element-property`,""" start="00:16:15.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the `:raw-value`, so this is the property that we want,""" start="00:16:24.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""so `raw-value`, and from which data we want that,""" start="00:16:29.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""to page-tree. So now, let's have one.org at the bottom,""" start="00:16:34.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""we build again, and now we reload,""" start="00:16:40.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we see that we get a foo. This is that title,""" start="00:16:46.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""the value of that variable in that data structure.""" start="00:16:50.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now, let's get those two properties.""" start="00:16:56.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""How do we get those two properties?""" start="00:17:00.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""The same way, `:ONE:` that we call one, so raw-value,""" start="00:17:03.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""we change that for `:ONE`, the other raw-value""" start="00:17:07.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""for `:CUSTOM_ID`, we change the title for `custom-id`,""" start="00:17:11.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""and what we want now is for instance,""" start="00:17:19.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""yes, h1 again, and org properties.""" start="00:17:23.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""We add the org properties, and let's do a list,""" start="00:17:30.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""another list, with li element, one,""" start="00:17:34.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""we want that value, and that value will be""" start="00:17:39.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""the value of the variable one.""" start="00:17:43.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""We can do that with also custom-id,""" start="00:17:45.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now, in the one that we have to save,""" start="00:17:52.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""and in one of our files, not like that,""" start="00:17:56.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""we rebuild that, and we see""" start="00:17:59.440" video="mainVideo-one" id="subtitle"]] +[[!template text="""that we can get those properties.""" start="00:18:03.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is super cool.""" start="00:18:05.800" video="mainVideo-one" id="subtitle"]] +[[!template text="""As we are dealing with data,""" start="00:18:07.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we have the information of the whole website,""" start="00:18:09.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""we can do whatever we want,""" start="00:18:11.720" video="mainVideo-one" id="subtitle"]] +[[!template text="""because we have access to that data.""" start="00:18:14.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""Let's, for instance, add a date, the date of 2023,""" start="00:18:16.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""so I think this is 02, when there is the conference, see,""" start="00:18:23.840" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we can get access to that `one` again,""" start="00:18:28.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""here, so `date`, and we go,""" start="00:18:32.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""we change the `:CUSTOM_ID` with the `:DATE`,""" start="00:18:37.955" video="mainVideo-one" id="subtitle"]] +[[!template text="""and in the list here,""" start="00:18:42.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""so we want in the list, this to be the date,""" start="00:18:46.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we build again that,""" start="00:18:53.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we have access to the date.""" start="00:18:56.560" video="mainVideo-one" id="subtitle"]] +[[!template text="""Really, we can do whatever we want.""" start="00:18:58.800" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Rendering content""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]] + +[[!template text="""Now, we want the content. So far,""" start="00:19:03.200" video="mainVideo-one" id="subtitle"]] +[[!template text="""we get the property, but what about the content,""" start="00:19:06.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""so h1, and now we put "Org content",""" start="00:19:11.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and this is going to be something in the variable content,""" start="00:19:17.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we have to add that variable,""" start="00:19:21.360" video="mainVideo-one" id="subtitle"]] +[[!template text="""so in the let binding, we write our content,""" start="00:19:25.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""we are going to have that content from the page-tree.""" start="00:19:28.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""To do that, we use `org-export`,""" start="00:19:30.640" video="mainVideo-one" id="subtitle"]] +[[!template text="""so we need to export something into HTML,""" start="00:19:33.680" video="mainVideo-one" id="subtitle"]] +[[!template text="""we export the data with the backend.""" start="00:19:36.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""So the data that we want is page-tree,""" start="00:19:37.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""but we don't want the first headline,""" start="00:19:40.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""so we use `org-element-contents`,""" start="00:19:42.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we pass it `page-tree`, so this is that.""" start="00:19:46.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""But for the exported, we need to pass it,""" start="00:19:50.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""and also, how do we call that, we call that an Org backend.""" start="00:19:53.120" video="mainVideo-one" id="subtitle"]] +[[!template text="""So `one-ox` is our backend provided by one.el,""" start="00:20:00.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and the last argument is nil.""" start="00:20:06.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""We are almost done. Now with one.org,""" start="00:20:09.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""we build the website, and we see that we have an error,""" start="00:20:14.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""it's because this is not a content,""" start="00:20:18.880" video="mainVideo-one" id="subtitle"]] +[[!template text="""so there.. No, okay,""" start="00:20:22.080" video="mainVideo-one" id="subtitle"]] +[[!template text="""there was this `org-element-contents`, I think,""" start="00:20:27.040" video="mainVideo-one" id="subtitle"]] +[[!template text="""and now we build it, and we must see it here.""" start="00:20:32.840" video="mainVideo-one" id="subtitle"]] + +[[!template new="1" text="""Rendering CSS""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]] + +[[!template text="""So we have the content,""" start="00:20:37.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""we have the Org values,""" start="00:20:39.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""and last thing that we can do maybe is to put some CSS.""" start="00:20:43.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""Let's have a look to `one-default` function.""" start="00:20:48.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""We can see in one.el file that we have a lot of""" start="00:20:51.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""default functions that we can use to take inspiration.""" start="00:20:56.400" video="mainVideo-one" id="subtitle"]] +[[!template text="""The last thing that we need""" start="00:21:01.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""is to link to the one.css file,""" start="00:21:05.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""so we are going to do that `onerc` file.""" start="00:21:08.000" video="mainVideo-one" id="subtitle"]] +[[!template text="""This is here, so `html` we don't need,""" start="00:21:14.920" video="mainVideo-one" id="subtitle"]] +[[!template text="""we have that one, we want the head to be here,""" start="00:21:20.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we pass it a class, which is a title,""" start="00:21:26.480" video="mainVideo-one" id="subtitle"]] +[[!template text="""a div with the class content. We have that.""" start="00:21:37.320" video="mainVideo-one" id="subtitle"]] +[[!template text="""Now with one.org, we build it again,""" start="00:21:42.240" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we should see the website render with the CSS,""" start="00:21:46.160" video="mainVideo-one" id="subtitle"]] +[[!template text="""the property, and all the content,""" start="00:21:50.600" video="mainVideo-one" id="subtitle"]] +[[!template text="""and we've done that just with that Emacs Lisp file,""" start="00:21:56.760" video="mainVideo-one" id="subtitle"]] +[[!template text="""so this is all I wanted to show you today with one.el,""" start="00:22:01.520" video="mainVideo-one" id="subtitle"]] +[[!template text="""I hope you enjoyed the talk, and have a nice day,""" start="00:22:08.960" video="mainVideo-one" id="subtitle"]] +[[!template text="""and a nice conference.""" start="00:22:14.880" video="mainVideo-one" id="subtitle"]] + + + +Captioner: sachac + +<a name="one-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: So, will you, when I'm looking at my,""" start="00:00:00.459" video="qanda-one" id="subtitle"]] +[[!template text="""the other screen, I don't see the chat,""" start="00:00:06.279" video="qanda-one" id="subtitle"]] +[[!template text="""so maybe someone can tell me.""" start="00:00:08.480" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: It's fine, don't worry about it,""" start="00:00:11.259" video="qanda-one" id="subtitle"]] +[[!template text="""and we are live. So hi again everyone.""" start="00:00:12.360" video="qanda-one" id="subtitle"]] +[[!template text="""Hi Tony, how are you doing?""" start="00:00:15.060" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Really well, and you?""" start="00:00:17.040" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: I am doing fantastically,""" start="00:00:19.440" video="qanda-one" id="subtitle"]] +[[!template text="""as fantastically as I can be doing,""" start="00:00:21.380" video="qanda-one" id="subtitle"]] +[[!template text="""having to put out fire in the background""" start="00:00:24.099" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Cool!""" start="00:00:30.140" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: during MaxConf. But I'm doing great! Alright,""" start="00:00:25.840" video="qanda-one" id="subtitle"]] +[[!template text="""Let me just try to set up everything so that""" start="00:00:31.640" video="qanda-one" id="subtitle"]] +[[!template text="""I can show the questions and all this.""" start="00:00:34.960" video="qanda-one" id="subtitle"]] +[[!template text="""Do you mind if I read you the question?""" start="00:00:37.260" video="qanda-one" id="subtitle"]] +[[!template text="""It might be a little more interactive and""" start="00:00:38.600" video="qanda-one" id="subtitle"]] +[[!template text="""this way you can focus on either presenting""" start="00:00:39.960" video="qanda-one" id="subtitle"]] +[[!template text="""stuff on your end.""" start="00:00:42.800" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, tell me what are the questions and what""" start="00:00:44.059" video="qanda-one" id="subtitle"]] +[[!template text="""to do and I will do that.""" start="00:00:48.680" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay great so what I'll do,""" start="00:00:53.420" video="qanda-one" id="subtitle"]] +[[!template text="""I'll invite people to go to the pad and ask""" start="00:00:56.400" video="qanda-one" id="subtitle"]] +[[!template text="""questions because it was a very interesting""" start="00:00:58.580" video="qanda-one" id="subtitle"]] +[[!template text="""talk and I'm sure you have plenty of""" start="00:01:00.060" video="qanda-one" id="subtitle"]] +[[!template text="""questions but I only see 1 right now.""" start="00:01:01.480" video="qanda-one" id="subtitle"]] +[[!template text="""Do we have people on BigBlueButton?""" start="00:01:03.460" video="qanda-one" id="subtitle"]] +[[!template text="""Yes we do have people joining right now.""" start="00:01:05.640" video="qanda-one" id="subtitle"]] +[[!template text="""So reading the first question then.""" start="00:01:11.000" video="qanda-one" id="subtitle"]] +[[!template text="""So what's the main motivation for this new""" start="00:01:12.620" video="qanda-one" id="subtitle"]] +[[!template text="""package? I used to use org.yugo""" start="00:01:14.380" video="qanda-one" id="subtitle"]] +[[!template text="""and use GitHub Actions to build a blog.""" start="00:01:16.280" video="qanda-one" id="subtitle"]] +[[!template text="""So can you go in a little bit of details on""" start="00:01:18.340" video="qanda-one" id="subtitle"]] +[[!template text="""this?""" start="00:01:20.600" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, OK. So the main goal,""" start="00:01:21.540" video="qanda-one" id="subtitle"]] +[[!template text="""I didn't want to have,""" start="00:01:30.900" video="qanda-one" id="subtitle"]] +[[!template text="""to, I will push that here.""" start="00:01:33.805" video="qanda-one" id="subtitle"]] +[[!template text="""So my goal was to not have to rely on another""" start="00:01:38.040" video="qanda-one" id="subtitle"]] +[[!template text="""static site generator to produce my website.""" start="00:01:45.060" video="qanda-one" id="subtitle"]] +[[!template text="""So if you use a Yugo, that means that you""" start="00:01:49.920" video="qanda-one" id="subtitle"]] +[[!template text="""take, so this is the website that we've seen""" start="00:01:54.780" video="qanda-one" id="subtitle"]] +[[!template text="""in the talk, this 1. And I didn't want to""" start="00:02:01.960" video="qanda-one" id="subtitle"]] +[[!template text="""have to use a piece of software in Emacs that""" start="00:02:07.880" video="qanda-one" id="subtitle"]] +[[!template text="""translate to some other files to be feed to""" start="00:02:13.320" video="qanda-one" id="subtitle"]] +[[!template text="""another statistic generator because this way""" start="00:02:16.960" video="qanda-one" id="subtitle"]] +[[!template text="""I have 2 things to understand.""" start="00:02:20.680" video="qanda-one" id="subtitle"]] +[[!template text="""I have to understand how that software""" start="00:02:23.680" video="qanda-one" id="subtitle"]] +[[!template text="""translates my files into the other files and""" start="00:02:26.780" video="qanda-one" id="subtitle"]] +[[!template text="""then I have to understand how Hugo works.""" start="00:02:32.440" video="qanda-one" id="subtitle"]] +[[!template text="""So if I want to change something I need to""" start="00:02:37.060" video="qanda-one" id="subtitle"]] +[[!template text="""understand Hugo. So at some point I need to""" start="00:02:39.480" video="qanda-one" id="subtitle"]] +[[!template text="""work with Hugo. So if I need to work with""" start="00:02:43.660" video="qanda-one" id="subtitle"]] +[[!template text="""Hugo, maybe I can work with it directly.""" start="00:02:46.200" video="qanda-one" id="subtitle"]] +[[!template text="""And I wanted also something that was purely""" start="00:02:51.800" video="qanda-one" id="subtitle"]] +[[!template text="""Emacs-centric and working on it,""" start="00:02:56.960" video="qanda-one" id="subtitle"]] +[[!template text="""I found out about that solution.""" start="00:03:03.700" video="qanda-one" id="subtitle"]] +[[!template text="""And I wanted also something that we have only""" start="00:03:05.600" video="qanda-one" id="subtitle"]] +[[!template text="""1 file that have all the entries.""" start="00:03:11.780" video="qanda-one" id="subtitle"]] +[[!template text="""And when I thought about that,""" start="00:03:15.560" video="qanda-one" id="subtitle"]] +[[!template text="""finally I found a way that maybe we can just""" start="00:03:19.140" video="qanda-one" id="subtitle"]] +[[!template text="""use 1 or 3 to pass it the information of the""" start="00:03:22.720" video="qanda-one" id="subtitle"]] +[[!template text="""website. And if you look,""" start="00:03:30.360" video="qanda-one" id="subtitle"]] +[[!template text="""If you just try to work with Gatsby,""" start="00:03:33.405" video="qanda-one" id="subtitle"]] +[[!template text="""Ugo or all those websites,""" start="00:03:37.920" video="qanda-one" id="subtitle"]] +[[!template text="""when you start, you download 10,""" start="00:03:40.940" video="qanda-one" id="subtitle"]] +[[!template text="""20, 30, thousand for hundreds of dependencies""" start="00:03:46.240" video="qanda-one" id="subtitle"]] +[[!template text="""to do. Just to me, I'm a small guy and I just""" start="00:03:53.440" video="qanda-one" id="subtitle"]] +[[!template text="""want to have some documentation on the""" start="00:03:59.620" video="qanda-one" id="subtitle"]] +[[!template text="""website like this 1. It just,""" start="00:04:02.720" video="qanda-one" id="subtitle"]] +[[!template text="""it shouldn't need that much of a dependency.""" start="00:04:05.460" video="qanda-one" id="subtitle"]] +[[!template text="""And if you look at the website,""" start="00:04:09.160" video="qanda-one" id="subtitle"]] +[[!template text="""if you want to hack on something,""" start="00:04:11.460" video="qanda-one" id="subtitle"]] +[[!template text="""you need a lot of to understand how the""" start="00:04:13.540" video="qanda-one" id="subtitle"]] +[[!template text="""config files work. So you need to,""" start="00:04:17.320" video="qanda-one" id="subtitle"]] +[[!template text="""how does it work this config file?""" start="00:04:19.459" video="qanda-one" id="subtitle"]] +[[!template text="""But I want, it's always happened that you""" start="00:04:21.060" video="qanda-one" id="subtitle"]] +[[!template text="""want to add 1 thing or to add that things.""" start="00:04:23.320" video="qanda-one" id="subtitle"]] +[[!template text="""What do you have to do?""" start="00:04:26.420" video="qanda-one" id="subtitle"]] +[[!template text="""You have to, you can't because it's not""" start="00:04:27.780" video="qanda-one" id="subtitle"]] +[[!template text="""offered by the configuration file.""" start="00:04:30.340" video="qanda-one" id="subtitle"]] +[[!template text="""With that solution that I built for me first,""" start="00:04:34.380" video="qanda-one" id="subtitle"]] +[[!template text="""I don't care if I need something else.""" start="00:04:38.920" video="qanda-one" id="subtitle"]] +[[!template text="""I just have to go in that file.""" start="00:04:42.020" video="qanda-one" id="subtitle"]] +[[!template text="""It doesn't need to be that file because as I""" start="00:04:49.840" video="qanda-one" id="subtitle"]] +[[!template text="""am in Emacs if the render functions are""" start="00:04:52.440" video="qanda-one" id="subtitle"]] +[[!template text="""already evaluated they exist and I can use it""" start="00:04:56.120" video="qanda-one" id="subtitle"]] +[[!template text="""but I just have to change that file so if I""" start="00:04:58.940" video="qanda-one" id="subtitle"]] +[[!template text="""want something more I just I go there let's""" start="00:05:02.520" video="qanda-one" id="subtitle"]] +[[!template text="""say so does it answer the question or I""" start="00:05:07.860" video="qanda-one" id="subtitle"]] +[[!template text="""continue to show something?""" start="00:05:10.920" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: It's up to you, I think you are answering the""" start="00:05:14.320" video="qanda-one" id="subtitle"]] +[[!template text="""question. I think you veered off a little bit""" start="00:05:16.060" video="qanda-one" id="subtitle"]] +[[!template text="""from just why not you go but then you kind of""" start="00:05:17.600" video="qanda-one" id="subtitle"]] +[[!template text="""redid part of your presentation to justify""" start="00:05:19.940" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: own system. But stop me if I go because I""" start="00:05:23.480" video="qanda-one" id="subtitle"]] +[[!template text="""used to want to show more things than what""" start="00:05:26.360" video="qanda-one" id="subtitle"]] +[[!template text="""there is in the question.""" start="00:05:29.920" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: why you had to roll your Yeah that's fine.""" start="00:05:21.940" video="qanda-one" id="subtitle"]] +[[!template text="""Just for people who do not know,""" start="00:05:32.080" video="qanda-one" id="subtitle"]] +[[!template text="""we tend to restrict speakers when they submit""" start="00:05:33.340" video="qanda-one" id="subtitle"]] +[[!template text="""a presentation. We tell them,""" start="00:05:35.500" video="qanda-one" id="subtitle"]] +[[!template text="""oh, you can do a flash talk in 10 minutes or""" start="00:05:36.620" video="qanda-one" id="subtitle"]] +[[!template text="""a bit of a longer talk in 20 minutes or 40""" start="00:05:39.000" video="qanda-one" id="subtitle"]] +[[!template text="""minutes. And usually, because we have a lot""" start="00:05:41.100" video="qanda-one" id="subtitle"]] +[[!template text="""of speakers, we have to kind of coerce people""" start="00:05:43.180" video="qanda-one" id="subtitle"]] +[[!template text="""into going to shorter formats and sometimes""" start="00:05:46.260" video="qanda-one" id="subtitle"]] +[[!template text="""it's a lot about killing your darlings.""" start="00:05:48.340" video="qanda-one" id="subtitle"]] +[[!template text="""But just to reassure you,""" start="00:05:51.100" video="qanda-one" id="subtitle"]] +[[!template text="""we're just about to go on a launch break in""" start="00:05:52.360" video="qanda-one" id="subtitle"]] +[[!template text="""about 10 minutes, so you've got the full 10""" start="00:05:54.560" video="qanda-one" id="subtitle"]] +[[!template text="""minutes to use however you want,""" start="00:05:56.840" video="qanda-one" id="subtitle"]] +[[!template text="""but I'll just tell you,""" start="00:05:58.320" video="qanda-one" id="subtitle"]] +[[!template text="""you have a lot of questions so you might want""" start="00:05:59.340" video="qanda-one" id="subtitle"]] +[[!template text="""to perhaps move on to the next 1 as soon as""" start="00:06:01.080" video="qanda-one" id="subtitle"]] +[[!template text="""you can.""" start="00:06:03.400" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes okay so tell me the next 1 and if people""" start="00:06:04.540" video="qanda-one" id="subtitle"]] +[[!template text="""want to stay more I can also stay more.""" start="00:06:08.940" video="qanda-one" id="subtitle"]] +[[!template text="""Right. I understand if people need to go to""" start="00:06:14.240" video="qanda-one" id="subtitle"]] +[[!template text="""lunch, they can, but people that want to""" start="00:06:17.220" video="qanda-one" id="subtitle"]] +[[!template text="""stay, if it's possible,""" start="00:06:19.020" video="qanda-one" id="subtitle"]] +[[!template text="""I'm here to answer any question.""" start="00:06:20.340" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Splendid. All right, so moving on to the next""" start="00:06:24.060" video="qanda-one" id="subtitle"]] +[[!template text="""question. Is it possible to include the""" start="00:06:26.240" video="qanda-one" id="subtitle"]] +[[!template text="""include org tag to add content from other""" start="00:06:29.180" video="qanda-one" id="subtitle"]] +[[!template text="""files. Do you see what I'm talking about?""" start="00:06:31.560" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, so it's not included.""" start="00:06:35.200" video="qanda-one" id="subtitle"]] +[[!template text="""So the idea was really to have only 1 file""" start="00:06:39.380" video="qanda-one" id="subtitle"]] +[[!template text="""and have no options. So if you look at the,""" start="00:06:45.720" video="qanda-one" id="subtitle"]] +[[!template text="""let's go into, so the answer is no,""" start="00:06:49.760" video="qanda-one" id="subtitle"]] +[[!template text="""but if you want, you can write the code that""" start="00:06:52.240" video="qanda-one" id="subtitle"]] +[[!template text="""do it. But let's just go into one.n,""" start="00:06:56.320" video="qanda-one" id="subtitle"]] +[[!template text="""so that files. So this is the files where you""" start="00:07:02.280" video="qanda-one" id="subtitle"]] +[[!template text="""have everything, and there is only 2""" start="00:07:07.900" video="qanda-one" id="subtitle"]] +[[!template text="""dependencies. Maybe we can see that at the""" start="00:07:11.440" video="qanda-one" id="subtitle"]] +[[!template text="""top so which are htmlis on the Jack and the""" start="00:07:13.980" video="qanda-one" id="subtitle"]] +[[!template text="""other are Augment. So for me,""" start="00:07:18.080" video="qanda-one" id="subtitle"]] +[[!template text="""they're not dependencies because they come""" start="00:07:19.840" video="qanda-one" id="subtitle"]] +[[!template text="""with Emacs. But the question is,""" start="00:07:21.820" video="qanda-one" id="subtitle"]] +[[!template text="""can I add other things?""" start="00:07:25.440" video="qanda-one" id="subtitle"]] +[[!template text="""If you look at that, you don't see the orange""" start="00:07:27.440" video="qanda-one" id="subtitle"]] +[[!template text="""color which are viable,""" start="00:07:31.640" video="qanda-one" id="subtitle"]] +[[!template text="""it's because I didn't want any configuration""" start="00:07:33.600" video="qanda-one" id="subtitle"]] +[[!template text="""nor option. So there is no,""" start="00:07:38.440" video="qanda-one" id="subtitle"]] +[[!template text="""if you think about, you are used to use org""" start="00:07:41.960" video="qanda-one" id="subtitle"]] +[[!template text="""export normally and to use all the options""" start="00:07:45.660" video="qanda-one" id="subtitle"]] +[[!template text="""that are possible on all the things they are""" start="00:07:49.540" video="qanda-one" id="subtitle"]] +[[!template text="""not included. You can add them because when""" start="00:07:52.000" video="qanda-one" id="subtitle"]] +[[!template text="""you are in a render function.""" start="00:08:04.900" video="qanda-one" id="subtitle"]] +[[!template text="""So this is the render function that I showed""" start="00:08:07.060" video="qanda-one" id="subtitle"]] +[[!template text="""in the theme. You have a page tree so you""" start="00:08:08.940" video="qanda-one" id="subtitle"]] +[[!template text="""have the information but in the global I""" start="00:08:11.980" video="qanda-one" id="subtitle"]] +[[!template text="""think, yes in global, you can pass anything""" start="00:08:18.358" video="qanda-one" id="subtitle"]] +[[!template text="""you want and if you want you can pass the""" start="00:08:21.020" video="qanda-one" id="subtitle"]] +[[!template text="""parse tree of the whole file.""" start="00:08:24.720" video="qanda-one" id="subtitle"]] +[[!template text="""So if you pass the parse tree of the whole""" start="00:08:28.080" video="qanda-one" id="subtitle"]] +[[!template text="""file, what you can do is that you can get it""" start="00:08:30.840" video="qanda-one" id="subtitle"]] +[[!template text="""there. So I don't have it right now,""" start="00:08:35.400" video="qanda-one" id="subtitle"]] +[[!template text="""but you might have your include stuff and you""" start="00:08:38.659" video="qanda-one" id="subtitle"]] +[[!template text="""get it with a node property that target""" start="00:08:43.980" video="qanda-one" id="subtitle"]] +[[!template text="""something in the global variable.""" start="00:08:48.580" video="qanda-one" id="subtitle"]] +[[!template text="""So if we look just to be short but those 3""" start="00:08:50.940" video="qanda-one" id="subtitle"]] +[[!template text="""parts, the first 1 is page tree.""" start="00:08:55.320" video="qanda-one" id="subtitle"]] +[[!template text="""So it's this page that you are on the right,""" start="00:08:57.180" video="qanda-one" id="subtitle"]] +[[!template text="""pages are a list of all the pages and global""" start="00:08:59.160" video="qanda-one" id="subtitle"]] +[[!template text="""is something that you can set and reset once""" start="00:09:02.840" video="qanda-one" id="subtitle"]] +[[!template text="""and you have the whole part street.""" start="00:09:06.580" video="qanda-one" id="subtitle"]] +[[!template text="""So anything that you add in your op-files""" start="00:09:10.840" video="qanda-one" id="subtitle"]] +[[!template text="""could go in global if you want,""" start="00:09:15.040" video="qanda-one" id="subtitle"]] +[[!template text="""but it's not included.""" start="00:09:16.840" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. I think that's also answering the""" start="00:09:20.600" video="qanda-one" id="subtitle"]] +[[!template text="""question. Can this generate a single file""" start="00:09:23.140" video="qanda-one" id="subtitle"]] +[[!template text="""from different sources like blog.org,""" start="00:09:24.840" video="qanda-one" id="subtitle"]] +[[!template text="""videos.org? I think you've just answered""" start="00:09:26.880" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, I think yes.""" start="00:09:30.040" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: this, right? Right. Okay.""" start="00:09:28.820" video="qanda-one" id="subtitle"]] +[[!template text="""So moving on to the other question.""" start="00:09:32.660" video="qanda-one" id="subtitle"]] +[[!template text="""Do you have pre-made templates already along""" start="00:09:34.660" video="qanda-one" id="subtitle"]] +[[!template text="""with the 1.el package?""" start="00:09:37.200" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: So, yes and no. So, The answer is if we go to""" start="00:09:41.680" video="qanda-one" id="subtitle"]] +[[!template text="""1.n, so this file, so the first are blah,""" start="00:09:49.960" video="qanda-one" id="subtitle"]] +[[!template text="""blah, blah. How it works,""" start="00:09:55.520" video="qanda-one" id="subtitle"]] +[[!template text="""so, okay, so you have the 1-hocs,""" start="00:10:01.780" video="qanda-one" id="subtitle"]] +[[!template text="""which is what can translate the org parse""" start="00:10:07.200" video="qanda-one" id="subtitle"]] +[[!template text="""tree into HTML. So this is for the content of""" start="00:10:11.980" video="qanda-one" id="subtitle"]] +[[!template text="""each page. So this is very useful.""" start="00:10:16.260" video="qanda-one" id="subtitle"]] +[[!template text="""Then we have a bunch of functions that help""" start="00:10:18.480" video="qanda-one" id="subtitle"]] +[[!template text="""to render the function,""" start="00:10:22.660" video="qanda-one" id="subtitle"]] +[[!template text="""each page. And you have a bunch of...""" start="00:10:26.040" video="qanda-one" id="subtitle"]] +[[!template text="""Everything that starts with dash default is a""" start="00:10:31.360" video="qanda-one" id="subtitle"]] +[[!template text="""render function. So there's no template,""" start="00:10:33.920" video="qanda-one" id="subtitle"]] +[[!template text="""but each page that if you want,""" start="00:10:37.480" video="qanda-one" id="subtitle"]] +[[!template text="""so that 1, the home, you can use 1 default""" start="00:10:42.240" video="qanda-one" id="subtitle"]] +[[!template text="""home. So, if you want to list the page,""" start="00:10:46.400" video="qanda-one" id="subtitle"]] +[[!template text="""you have that 1. For a page with no table of""" start="00:10:48.740" video="qanda-one" id="subtitle"]] +[[!template text="""content, you use that thing.""" start="00:10:53.220" video="qanda-one" id="subtitle"]] +[[!template text="""And if you go back to be short,""" start="00:10:55.840" video="qanda-one" id="subtitle"]] +[[!template text="""if we go there, I put this like that.""" start="00:10:58.260" video="qanda-one" id="subtitle"]] +[[!template text="""So this that we see here is the first inline""" start="00:11:03.900" video="qanda-one" id="subtitle"]] +[[!template text="""of 1.org. By the way, it doesn't have to be""" start="00:11:09.960" video="qanda-one" id="subtitle"]] +[[!template text="""called 1.org. It's just as you want,""" start="00:11:14.440" video="qanda-one" id="subtitle"]] +[[!template text="""but maybe we can call it.""" start="00:11:17.160" video="qanda-one" id="subtitle"]] +[[!template text="""So default, what was the other 1?""" start="00:11:20.740" video="qanda-one" id="subtitle"]] +[[!template text="""Default with sidebar. Or is it default with""" start="00:11:23.220" video="qanda-one" id="subtitle"]] +[[!template text="""sidebar or default? Yes,""" start="00:11:28.280" video="qanda-one" id="subtitle"]] +[[!template text="""with sidebar. Sidebar,""" start="00:11:30.080" video="qanda-one" id="subtitle"]] +[[!template text="""if it's worked correctly.""" start="00:11:36.400" video="qanda-one" id="subtitle"]] +[[!template text="""Okay, so, okay, so I don't know why the CSS""" start="00:11:39.140" video="qanda-one" id="subtitle"]] +[[!template text="""is not working correctly.""" start="00:11:46.760" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: It's okay. It wouldn't be a live demo without""" start="00:11:50.740" video="qanda-one" id="subtitle"]] +[[!template text="""problems occurring at some point.""" start="00:11:53.860" video="qanda-one" id="subtitle"]] +[[!template text="""Okay.""" start="00:11:55.440" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: But so maybe we can use this 1.""" start="00:11:56.980" video="qanda-one" id="subtitle"]] +[[!template text="""Or we stuck. So we are going to use this 1,""" start="00:12:02.940" video="qanda-one" id="subtitle"]] +[[!template text="""we've talked this 1, but maybe better in this""" start="00:12:06.980" video="qanda-one" id="subtitle"]] +[[!template text="""1 that add something. So we build it again""" start="00:12:16.020" video="qanda-one" id="subtitle"]] +[[!template text="""and now, oh, come on. We have it and we have""" start="00:12:20.340" video="qanda-one" id="subtitle"]] +[[!template text="""the, sorry, if we have just default,""" start="00:12:32.180" video="qanda-one" id="subtitle"]] +[[!template text="""we rebuild and now this is the default layer""" start="00:12:37.820" video="qanda-one" id="subtitle"]] +[[!template text="""that if we do with table of content,""" start="00:12:41.120" video="qanda-one" id="subtitle"]] +[[!template text="""you have it, you have the default content.""" start="00:12:46.060" video="qanda-one" id="subtitle"]] +[[!template text="""So how to change, and they are not template.""" start="00:12:48.620" video="qanda-one" id="subtitle"]] +[[!template text="""They are render functions that takes your""" start="00:12:53.940" video="qanda-one" id="subtitle"]] +[[!template text="""page as a tree and render HTML string.""" start="00:13:00.300" video="qanda-one" id="subtitle"]] +[[!template text="""So you can build any function that you want.""" start="00:13:06.260" video="qanda-one" id="subtitle"]] +[[!template text="""So yes, I think that answers the question.""" start="00:13:10.600" video="qanda-one" id="subtitle"]] +[[!template text="""There is no template like in other systems.""" start="00:13:12.280" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, that makes sense.""" start="00:13:17.780" video="qanda-one" id="subtitle"]] +[[!template text="""We have 2 more questions and then we'll need""" start="00:13:19.020" video="qanda-one" id="subtitle"]] +[[!template text="""to go on a lunch break.""" start="00:13:21.000" video="qanda-one" id="subtitle"]] +[[!template text="""I don't see anyone join the room.""" start="00:13:22.200" video="qanda-one" id="subtitle"]] +[[!template text="""Remember, Tony has said that he would be""" start="00:13:23.740" video="qanda-one" id="subtitle"]] +[[!template text="""willing to answer more questions during the""" start="00:13:25.640" video="qanda-one" id="subtitle"]] +[[!template text="""lunch break, perhaps because it's not lunch""" start="00:13:27.500" video="qanda-one" id="subtitle"]] +[[!template text="""break for you. Are you in Europe right now?""" start="00:13:29.120" video="qanda-one" id="subtitle"]] +[[!template text="""So that's why for us, also for me it's very""" start="00:13:32.360" video="qanda-one" id="subtitle"]] +[[!template text="""dark, but it's not lunch break for us,""" start="00:13:34.600" video="qanda-one" id="subtitle"]] +[[!template text="""it's going to be dinner break soon actually.""" start="00:13:37.660" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes. Yes, exactly, so I'm just,""" start="00:13:31.280" video="qanda-one" id="subtitle"]] +[[!template text="""I'm okay.""" start="00:13:44.020" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, Okay, so moving on to 1 of the last 2""" start="00:13:45.580" video="qanda-one" id="subtitle"]] +[[!template text="""questions. What additional features are there""" start="00:13:49.200" video="qanda-one" id="subtitle"]] +[[!template text="""that you would like to add to 1.EL""" start="00:13:51.680" video="qanda-one" id="subtitle"]] +[[!template text="""in the future?""" start="00:13:53.960" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, there's only 1, which is a full text""" start="00:13:56.120" video="qanda-one" id="subtitle"]] +[[!template text="""search done in a simple way.""" start="00:14:00.560" video="qanda-one" id="subtitle"]] +[[!template text="""So I don't meet what simple way means,""" start="00:14:06.540" video="qanda-one" id="subtitle"]] +[[!template text="""but when I see something complicated,""" start="00:14:10.320" video="qanda-one" id="subtitle"]] +[[!template text="""it doesn't enter in 1 to me.""" start="00:14:12.620" video="qanda-one" id="subtitle"]] +[[!template text="""So, but really, if you see that,""" start="00:14:15.400" video="qanda-one" id="subtitle"]] +[[!template text="""I would like to have some way.""" start="00:14:19.120" video="qanda-one" id="subtitle"]] +[[!template text="""So, this is the documentation and I would""" start="00:14:22.300" video="qanda-one" id="subtitle"]] +[[!template text="""like to have some way to just have another""" start="00:14:25.080" video="qanda-one" id="subtitle"]] +[[!template text="""function because we are not talking about""" start="00:14:27.500" video="qanda-one" id="subtitle"]] +[[!template text="""those websites on the 1.L.""" start="00:14:31.300" video="qanda-one" id="subtitle"]] +[[!template text="""It's not made for a big company or of your""" start="00:14:34.440" video="qanda-one" id="subtitle"]] +[[!template text="""things, it's just for a random guy that have""" start="00:14:39.520" video="qanda-one" id="subtitle"]] +[[!template text="""a blog or a few blogs and If you are a great""" start="00:14:42.440" video="qanda-one" id="subtitle"]] +[[!template text="""blogger, maybe you are going to write 100 or""" start="00:14:46.200" video="qanda-one" id="subtitle"]] +[[!template text="""200 or 300 pages in many years.""" start="00:14:53.040" video="qanda-one" id="subtitle"]] +[[!template text="""So this enter in that category.""" start="00:14:57.240" video="qanda-one" id="subtitle"]] +[[!template text="""So it's small. So I think it can,""" start="00:15:00.060" video="qanda-one" id="subtitle"]] +[[!template text="""we could find a way to make a full text""" start="00:15:04.080" video="qanda-one" id="subtitle"]] +[[!template text="""search. And that is simple.""" start="00:15:07.580" video="qanda-one" id="subtitle"]] +[[!template text="""I don't need to, to go with,""" start="00:15:10.240" video="qanda-one" id="subtitle"]] +[[!template text="""with solution like Algolia that is,""" start="00:15:13.520" video="qanda-one" id="subtitle"]] +[[!template text="""that works super fine.""" start="00:15:16.620" video="qanda-one" id="subtitle"]] +[[!template text="""But this is something that I don't control""" start="00:15:17.900" video="qanda-one" id="subtitle"]] +[[!template text="""and I have to give them the data and I'm not""" start="00:15:21.600" video="qanda-one" id="subtitle"]] +[[!template text="""against that but it's just that I think with""" start="00:15:26.200" video="qanda-one" id="subtitle"]] +[[!template text="""a bit of work something can be done with full""" start="00:15:29.320" video="qanda-one" id="subtitle"]] +[[!template text="""textile. But this is the only thing that I""" start="00:15:32.800" video="qanda-one" id="subtitle"]] +[[!template text="""would like to add.""" start="00:15:35.600" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Very clear answer. Next question.""" start="00:15:38.720" video="qanda-one" id="subtitle"]] +[[!template text="""Can you create navbars on a website and fancy""" start="00:15:41.580" video="qanda-one" id="subtitle"]] +[[!template text="""things like carousels using 1.EL?""" start="00:15:44.380" video="qanda-one" id="subtitle"]] +[[!template text="""Now carousels is just,""" start="00:15:46.800" video="qanda-one" id="subtitle"]] +[[!template text="""I think, a fancy way to display pictures and""" start="00:15:48.260" video="qanda-one" id="subtitle"]] +[[!template text="""please correct me whoever asked this""" start="00:15:51.820" video="qanda-one" id="subtitle"]] +[[!template text="""question. Otherwise I see you taking notes""" start="00:15:53.800" video="qanda-one" id="subtitle"]] +[[!template text="""for the answers, thank you very much.""" start="00:15:55.440" video="qanda-one" id="subtitle"]] +[[!template text="""But if you could specify maybe carousels so""" start="00:15:56.820" video="qanda-one" id="subtitle"]] +[[!template text="""that Tony and I may get a better idea.""" start="00:15:58.740" video="qanda-one" id="subtitle"]] +[[!template text="""But still, first part of the question,""" start="00:16:01.920" video="qanda-one" id="subtitle"]] +[[!template text="""can you create navbars on a website?""" start="00:16:03.340" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes. So if, for instance,""" start="00:16:05.980" video="qanda-one" id="subtitle"]] +[[!template text="""you see there, to me, it's not a,""" start="00:16:10.900" video="qanda-one" id="subtitle"]] +[[!template text="""it's a navbar. So you already have it.""" start="00:16:14.600" video="qanda-one" id="subtitle"]] +[[!template text="""I didn't show that in the talk,""" start="00:16:19.860" video="qanda-one" id="subtitle"]] +[[!template text="""but the CSS for the default function that""" start="00:16:23.080" video="qanda-one" id="subtitle"]] +[[!template text="""works is responsive. So,""" start="00:16:27.440" video="qanda-one" id="subtitle"]] +[[!template text="""out of the box, if you are using something,""" start="00:16:31.720" video="qanda-one" id="subtitle"]] +[[!template text="""you will have an app bar done for you with""" start="00:16:34.600" video="qanda-one" id="subtitle"]] +[[!template text="""all the pages that you have.""" start="00:16:37.540" video="qanda-one" id="subtitle"]] +[[!template text="""So, if we go to install,""" start="00:16:38.680" video="qanda-one" id="subtitle"]] +[[!template text="""we have that. And if we no longer have that,""" start="00:16:40.920" video="qanda-one" id="subtitle"]] +[[!template text="""we have that sidebar there.""" start="00:16:44.900" video="qanda-one" id="subtitle"]] +[[!template text="""And how it's done. So,""" start="00:16:50.220" video="qanda-one" id="subtitle"]] +[[!template text="""the same way. I like simple fields that are""" start="00:16:52.660" video="qanda-one" id="subtitle"]] +[[!template text="""flexible and I didn't want configuration""" start="00:16:56.380" video="qanda-one" id="subtitle"]] +[[!template text="""because if you want to write the code to""" start="00:16:58.860" video="qanda-one" id="subtitle"]] +[[!template text="""change something you just have to write code.""" start="00:17:01.280" video="qanda-one" id="subtitle"]] +[[!template text="""So any function, render function,""" start="00:17:03.480" video="qanda-one" id="subtitle"]] +[[!template text="""is yours. So you can do whatever you want and""" start="00:17:05.859" video="qanda-one" id="subtitle"]] +[[!template text="""you enter the html that you want to render.""" start="00:17:08.760" video="qanda-one" id="subtitle"]] +[[!template text="""So let's see how do we get that navigation""" start="00:17:11.520" video="qanda-one" id="subtitle"]] +[[!template text="""bar that we have when we do that this is a""" start="00:17:17.920" video="qanda-one" id="subtitle"]] +[[!template text="""CSS stuff. But when we click,""" start="00:17:20.920" video="qanda-one" id="subtitle"]] +[[!template text="""this is a JS stuff that,""" start="00:17:23.099" video="qanda-one" id="subtitle"]] +[[!template text="""so let's go to one.l And maybe this is a""" start="00:17:27.040" video="qanda-one" id="subtitle"]] +[[!template text="""sidebar. Why that function because,""" start="00:17:32.320" video="qanda-one" id="subtitle"]] +[[!template text="""okay. So when that function,""" start="00:17:36.300" video="qanda-one" id="subtitle"]] +[[!template text="""so 1 default sidebar is 1 that is used to do""" start="00:17:40.680" video="qanda-one" id="subtitle"]] +[[!template text="""some of the things at some point,""" start="00:17:45.340" video="qanda-one" id="subtitle"]] +[[!template text="""what we return is a JackHTML that take a data""" start="00:17:47.120" video="qanda-one" id="subtitle"]] +[[!template text="""structure and return a string.""" start="00:17:52.120" video="qanda-one" id="subtitle"]] +[[!template text="""So this is your HTML. So you can see at the""" start="00:17:54.340" video="qanda-one" id="subtitle"]] +[[!template text="""top you have the end, then you have the body,""" start="00:17:57.280" video="qanda-one" id="subtitle"]] +[[!template text="""and if we go at the end we can add a script""" start="00:18:01.120" video="qanda-one" id="subtitle"]] +[[!template text="""thing. So what we've seen with the sidebar""" start="00:18:06.080" video="qanda-one" id="subtitle"]] +[[!template text="""it's just that much line of JavaScript.""" start="00:18:08.920" video="qanda-one" id="subtitle"]] +[[!template text="""So this is the only JavaScript that there is""" start="00:18:11.920" video="qanda-one" id="subtitle"]] +[[!template text="""to get what we have here when we do that.""" start="00:18:17.440" video="qanda-one" id="subtitle"]] +[[!template text="""So you can add whatever you want.""" start="00:18:25.360" video="qanda-one" id="subtitle"]] +[[!template text="""It's code and you're the master of that code.""" start="00:18:29.500" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Splendid, great. So to specify the carousel""" start="00:18:35.280" video="qanda-one" id="subtitle"]] +[[!template text="""stuff that we mentioned before,""" start="00:18:38.800" video="qanda-one" id="subtitle"]] +[[!template text="""it's pictures rolling or sliding from 1 to""" start="00:18:39.860" video="qanda-one" id="subtitle"]] +[[!template text="""the other. It's kind of like having a""" start="00:18:42.520" video="qanda-one" id="subtitle"]] +[[!template text="""gallery, imagine a fancy dynamic gallery""" start="00:18:44.620" video="qanda-one" id="subtitle"]] +[[!template text="""where you can scroll pictures.""" start="00:18:47.540" video="qanda-one" id="subtitle"]] +[[!template text="""Do you see what I'm talking about?""" start="00:18:48.740" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, so that things would just be I think""" start="00:18:50.380" video="qanda-one" id="subtitle"]] +[[!template text="""some javascript added somewhere and I can""" start="00:18:53.620" video="qanda-one" id="subtitle"]] +[[!template text="""show you another website.""" start="00:18:57.620" video="qanda-one" id="subtitle"]] +[[!template text="""So for instance if we go because there are""" start="00:18:59.440" video="qanda-one" id="subtitle"]] +[[!template text="""not all the data of the website are not all""" start="00:19:04.200" video="qanda-one" id="subtitle"]] +[[!template text="""public, but the website they are.""" start="00:19:08.160" video="qanda-one" id="subtitle"]] +[[!template text="""So for instance, a mini-buffer,""" start="00:19:10.140" video="qanda-one" id="subtitle"]] +[[!template text="""it's not a carousel, but at the home page,""" start="00:19:14.480" video="qanda-one" id="subtitle"]] +[[!template text="""we can do whatever we want.""" start="00:19:19.140" video="qanda-one" id="subtitle"]] +[[!template text="""Still those pages, still,""" start="00:19:22.660" video="qanda-one" id="subtitle"]] +[[!template text="""this is only 1 file for each page.""" start="00:19:24.560" video="qanda-one" id="subtitle"]] +[[!template text="""So if we click, we can get those things.""" start="00:19:28.980" video="qanda-one" id="subtitle"]] +[[!template text="""It's just that when we,""" start="00:19:31.720" video="qanda-one" id="subtitle"]] +[[!template text="""for the home page for instance,""" start="00:19:33.420" video="qanda-one" id="subtitle"]] +[[!template text="""when we go back on that home page,""" start="00:19:35.860" video="qanda-one" id="subtitle"]] +[[!template text="""we have the list at that point.""" start="00:19:38.160" video="qanda-one" id="subtitle"]] +[[!template text="""So let's go back to that function that we're,""" start="00:19:40.580" video="qanda-one" id="subtitle"]] +[[!template text="""so not that 1, maybe the 1,""" start="00:19:45.540" video="qanda-one" id="subtitle"]] +[[!template text="""1 different, it's better because that 1 is""" start="00:19:47.740" video="qanda-one" id="subtitle"]] +[[!template text="""simpler. So almost nothing happened.""" start="00:19:50.760" video="qanda-one" id="subtitle"]] +[[!template text="""We have the list of the pages.""" start="00:19:53.620" video="qanda-one" id="subtitle"]] +[[!template text="""So I can do whatever I want with that list.""" start="00:19:56.240" video="qanda-one" id="subtitle"]] +[[!template text="""I can loop over and we can see that 1,""" start="00:20:00.360" video="qanda-one" id="subtitle"]] +[[!template text="""that default home list of pages,""" start="00:20:06.340" video="qanda-one" id="subtitle"]] +[[!template text="""so that list of the pages,""" start="00:20:08.600" video="qanda-one" id="subtitle"]] +[[!template text="""and we see where is the list.""" start="00:20:10.260" video="qanda-one" id="subtitle"]] +[[!template text="""Okay, so this is a, here we have a function""" start="00:20:13.200" video="qanda-one" id="subtitle"]] +[[!template text="""that just, we want the pages,""" start="00:20:17.680" video="qanda-one" id="subtitle"]] +[[!template text="""but I think we, but the home page,""" start="00:20:21.100" video="qanda-one" id="subtitle"]] +[[!template text="""and we have that list,""" start="00:20:24.620" video="qanda-one" id="subtitle"]] +[[!template text="""and then here we do that.""" start="00:20:28.300" video="qanda-one" id="subtitle"]] +[[!template text="""And we get something listed,""" start="00:20:37.740" video="qanda-one" id="subtitle"]] +[[!template text="""But then as you control everything that you""" start="00:20:40.680" video="qanda-one" id="subtitle"]] +[[!template text="""do, you can pass any CSS class that you want""" start="00:20:44.060" video="qanda-one" id="subtitle"]] +[[!template text="""to do those things. So,""" start="00:20:51.820" video="qanda-one" id="subtitle"]] +[[!template text="""for instance, that div,""" start="00:20:53.620" video="qanda-one" id="subtitle"]] +[[!template text="""add the class either. Yes,""" start="00:20:55.260" video="qanda-one" id="subtitle"]] +[[!template text="""you can do. I don't remember the question,""" start="00:21:00.660" video="qanda-one" id="subtitle"]] +[[!template text="""but I think I was answering the right 1.""" start="00:21:02.840" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: No, no, you were answering it.""" start="00:21:05.860" video="qanda-one" id="subtitle"]] +[[!template text="""It was about carousels and about having fancy""" start="00:21:07.260" video="qanda-one" id="subtitle"]] +[[!template text="""display for image galleries.""" start="00:21:09.720" video="qanda-one" id="subtitle"]] +[[!template text="""And I think you've answered.""" start="00:21:11.720" video="qanda-one" id="subtitle"]] +[[!template text="""Basically, you just put your JavaScript,""" start="00:21:12.660" video="qanda-one" id="subtitle"]] +[[!template text="""you embed it inside the code.""" start="00:21:14.160" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Exactly.""" start="00:21:16.620" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: So, other question. Would there be an""" start="00:21:18.620" video="qanda-one" id="subtitle"]] +[[!template text="""automated way to convert an existing HTML""" start="00:21:20.220" video="qanda-one" id="subtitle"]] +[[!template text="""document into a JackHTML form?""" start="00:21:22.860" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, so that 1, I don't have 1.""" start="00:21:28.180" video="qanda-one" id="subtitle"]] +[[!template text="""It's another topic, but maybe there are some""" start="00:21:32.200" video="qanda-one" id="subtitle"]] +[[!template text="""kind of session because some people that""" start="00:21:35.660" video="qanda-one" id="subtitle"]] +[[!template text="""know, that are used to Lisp,""" start="00:21:37.940" video="qanda-one" id="subtitle"]] +[[!template text="""common Lisp or Clojure or other,""" start="00:21:43.080" video="qanda-one" id="subtitle"]] +[[!template text="""Jack-html, that function,""" start="00:21:46.300" video="qanda-one" id="subtitle"]] +[[!template text="""is something classic, but I didn't find,""" start="00:21:50.740" video="qanda-one" id="subtitle"]] +[[!template text="""So I wrote it because I didn't find it""" start="00:21:53.680" video="qanda-one" id="subtitle"]] +[[!template text="""already done the way I want for Emacs.""" start="00:22:00.840" video="qanda-one" id="subtitle"]] +[[!template text="""And this is something for E-cup closure.""" start="00:22:06.040" video="qanda-one" id="subtitle"]] +[[!template text="""So really I take, it's not that I take my""" start="00:22:09.640" video="qanda-one" id="subtitle"]] +[[!template text="""impression, just that when you have something""" start="00:22:13.260" video="qanda-one" id="subtitle"]] +[[!template text="""that exists and you look at how it's done.""" start="00:22:15.060" video="qanda-one" id="subtitle"]] +[[!template text="""So you have a eCup for Crusher,""" start="00:22:20.640" video="qanda-one" id="subtitle"]] +[[!template text="""does the same thing that HTML.""" start="00:22:25.160" video="qanda-one" id="subtitle"]] +[[!template text="""It's more that I do a Jack HTML do what eCup""" start="00:22:26.660" video="qanda-one" id="subtitle"]] +[[!template text="""does, but maybe they do it a better way.""" start="00:22:32.440" video="qanda-one" id="subtitle"]] +[[!template text="""So I think maybe in that community,""" start="00:22:37.800" video="qanda-one" id="subtitle"]] +[[!template text="""it might already exist something that go from""" start="00:22:42.320" video="qanda-one" id="subtitle"]] +[[!template text="""HTML to Jack. So you can see,""" start="00:22:46.320" video="qanda-one" id="subtitle"]] +[[!template text="""is it big enough? I will make it big enough.""" start="00:22:53.640" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: It's good enough, don't worry.""" start="00:22:57.626" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: So if you see- So you have the hash HTML and""" start="00:22:56.820" video="qanda-one" id="subtitle"]] +[[!template text="""you see those things. There are things that I""" start="00:23:01.420" video="qanda-one" id="subtitle"]] +[[!template text="""couldn't do, for instance,""" start="00:23:04.200" video="qanda-one" id="subtitle"]] +[[!template text="""for the ID, I couldn't use the hash in the""" start="00:23:05.460" video="qanda-one" id="subtitle"]] +[[!template text="""name of, of how do we name that,""" start="00:23:09.280" video="qanda-one" id="subtitle"]] +[[!template text="""of the keywords, because it's used for""" start="00:23:14.760" video="qanda-one" id="subtitle"]] +[[!template text="""something else in a Emacs Lisp.""" start="00:23:18.480" video="qanda-one" id="subtitle"]] +[[!template text="""So, I use... Anyway, so you see that you have""" start="00:23:21.180" video="qanda-one" id="subtitle"]] +[[!template text="""that things but in Emacs we don't have the""" start="00:23:25.520" video="qanda-one" id="subtitle"]] +[[!template text="""map with that syntax. We have a hash map but""" start="00:23:30.260" video="qanda-one" id="subtitle"]] +[[!template text="""they are not with that syntax and I wanted""" start="00:23:34.960" video="qanda-one" id="subtitle"]] +[[!template text="""that syntax so we use only list and Here we""" start="00:23:37.120" video="qanda-one" id="subtitle"]] +[[!template text="""have an array with a hash map.""" start="00:23:46.080" video="qanda-one" id="subtitle"]] +[[!template text="""So let me just say, so the question was,""" start="00:23:49.200" video="qanda-one" id="subtitle"]] +[[!template text="""does it exist something?""" start="00:23:52.360" video="qanda-one" id="subtitle"]] +[[!template text="""I think not, but it could be built or maybe""" start="00:23:55.240" video="qanda-one" id="subtitle"]] +[[!template text="""exist for E-Cups, you are interested.""" start="00:23:58.680" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, great. I think that answers the""" start="00:24:03.240" video="qanda-one" id="subtitle"]] +[[!template text="""question perfectly. And our final question,""" start="00:24:04.860" video="qanda-one" id="subtitle"]] +[[!template text="""does this or you use any other Emacs packages""" start="00:24:08.440" video="qanda-one" id="subtitle"]] +[[!template text="""for your packages slash website,""" start="00:24:12.240" video="qanda-one" id="subtitle"]] +[[!template text="""example, or publish? Like,""" start="00:24:14.840" video="qanda-one" id="subtitle"]] +[[!template text="""rephrasing the question,""" start="00:24:17.020" video="qanda-one" id="subtitle"]] +[[!template text="""do you use it for your own personal usage or""" start="00:24:17.960" video="qanda-one" id="subtitle"]] +[[!template text="""do you interact with other packages?""" start="00:24:20.820" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm not sure I understand the question.""" start="00:24:24.120" video="qanda-one" id="subtitle"]] +[[!template text="""Can you please repeat the question?""" start="00:24:26.640" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, I will reread it as it is written and I""" start="00:24:29.820" video="qanda-one" id="subtitle"]] +[[!template text="""will leave you interpret it however you want.""" start="00:24:32.460" video="qanda-one" id="subtitle"]] +[[!template text="""Thank you. Does this or you use any other""" start="00:24:34.760" video="qanda-one" id="subtitle"]] +[[!template text="""Emacs packages for your package slash website""" start="00:24:39.220" video="qanda-one" id="subtitle"]] +[[!template text="""like org-publish?""" start="00:24:43.840" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: No, no, no. I don't use nothing.""" start="00:24:46.620" video="qanda-one" id="subtitle"]] +[[!template text="""I just accept dependency of 1.n.""" start="00:24:49.660" video="qanda-one" id="subtitle"]] +[[!template text="""So, we are in 1.n and we go at the top and we""" start="00:24:57.660" video="qanda-one" id="subtitle"]] +[[!template text="""see that those are the dependencies.""" start="00:25:01.000" video="qanda-one" id="subtitle"]] +[[!template text="""I use nothing. So what I do is that I""" start="00:25:04.820" video="qanda-one" id="subtitle"]] +[[!template text="""publish, I just generate the public""" start="00:25:09.520" video="qanda-one" id="subtitle"]] +[[!template text="""directory. So if we go to public,""" start="00:25:12.620" video="qanda-one" id="subtitle"]] +[[!template text="""this 1, no, I don't want this 1.""" start="00:25:16.500" video="qanda-one" id="subtitle"]] +[[!template text="""I want to go to the website of the video.""" start="00:25:18.240" video="qanda-one" id="subtitle"]] +[[!template text="""If we see here, everything is rendered in the""" start="00:25:23.620" video="qanda-one" id="subtitle"]] +[[!template text="""public. Any services, if you use your own""" start="00:25:27.400" video="qanda-one" id="subtitle"]] +[[!template text="""server and you save those files,""" start="00:25:37.380" video="qanda-one" id="subtitle"]] +[[!template text="""you have your website.""" start="00:25:39.280" video="qanda-one" id="subtitle"]] +[[!template text="""So I don't use anything else.""" start="00:25:40.580" video="qanda-one" id="subtitle"]] +[[!template text="""I just git push and I'm using Netlify as a""" start="00:25:42.580" video="qanda-one" id="subtitle"]] +[[!template text="""service to run to save my files,""" start="00:25:49.700" video="qanda-one" id="subtitle"]] +[[!template text="""but you can use anything you want.""" start="00:25:52.580" video="qanda-one" id="subtitle"]] +[[!template text="""Because your website is really what is into a""" start="00:25:55.900" video="qanda-one" id="subtitle"]] +[[!template text="""public. So, this is another,""" start="00:25:58.620" video="qanda-one" id="subtitle"]] +[[!template text="""It's not the concern of 1.L""" start="00:26:01.360" video="qanda-one" id="subtitle"]] +[[!template text="""to answer. I'm not using org.publish.""" start="00:26:04.860" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, great. Well, thank you.""" start="00:26:08.960" video="qanda-one" id="subtitle"]] +[[!template text="""I think the question was also about other""" start="00:26:10.900" video="qanda-one" id="subtitle"]] +[[!template text="""things, but I think If the person wants a""" start="00:26:13.000" video="qanda-one" id="subtitle"]] +[[!template text="""more clear answer to their question,""" start="00:26:16.500" video="qanda-one" id="subtitle"]] +[[!template text="""feel free to clarify the question and Tony""" start="00:26:18.820" video="qanda-one" id="subtitle"]] +[[!template text="""might be able to answer it later on.""" start="00:26:21.260" video="qanda-one" id="subtitle"]] +[[!template text="""Alright Tony, I think that's all the""" start="00:26:22.960" video="qanda-one" id="subtitle"]] +[[!template text="""questions we had. Thank you so much for""" start="00:26:24.220" video="qanda-one" id="subtitle"]] +[[!template text="""taking the time not only to present Adimax""" start="00:26:25.760" video="qanda-one" id="subtitle"]] +[[!template text="""Kant, but also for answering all the""" start="00:26:27.680" video="qanda-one" id="subtitle"]] +[[!template text="""questions people had.""" start="00:26:29.240" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you to everybody participating,""" start="00:26:31.220" video="qanda-one" id="subtitle"]] +[[!template text="""organizing and thank you for all those""" start="00:26:34.540" video="qanda-one" id="subtitle"]] +[[!template text="""questions and you can send me any emails if""" start="00:26:38.000" video="qanda-one" id="subtitle"]] +[[!template text="""you have a question and open the issues if""" start="00:26:42.180" video="qanda-one" id="subtitle"]] +[[!template text="""it's not working the way it should work for""" start="00:26:45.180" video="qanda-one" id="subtitle"]] +[[!template text="""you. Please send me those things.""" start="00:26:47.720" video="qanda-one" id="subtitle"]] +[[!template text="""Thank you, everybody.""" start="00:26:49.840" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: Splendid, thank you. And before,""" start="00:26:51.940" video="qanda-one" id="subtitle"]] +[[!template text="""so right now we're gonna go on a lunch break.""" start="00:26:54.280" video="qanda-one" id="subtitle"]] +[[!template text="""We'll be back in about 40 minutes for the""" start="00:26:56.140" video="qanda-one" id="subtitle"]] +[[!template text="""talk called Emacs Turbocharges My Writing.""" start="00:26:58.660" video="qanda-one" id="subtitle"]] +[[!template text="""And I will not tell you more.""" start="00:27:01.300" video="qanda-one" id="subtitle"]] +[[!template text="""You can look at the talk page to see a little""" start="00:27:02.540" video="qanda-one" id="subtitle"]] +[[!template text="""bit of a synopsis but otherwise keep the""" start="00:27:04.280" video="qanda-one" id="subtitle"]] +[[!template text="""surprise. So have a good lunch or have a good""" start="00:27:06.340" video="qanda-one" id="subtitle"]] +[[!template text="""dinner if you are in dinner-friendly times""" start="00:27:08.900" video="qanda-one" id="subtitle"]] +[[!template text="""and I will see you afterwards.""" start="00:27:11.880" video="qanda-one" id="subtitle"]] +[[!template text="""Thank you again, Tony.""" start="00:27:13.180" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 0]: See you.""" start="00:27:14.860" video="qanda-one" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. Let me just close everything.""" start="00:27:17.960" video="qanda-one" id="subtitle"]] +[[!template text="""All right, got it. OK,""" start="00:27:29.080" video="qanda-one" id="subtitle"]] +[[!template text="""so thank you so much, Tony.""" start="00:27:30.480" video="qanda-one" id="subtitle"]] +[[!template text="""I just had to clear everything up on the""" start="00:27:31.400" video="qanda-one" id="subtitle"]] +[[!template text="""stream. I'm going to need to...""" start="00:27:33.520" video="qanda-one" id="subtitle"]] +[[!template text="""Sorry. I'm going to stop.""" start="00:27:36.160" video="qanda-one" id="subtitle"]] + +Questions or comments? Please e-mail [tony@tonyaldon.com](mailto:tony@tonyaldon.com?subject=Comment%20for%20EmacsConf%202023%20one%3A%20one.el%3A%20the%20static%20site%20generator%20for%20Emacs%20Lisp%20Programmers) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/one-before.md b/2023/info/one-before.md new file mode 100644 index 00000000..04ae447f --- /dev/null +++ b/2023/info/one-before.md @@ -0,0 +1,32 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 23-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="one-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="one-mainVideo" data=""" +00:00.000 Introduction +00:24.000 Documentation +02:02.200 Starting a new project +02:27.400 Building +03:19.760 Side by side +04:32.160 Writing a render function +05:44.680 New page +06:41.720 Linking between pages +08:40.000 CSS +10:23.160 How to write a render function +19:03.200 Rendering content +20:37.160 Rendering CSS + +"""]]<div></div>Duration: 22:18 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/x2yYYWLHQe75FTV8sWiDmy">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="one-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="one-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus"></audio></div><div></div>Duration: 27:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/one-nav.md b/2023/info/one-nav.md new file mode 100644 index 00000000..fe3eb334 --- /dev/null +++ b/2023/info/one-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a> +Next by track: <a href="/2023/talks/writing">Emacs turbo-charges my writing</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/overlay-after.md b/2023/info/overlay-after.md new file mode 100644 index 00000000..7db881e5 --- /dev/null +++ b/2023/info/overlay-after.md @@ -0,0 +1,731 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="overlay-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Hi, I'm Jeff Trull, and today I'm going to talk to you""" start="00:00:00.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""about improving C++ compiler diagnostics""" start="00:00:04.898" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""using overlays and other features from Emacs.""" start="00:00:08.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""First an overview of my talk.""" start="00:00:13.600" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I'm going to cover what overlays are""" start="00:00:15.840" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and how you can use them in code,""" start="00:00:17.657" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""then I'm going to talk about C++""" start="00:00:19.326" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and why its compiler errors can be so onerous.""" start="00:00:21.479" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Finally, we'll take that information""" start="00:00:24.480" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and build a new minor mode""" start="00:00:26.751" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""using overlays and other Emacs features.""" start="00:00:28.448" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Overlays and what they can do""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""First of all, overlays.""" start="00:00:33.560" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""What are they?""" start="00:00:35.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""They are objects consisting of a buffer range""" start="00:00:36.680" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and a set of properties.""" start="00:00:39.125" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""That means that they cover a region in a buffer.""" start="00:00:40.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The properties can be a certain set""" start="00:00:43.120" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""of special property names,""" start="00:00:45.534" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""in which case they can be used to cause""" start="00:00:47.345" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""special effects in the buffer,""" start="00:00:50.289" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but they never change the underlying text.""" start="00:00:52.570" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""You can use them for things like hiding things.""" start="00:00:55.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So, for example, overlays are working right now""" start="00:00:59.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""in this window. `org-present`,""" start="00:01:02.887" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the technology I'm using for this presentation,""" start="00:01:04.661" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""is hiding the asterisk before every headline,""" start="00:01:07.596" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""as well as the things called emphasis markers;""" start="00:01:10.032" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that is, those things that make things look""" start="00:01:12.521" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""monospaced for verbatim, or italic, or bold.""" start="00:01:16.270" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The special characters we use to mark off those sections""" start="00:01:20.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""are also hidden by `org-present` using overlays.""" start="00:01:24.422" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""But those things are still in the buffer""" start="00:01:28.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and they're still visible to code.""" start="00:01:30.602" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So if I run this little snippet of code down here,""" start="00:01:31.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it's going to go up to the headline "Overlays""" start="00:01:34.922" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and what they can do," and it's going to tell us""" start="00:01:37.404" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""what's there in the buffer.""" start="00:01:40.052" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's go down and run this.""" start="00:01:41.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So according to this code, the contents of the buffer""" start="00:01:45.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to the left of the headline is a star in a space,""" start="00:01:48.958" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which means that even though we can't see that star,""" start="00:01:51.991" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it's still there, because it's hidden by an overlay.""" start="00:01:55.205" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And that's kind of the essence of what overlays are.""" start="00:01:58.220" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Simple overlay example - creating an overlay""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Let's do a simple overlay example.""" start="00:02:02.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We have some text on the right here,""" start="00:02:04.780" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which is a famous poem by William Carlos Williams,""" start="00:02:06.720" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which has been the subject of many memes.""" start="00:02:09.340" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's create an overlay that covers it.""" start="00:02:12.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I'll go down here and use this snippet of code here.""" start="00:02:17.860" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We'll go up to the top, and we'll mark everything""" start="00:02:20.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""between `#+BEGIN_VERSE` and `#+END_VERSE`.""" start="00:02:25.919" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""You can see we've created an overlay""" start="00:02:29.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""from position 74 to 224.""" start="00:02:33.277" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Adding properties""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Now we can take that overlay that we already created""" start="00:02:35.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and add a property, in this case a `face` property,""" start="00:02:38.064" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to change the appearance of the text.""" start="00:02:41.212" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""This is a poem, and it's currently using""" start="00:02:43.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""a face that is monospaced,""" start="00:02:46.280" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and so it looks like a computer program,""" start="00:02:48.084" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""even though it's a poem.""" start="00:02:50.492" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I think it would be nicer to use something""" start="00:02:51.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with variable-width font, maybe with some serifs.""" start="00:02:54.586" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So let's give that a try.""" start="00:02:57.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now you can see that the poem looks quite a bit different.""" start="00:03:01.140" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It looks more like what we'd see in a book.""" start="00:03:03.700" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Deleting an overlay""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""We can also delete overlays.""" start="00:03:10.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So I've named this one.""" start="00:03:13.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So we can just go down and run `delete-overlay`""" start="00:03:15.140" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and get rid of it, and it'll go back to""" start="00:03:17.766" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the appearance it had before.""" start="00:03:20.049" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And there it is.""" start="00:03:22.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It's back to normal.""" start="00:03:23.660" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Setting fonts the right way""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Now, if you're interested in changing all of the verses""" start="00:03:24.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""inside an Org Mode file to a different face""" start="00:03:28.474" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or a different font family,""" start="00:03:31.109" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""this isn't the way you'd really do it.""" start="00:03:32.786" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I'll just show you that real quick.""" start="00:03:35.060" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The right way is probably to change the `org-verse` face,""" start="00:03:37.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which is the face used for all of the verse blocks""" start="00:03:43.472" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""inside your Org Mode file.""" start="00:03:48.869" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And so this is how you do it here:""" start="00:03:51.620" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""`face-remap-add-relative`.""" start="00:03:55.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's give it a try.""" start="00:03:56.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It worked!""" start="00:03:58.340" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""More properties""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""There are more advanced things that you can do""" start="00:03:59.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""other than just changing fonts.""" start="00:04:01.806" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There's a whole long list of them in the manual,""" start="00:04:03.300" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but let's talk about the ones we're going to use today.""" start="00:04:05.544" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Visibility""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""You can make text invisible, just like `org-present` did.""" start="00:04:12.580" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The simplest way is to set the `invisible` property to true,""" start="00:04:17.380" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""so here's a code snippet that will do that.""" start="00:04:21.820" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""What we're going to do is""" start="00:04:24.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""go and find the word "plums" inside the poem,""" start="00:04:26.160" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and then we're going to make it invisible""" start="00:04:28.967" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""by creating an overlay that covers it,""" start="00:04:31.285" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and then setting the invisible property to true.""" start="00:04:33.437" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Boom!""" start="00:04:36.820" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It's gone.""" start="00:04:37.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We've eaten the plums.""" start="00:04:38.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Visibility is a huge topic and very complicated.""" start="00:04:39.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There are powerful mechanisms for using it.""" start="00:04:42.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I suggest reading the manual""" start="00:04:44.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""if you'd like to know more about that.""" start="00:04:46.627" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Adding text""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Another thing we can do with properties""" start="00:04:49.780" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""is to add text either before or after an overlay.""" start="00:04:52.118" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Since we've made the word "plums" invisible,""" start="00:04:54.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or anything that you make invisible in the buffer,""" start="00:04:57.348" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""if you add text then afterwards,""" start="00:05:00.575" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it looks like you've replaced the original words""" start="00:05:02.663" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with new words.""" start="00:05:05.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So let's add a property, a `before-string` property,""" start="00:05:08.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to the overlay that we used before""" start="00:05:12.047" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to make it seem as though we're eating cherries""" start="00:05:14.194" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""instead of plums.""" start="00:05:17.138" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Boom!""" start="00:05:18.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There it is.""" start="00:05:19.580" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So that's how you can replace words using overlays.""" start="00:05:22.020" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""You can also have custom properties""" start="00:05:27.820" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that you name and then use yourself.""" start="00:05:29.761" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""For example, you can use it to mark regions in the buffer.""" start="00:05:31.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""You can also use it to add information""" start="00:05:35.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to regions in the buffer for your own tracking""" start="00:05:38.009" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""in a minor mode or something like that, which we will use.""" start="00:05:41.180" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Notes on properties""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Finally, two notes on properties.""" start="00:05:45.380" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We've been talking about overlay properties,""" start="00:05:49.620" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but there's also something called text properties.""" start="00:05:51.951" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Text properties are attached to text in a buffer.""" start="00:05:54.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""When you copy that text, the properties come along with it.""" start="00:05:57.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""If you modify the properties,""" start="00:06:00.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the buffer is considered modified.""" start="00:06:03.057" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Org Mode makes heavy use of text properties,""" start="00:06:05.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""as we can see by running this little code snippet here,""" start="00:06:08.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which is going to tell us the properties""" start="00:06:11.678" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and the string attached""" start="00:06:14.060" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to the "Some poetry" headline on the right.""" start="00:06:16.566" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There's also some controversy regarding performance.""" start="00:06:20.740" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It may be that text properties""" start="00:06:23.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""perform better than overlay properties,""" start="00:06:25.521" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""so do some research""" start="00:06:27.860" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""if you're going to make heavy use of them.""" start="00:06:28.893" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I prefer overlays because they're just easier to use.""" start="00:06:31.060" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Improving C++ compiler output""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""C++ compiler output.""" start="00:06:36.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So my day job is C++ programmer,""" start="00:06:37.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and although I've been an Emacser for many years,""" start="00:06:41.171" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it can be a little bit of a chore dealing with errors.""" start="00:06:46.561" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The error messages that come out of the compiler""" start="00:06:52.860" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""can be pretty hard to understand.""" start="00:06:55.681" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""This has often been a barrier,""" start="00:06:57.580" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""particularly for people who are new to C++.""" start="00:07:00.538" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So let's see what that's like.""" start="00:07:04.640" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I have an example""" start="00:07:09.040" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which is generously supplied by Ben Deane of Intel.""" start="00:07:10.560" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So let's see what it looks like""" start="00:07:14.780" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""when you compile a C++ program""" start="00:07:17.083" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that has a difficult error in it.""" start="00:07:19.314" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Okay.""" start="00:07:24.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Okay.""" start="00:07:28.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So you see we have a lot of fairly verbose messages.""" start="00:07:31.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The most verbose one I think is probably here.""" start="00:07:35.680" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""This one here.""" start="00:07:39.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""These are pretty bad.""" start="00:07:41.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I think there might be bigger ones.""" start="00:07:42.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Oh, yeah. Here we go.""" start="00:07:43.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Here's my favorite one.""" start="00:07:43.721" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""You can see... Let's look for specialization... Basically,""" start="00:07:44.961" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""this whole section of the buffer here,""" start="00:07:51.064" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that is specifying the specific types""" start="00:07:55.179" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that a function template was instantiated with.""" start="00:07:58.229" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And it's a lot there.""" start="00:08:02.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So if you're trying to figure out""" start="00:08:04.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""what's wrong with your program""" start="00:08:05.474" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and you're looking at something like this,""" start="00:08:06.818" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it can be really, really hard to understand.""" start="00:08:08.885" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Okay.""" start="00:08:11.000" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Back to our presentation.""" start="00:08:12.000" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""The problem with C++ error messages""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""So it's often this way in C++""" start="00:08:17.680" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""because we compose types from other types.""" start="00:08:20.064" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""They can be long to begin with,""" start="00:08:23.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but then a couple of other factors come into play.""" start="00:08:26.217" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Many standard class templates have default arguments""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""First of all, we can have default template arguments.""" start="00:08:30.240" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""These are arguments you didn't write,""" start="00:08:33.280" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but that are implicitly there""" start="00:08:35.364" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and can sometimes refer""" start="00:08:37.009" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to the arguments that you did write,""" start="00:08:38.326" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which causes them to get a bit bigger,""" start="00:08:40.301" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""such as these allocator arguments here and here.""" start="00:08:42.441" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Some types are aliases for longer things, too""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Then there are type aliases.""" start="00:08:47.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""For example, `std::string` here expands to""" start="00:08:49.360" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""a type with three template arguments.""" start="00:08:54.015" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So you can imagine, when we combine""" start="00:08:58.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""those two things together,""" start="00:09:01.941" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""our simple vector of maps from strings to ints""" start="00:09:04.734" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""becomes this humongous thing here, which...""" start="00:09:09.764" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's run the comparison.""" start="00:09:14.258" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Yeah.""" start="00:09:18.360" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Reporting type information accurately means long lines""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""So in summary, to properly understand an error""" start="00:09:20.960" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""when you're a C++ programmer""" start="00:09:24.925" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""requires knowing the exact types""" start="00:09:27.371" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that were supplied to your function.""" start="00:09:29.719" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And types are built recursively,""" start="00:09:32.280" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and therefore the types can--""" start="00:09:34.431" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the correct exact name for the type""" start="00:09:36.647" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""can just be really huge""" start="00:09:40.514" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and have many levels and layers to it.""" start="00:09:42.777" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So when I was trying to understand""" start="00:09:46.360" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the things I'd done wrong,""" start="00:09:48.114" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""especially when I was a newer C++ programmer,""" start="00:09:49.467" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but honestly still even recently,""" start="00:09:52.402" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""if I was having a really intractable problem,""" start="00:09:54.571" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I would just copy the entire error message out,""" start="00:09:57.440" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""stick it in the scratch buffer,""" start="00:10:00.124" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and then manually reformat it""" start="00:10:01.736" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""so I could see what it was telling me""" start="00:10:03.650" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I'd actually called the function""" start="00:10:05.564" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or whatever it was with, the exact type.""" start="00:10:07.262" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I had to sit there""" start="00:10:09.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and go through the whole thing.""" start="00:10:11.312" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""But there's a better way.""" start="00:10:13.240" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now, anyway.""" start="00:10:15.240" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Emacs can help - Treat C++ type names as just another kind of balanced expression""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""So what can Emacs do to help us with this problem?""" start="00:10:18.240" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""First of all, if you think about a type name,""" start="00:10:23.960" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it's a lot like what we call S-expressions""" start="00:10:28.871" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or balanced expressions.""" start="00:10:33.080" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Lisp code itself is an S-expression.""" start="00:10:35.480" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It's basically things with parentheses""" start="00:10:38.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and little atoms or symbols in it,""" start="00:10:41.465" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or strings or numbers.""" start="00:10:44.215" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""But parenthesized balanced expressions""" start="00:10:46.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""are things that Emacs was actually built to deal with.""" start="00:10:50.232" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""They were... I found an old manual from 1981,""" start="00:10:55.800" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and the two major modes that they recommended""" start="00:10:58.945" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or that they actually documented in the manual were""" start="00:11:02.160" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""one, assembly language, and two, Lisp.""" start="00:11:05.766" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""They mentioned that there were other modes,""" start="00:11:08.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""but they didn't say anything about them.""" start="00:11:10.653" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So Lisp is something""" start="00:11:12.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with a really long history with Emacs.""" start="00:11:14.626" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Balanced expressions and manipulating them""" start="00:11:17.440" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and doing them efficiently""" start="00:11:19.977" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""is just a thing that Emacs knows how to do,""" start="00:11:21.435" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and Emacs is good at it.""" start="00:11:24.156" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There's just a legacy""" start="00:11:25.640" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""of algorithms and functions for doing it.""" start="00:11:27.706" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So we take types,""" start="00:11:31.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and we take the angle brackets in the types,""" start="00:11:33.183" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and we get the symbols right.""" start="00:11:37.840" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Then we can treat them""" start="00:11:40.840" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""as though they were balanced expressions or S-expressions,""" start="00:11:41.815" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the same kind that Emacs is really good at handling.""" start="00:11:44.313" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Add overlays to improve readability""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Secondly, we can use overlays""" start="00:11:49.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to improve the readability of errors.""" start="00:11:51.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We can take long lines and break and indent them""" start="00:11:55.260" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""using `before-string`s, so the same thing""" start="00:11:58.013" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I used to add "cherries" into the poem.""" start="00:12:00.200" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We can use that to insert new lines""" start="00:12:03.440" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""followed by indentation""" start="00:12:06.612" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and produce a much nicer-looking listing of a type.""" start="00:12:08.726" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We can also use the `invisible` property""" start="00:12:15.160" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to hide unwanted detail.""" start="00:12:19.642" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Create a minor mode that runs during compilation""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Last of all, we can create a minor mode.""" start="00:12:22.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""When we're compiling things in Emacs,""" start="00:12:24.960" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""we often use `compilation-mode`.""" start="00:12:27.855" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""`compilation-mode` allows you to install""" start="00:12:30.140" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""compilation filters that run""" start="00:12:32.098" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""when the compiler is producing output,""" start="00:12:33.554" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and at that time, then, we can add our overlays.""" start="00:12:36.435" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We can also add in minor-mode commands""" start="00:12:39.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that do whatever we want to the keymap.""" start="00:12:42.869" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""In this case, we're going to show and hide""" start="00:12:45.758" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""lower-level details interactively""" start="00:12:48.322" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""so that we can see a simplified version""" start="00:12:50.177" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or a more detailed version of a type, depending on our needs.""" start="00:12:53.907" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Parsing types as balanced expressions""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""First of all, parsing types as balanced expressions.""" start="00:12:59.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We need to be able to quickly locate""" start="00:13:03.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the boundaries and the contents""" start="00:13:05.687" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""of parenthesized expressions,""" start="00:13:07.163" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""or in this case, expressions in angle brackets.""" start="00:13:08.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We use a syntax table inside Emacs""" start="00:13:12.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to allow movement functions like `forward-list`""" start="00:13:14.996" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to jump between matching angle brackets.""" start="00:13:18.801" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""By default, they're just parentheses.""" start="00:13:21.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""First of all, let's look at our syntax table.""" start="00:13:23.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We're going to add here syntax entries""" start="00:13:25.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to handle angle brackets as though they were parentheses.""" start="00:13:29.190" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Then we have a lot of types""" start="00:13:33.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that have colons in them, and those are namespaces in C++.""" start="00:13:37.248" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""By default, Emacs does not recognize them""" start="00:13:42.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""as parts of symbols, so we're going to tell Emacs""" start="00:13:45.767" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that a colon is something called a symbol constituent,""" start="00:13:49.135" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that it can be part of a name.""" start="00:13:52.840" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Once we do that, then we can use our functions""" start="00:13:54.860" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""like `forward-list`, `backward-word`,""" start="00:13:57.614" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""all of the navigation and movement functions that we have""" start="00:13:59.443" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that do things, that do more complicated things""" start="00:14:03.289" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""like S-expressions and so on,""" start="00:14:06.624" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""can be used now with our angle brackets""" start="00:14:08.708" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and inside of our types.""" start="00:14:11.486" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Indent and fill with overlays - Use ancient "pretty printing" algorithms"""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""The next thing we can do is""" start="00:14:16.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""perform indent and fill with overlays.""" start="00:14:18.463" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We're going to use `before-string` properties""" start="00:14:21.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to break lines and create indentation""" start="00:14:23.736" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to make the output look a little better.""" start="00:14:25.631" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Today, we fill mostly text and we indent mostly code.""" start="00:14:28.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We fill text in order to prevent it""" start="00:14:35.320" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""from running off the side of the right margin,""" start="00:14:37.308" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and we indent code to line up syntactic elements.""" start="00:14:39.903" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Back in the day, they had algorithms that could do both.""" start="00:14:43.940" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Those are what we're going to leverage.""" start="00:14:47.080" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Overlays can mimic line breaks and indentation""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""We can use the `before-string` property""" start="00:14:52.260" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to insert a new line in the correct number of spaces""" start="00:14:54.583" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to emulate indentation.""" start="00:14:57.760" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""As a simplified example, here's some code""" start="00:15:00.240" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that will indent 4 upon each open angle bracket.""" start="00:15:03.526" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's give it a try.""" start="00:15:07.280" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Hiding details - Marking depths with overlays""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""The next thing we're going to need to do is hide details.""" start="00:15:14.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So we have nested types, and the user is going to want to""" start="00:15:18.280" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""be able to reveal lower-level or hide lower-level parts""" start="00:15:22.689" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""of the nested type interactively""" start="00:15:27.372" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""once we've already reformatted the error messages.""" start="00:15:30.132" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's see how we can do that using invisible properties.""" start="00:15:35.480" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""The first thing we're going to do is""" start="00:15:40.440" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""mark depths within the type.""" start="00:15:43.993" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""When we're originally analyzing and formatting""" start="00:15:46.680" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and doing the indentation and the line breaks,""" start="00:15:49.329" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""at the same time, we're going to go through""" start="00:15:51.920" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and mark the nested levels inside the type names,""" start="00:15:55.072" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""just as this diagram shows.""" start="00:15:58.818" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So depth 1, for example, will be everything""" start="00:16:00.840" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""inside the first level of angle brackets.""" start="00:16:03.574" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Depth 2 will be everything inside the second level,""" start="00:16:06.120" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and so on.""" start="00:16:09.039" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And then later on, when the users request it,""" start="00:16:09.760" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""we can go and look at the depth that they've selected""" start="00:16:12.071" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and then mark those sections invisible.""" start="00:16:16.304" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's see how that might work.""" start="00:16:19.360" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""First of all, let's delete the overlays""" start="00:16:20.520" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that we already have that created the indentation.""" start="00:16:24.023" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now we're going to go and do that marking""" start="00:16:28.400" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with the custom depth properties here.""" start="00:16:32.420" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""To prove that I didn't pull a fast one,""" start="00:16:35.740" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""let's go and see what `describe-char` tells us""" start="00:16:38.761" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""about the depths inside here.""" start="00:16:42.083" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's start here.""" start="00:16:44.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Okay, so inside this part here, `std::string`,""" start="00:16:46.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""There are two overlays.""" start="00:16:52.820" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""One of them is of depth 1, and the other is of depth 2,""" start="00:16:54.980" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which makes sense, because depth 1 is going to be""" start="00:16:57.781" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""from about here to here,""" start="00:17:00.602" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and depth 2 is going to be from about here to this area.""" start="00:17:02.012" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So it's reasonable that there should be two,""" start="00:17:07.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and that's what we expect.""" start="00:17:10.830" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Hiding to a target depth""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Now that we've marked the nested types with their depths,""" start="00:17:12.660" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""let's experiment with hiding details.""" start="00:17:17.354" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""This fragment of code takes a user-supplied depth,""" start="00:17:21.380" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""in this case 2, and will hide,""" start="00:17:26.774" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""based on those markings""" start="00:17:29.086" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that we've already made on the overlays,""" start="00:17:30.876" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""the custom depth properties.""" start="00:17:33.933" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We'll take those and apply your requested level of detail.""" start="00:17:36.020" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So let's try it out.""" start="00:17:40.020" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Depth 2.""" start="00:17:42.020" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""All right, that hid everything under the `std::map`,""" start="00:17:43.020" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""so the deepest level.""" start="00:17:46.006" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""If we make it 1, we should get a level higher than that.""" start="00:17:47.260" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So now level 1 and below are hidden.""" start="00:17:52.140" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now if we put it back to 3, it should reveal everything.""" start="00:17:54.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""So that's what we're going to use in our minor mode.""" start="00:17:59.660" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""Let's have a demo.""" start="00:18:04.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We're going to revisit the initial example""" start="00:18:05.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with the minor mode installed.""" start="00:18:08.539" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now we're going to have a compilation filter""" start="00:18:10.380" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that will run on every chunk of output""" start="00:18:12.102" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""produced by the compiler.""" start="00:18:13.594" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It's going to add those overlays""" start="00:18:15.780" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with the line breaks and the indentation.""" start="00:18:17.850" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""It's also going to add overlays""" start="00:18:20.420" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that mark up the nested types""" start="00:18:22.207" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with the depths for each region.""" start="00:18:23.881" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's add the hook for `tspew-mode`.""" start="00:18:26.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And now we can compile again.""" start="00:18:31.580" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""All right, we can already see""" start="00:18:38.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that these things are formatted a little bit better""" start="00:18:41.504" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""than they were before.""" start="00:18:47.196" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""They're not all on one line.""" start="00:18:49.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Things are getting kind of lined up here.""" start="00:18:50.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Here's a good example.""" start="00:18:53.580" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And here's our big ugly one from before""" start="00:19:05.620" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""with all the characters in it.""" start="00:19:08.638" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's try hiding some of this information.""" start="00:19:10.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""We'll just slowly decrease the level of detail""" start="00:19:14.500" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and you can see how it works.""" start="00:19:17.432" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Over here, where there's these ellipses""" start="00:19:19.740" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""next to string constant, the "..." there,""" start="00:19:22.334" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""that's where we are starting to hide information""" start="00:19:25.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and go to the next level.""" start="00:19:30.387" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Hiding more, hiding more, hiding more.""" start="00:19:32.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Now we can go back and start adding it back.""" start="00:19:36.460" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""You can see here now we just have about four layers,""" start="00:19:38.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""which is a lot easier to understand.""" start="00:19:42.737" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And if we start understanding what it is""" start="00:19:45.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and we need more detail, we can just increase detail again.""" start="00:19:47.734" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""And every time we increase or decrease detail,""" start="00:19:52.180" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""it reformats so it still stays kind of consolidated""" start="00:19:55.403" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and nice looking.""" start="00:19:58.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's increase it a little bit more.""" start="00:19:59.900" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Okay, so you can see how that worked.""" start="00:20:02.060" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Let's go back to our presentation.""" start="00:20:04.540" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""All right.""" start="00:20:08.340" video="mainVideo-overlay" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]] + +[[!template text="""In conclusion, we saw how we could solve""" start="00:20:10.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""a real problem for C++ programmers""" start="00:20:12.997" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""by combining several Emacs features: overlays,""" start="00:20:15.368" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""compilation mode extensions,""" start="00:20:18.535" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""and balanced expression navigation using syntax tables.""" start="00:20:20.490" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Emacs is often compared unfavorably""" start="00:20:25.700" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""to newer IDEs and editors with slicker user interfaces.""" start="00:20:27.979" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""What Emacs has that they don't is powerful abstractions,""" start="00:20:32.220" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""tons of libraries, and decades of work""" start="00:20:36.387" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""by some of the luminaries in the field of software.""" start="00:20:38.863" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""I think that this project would have been much harder to do""" start="00:20:42.100" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""in a prettier but less powerful environment.""" start="00:20:45.344" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""In short, there's plenty of hope for Emacs.""" start="00:20:48.020" video="mainVideo-overlay" id="subtitle"]] +[[!template text="""Thank you.""" start="00:20:50.860" video="mainVideo-overlay" id="subtitle"]] + + + +Captioner: sachac + +<a name="overlay-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Out here or also you can continue discussing""" start="00:00:02.899" video="qanda-overlay" id="subtitle"]] +[[!template text="""on IRC.""" start="00:00:06.200" video="qanda-overlay" id="subtitle"]] +[[!template text="""So I see 2 questions coming in already on the""" start="00:00:23.200" video="qanda-overlay" id="subtitle"]] +[[!template text="""pad. So the first question is,""" start="00:00:24.400" video="qanda-overlay" id="subtitle"]] +[[!template text="""how did you draw the under braces and over""" start="00:00:26.759" video="qanda-overlay" id="subtitle"]] +[[!template text="""braces? Sorry, Jeff, you're muted on the blue""" start="00:00:38.360" video="qanda-overlay" id="subtitle"]] +[[!template text="""button.""" start="00:00:38.559" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm sorry for some reason I'm seeing""" start="00:00:43.340" video="qanda-overlay" id="subtitle"]] +[[!template text="""everything twice. I'm hearing everything""" start="00:00:45.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""twice. So it's, it's about with about a 5""" start="00:00:48.420" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Probably my stream turned on""" start="00:00:53.400" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: second delay. It's straight Oh,""" start="00:00:57.340" video="qanda-overlay" id="subtitle"]] +[[!template text="""you're right Thank you so much I MPB is""" start="00:01:03.820" video="qanda-overlay" id="subtitle"]] +[[!template text="""showing the the big blue button Okay,""" start="00:01:07.340" video="qanda-overlay" id="subtitle"]] +[[!template text="""sorry everyone. Okay now.""" start="00:01:09.060" video="qanda-overlay" id="subtitle"]] +[[!template text="""I'm together now Let's see How did I draw the""" start="00:01:12.180" video="qanda-overlay" id="subtitle"]] +[[!template text="""over braces and under braces?""" start="00:01:13.140" video="qanda-overlay" id="subtitle"]] +[[!template text="""LaTeX. That is a, that's a,""" start="00:01:17.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""yeah, and a SVG, I think,""" start="00:01:25.020" video="qanda-overlay" id="subtitle"]] +[[!template text="""produced by LaTeX through a separate file.""" start="00:01:29.160" video="qanda-overlay" id="subtitle"]] +[[!template text="""I tried to do like a LaTeX code block and""" start="00:01:31.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""didn't get around to it.""" start="00:01:33.940" video="qanda-overlay" id="subtitle"]] +[[!template text="""Also, the code to produce it in TickSet was""" start="00:01:36.900" video="qanda-overlay" id="subtitle"]] +[[!template text="""really, really long. So I didn't put it in""" start="00:01:39.800" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: The next question is, you've got a nice""" start="00:01:47.300" video="qanda-overlay" id="subtitle"]] +[[!template text="""sounding keyboard. What kind is it?""" start="00:01:48.840" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: the notes. GARY ILLYES-CHAKRABARTYTT I'm so""" start="00:01:50.380" video="qanda-overlay" id="subtitle"]] +[[!template text="""sorry. It is an Ergodox split keyboard for my""" start="00:01:55.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""wrists. Sorry about the noise.""" start="00:01:59.700" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Awesome. Yeah, no worries.""" start="00:02:01.020" video="qanda-overlay" id="subtitle"]] +[[!template text="""I mean, I like to hear it.""" start="00:02:02.220" video="qanda-overlay" id="subtitle"]] +[[!template text="""We like to hear it. I think a lot of us do.""" start="00:02:03.900" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: Do we have anything on IRC?""" start="00:02:07.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""Let's see. Someone's asking for ligatures.""" start="00:02:15.880" video="qanda-overlay" id="subtitle"]] +[[!template text="""Do you have any questions,""" start="00:02:23.420" video="qanda-overlay" id="subtitle"]] +[[!template text="""Ben? Charles?""" start="00:02:26.100" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: I see a bunch on the path that I can read for""" start="00:02:35.280" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, yeah, please do.""" start="00:02:36.980" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: now. Sure. So next question is,""" start="00:02:39.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""do you find that the invasive,""" start="00:02:41.580" video="qanda-overlay" id="subtitle"]] +[[!template text="""quote unquote, 3-formatting interferes with""" start="00:02:44.540" video="qanda-overlay" id="subtitle"]] +[[!template text="""navigation?""" start="00:02:44.680" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, it does. That is true.""" start="00:02:48.700" video="qanda-overlay" id="subtitle"]] +[[!template text="""Let me see. Yeah, it's weird.""" start="00:03:01.300" video="qanda-overlay" id="subtitle"]] +[[!template text="""The good news is that,""" start="00:03:04.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""oh, you know what? The first thing I did,""" start="00:03:06.260" video="qanda-overlay" id="subtitle"]] +[[!template text="""my first attempt at this,""" start="00:03:07.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""I actually made all of the incoming text""" start="00:03:11.140" video="qanda-overlay" id="subtitle"]] +[[!template text="""invisible and just replaced it with my own""" start="00:03:13.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""text. And that was actually a lot worse.""" start="00:03:15.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""The more of the input that is removed or made""" start="00:03:21.420" video="qanda-overlay" id="subtitle"]] +[[!template text="""invisible, the harder the navigation becomes.""" start="00:03:23.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""So the fact that now I'm just inserting line""" start="00:03:26.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""breaks and spaces makes it a lot easier.""" start="00:03:29.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""And I can still search.""" start="00:03:30.540" video="qanda-overlay" id="subtitle"]] +[[!template text="""And when I get to the destination of the""" start="00:03:34.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""search, I'm still in proper normal text.""" start="00:03:38.300" video="qanda-overlay" id="subtitle"]] +[[!template text="""So it got a little better by changing my""" start="00:03:41.980" video="qanda-overlay" id="subtitle"]] +[[!template text="""strategy a bit, but it's still a little bit""" start="00:03:43.740" video="qanda-overlay" id="subtitle"]] +[[!template text="""of a problem. Let's see.""" start="00:03:50.180" video="qanda-overlay" id="subtitle"]] +[[!template text="""I'll go look at the etherpad.""" start="00:03:51.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""Where is it?""" start="00:03:55.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: I can read the questions from etherpad if""" start="00:03:57.260" video="qanda-overlay" id="subtitle"]] +[[!template text="""you'd like me to. And then If at any point""" start="00:04:00.660" video="qanda-overlay" id="subtitle"]] +[[!template text="""you want to take the questions from IRC,""" start="00:04:02.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""then feel free to do that as well.""" start="00:04:04.320" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: I found it. Can you show us the key bindings""" start="00:04:07.240" video="qanda-overlay" id="subtitle"]] +[[!template text="""of your minor map for editing overlays?""" start="00:04:08.940" video="qanda-overlay" id="subtitle"]] +[[!template text="""Well, I have a minor mode key map for""" start="00:04:15.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""increasing or decreasing the level of detail.""" start="00:04:21.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""And the key bindings are like,""" start="00:04:24.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""I can't remember what it is.""" start="00:04:31.840" video="qanda-overlay" id="subtitle"]] +[[!template text="""If you go and you look at the source on""" start="00:04:34.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""GitHub, you can see it there.""" start="00:04:35.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""I forgot what I bound them to.""" start="00:04:37.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""Something that I'm allowed to do.""" start="00:04:40.320" video="qanda-overlay" id="subtitle"]] +[[!template text="""They have restrictions on what key bindings""" start="00:04:45.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""you can make in minor modes.""" start="00:04:47.200" video="qanda-overlay" id="subtitle"]] +[[!template text="""And I carefully followed the directions.""" start="00:04:49.300" video="qanda-overlay" id="subtitle"]] +[[!template text="""I don't remember what it was.""" start="00:04:50.580" video="qanda-overlay" id="subtitle"]] +[[!template text="""It's like Control-C-P or something like that.""" start="00:04:54.220" video="qanda-overlay" id="subtitle"]] +[[!template text="""Or yeah. Sorry. Your examples were with C++""" start="00:05:00.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""if you experiment with any other languages.""" start="00:05:02.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""I haven't. I guess this is just a perennial""" start="00:05:07.460" video="qanda-overlay" id="subtitle"]] +[[!template text="""pain point for C++ programmers.""" start="00:05:10.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""So that's kind of why my,""" start="00:05:13.480" video="qanda-overlay" id="subtitle"]] +[[!template text="""and I am 1, and I guess that's why my focus""" start="00:05:15.680" video="qanda-overlay" id="subtitle"]] +[[!template text="""was there. You probably have to rewrite some""" start="00:05:17.880" video="qanda-overlay" id="subtitle"]] +[[!template text="""of the parsers to use something else.""" start="00:05:20.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""Would it be possible to include overlays in""" start="00:05:24.060" video="qanda-overlay" id="subtitle"]] +[[!template text="""the source file itself?""" start="00:05:25.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""I actually don't understand this question.""" start="00:05:30.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""In the source file itself,""" start="00:05:33.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""there are language modes that do this.""" start="00:05:35.160" video="qanda-overlay" id="subtitle"]] +[[!template text="""No, I'm not certain I understand that""" start="00:05:41.580" video="qanda-overlay" id="subtitle"]] +[[!template text="""question. Maybe you could edit it a little""" start="00:05:43.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""bit more, overlays in the source file.""" start="00:05:45.360" video="qanda-overlay" id="subtitle"]] +[[!template text="""What are your plans for TSP in the future?""" start="00:05:48.840" video="qanda-overlay" id="subtitle"]] +[[!template text="""It's a little fragile.""" start="00:05:54.560" video="qanda-overlay" id="subtitle"]] +[[!template text="""So it might be nice to investigate.""" start="00:06:00.020" video="qanda-overlay" id="subtitle"]] +[[!template text="""I think you can get the compiler to output""" start="00:06:02.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""error messages in different formats,""" start="00:06:04.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""which might be more parsable or the parsing""" start="00:06:07.320" video="qanda-overlay" id="subtitle"]] +[[!template text="""might be more maintainable.""" start="00:06:08.360" video="qanda-overlay" id="subtitle"]] +[[!template text="""That might be an interesting thing to""" start="00:06:10.280" video="qanda-overlay" id="subtitle"]] +[[!template text="""investigate. And the other thing is I have""" start="00:06:15.460" video="qanda-overlay" id="subtitle"]] +[[!template text="""just 1 way of reformatting the output where""" start="00:06:19.200" video="qanda-overlay" id="subtitle"]] +[[!template text="""everything on the same level is vertically""" start="00:06:21.360" video="qanda-overlay" id="subtitle"]] +[[!template text="""aligned. But I think some people might want""" start="00:06:23.920" video="qanda-overlay" id="subtitle"]] +[[!template text="""to make more use of the horizontal space on""" start="00:06:26.920" video="qanda-overlay" id="subtitle"]] +[[!template text="""the screen and take the sort of sibling parts""" start="00:06:30.920" video="qanda-overlay" id="subtitle"]] +[[!template text="""of the type and line them up straight across""" start="00:06:34.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""and take up a little bit less vertical space.""" start="00:06:39.140" video="qanda-overlay" id="subtitle"]] +[[!template text="""Enriched mode. I don't know what enriched""" start="00:06:47.560" video="qanda-overlay" id="subtitle"]] +[[!template text="""mode is. Interesting. Oh,""" start="00:06:51.240" video="qanda-overlay" id="subtitle"]] +[[!template text="""what's my repository link?""" start="00:06:52.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""Let me get that then. I don't know how to""" start="00:06:56.400" video="qanda-overlay" id="subtitle"]] +[[!template text="""format this properly, but it's just troll""" start="00:07:00.620" video="qanda-overlay" id="subtitle"]] +[[!template text="""slash tspute. Yeah, it's on GitHub.""" start="00:07:03.820" video="qanda-overlay" id="subtitle"]] +[[!template text="""Something like that. Let's see.""" start="00:07:14.820" video="qanda-overlay" id="subtitle"]] +[[!template text="""This looks like the Etherpad.""" start="00:07:16.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""It looks like all the Etherpad questions.""" start="00:07:19.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""We have 1 here from Charles.""" start="00:07:22.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""Can overlays work as hypertext so you can""" start="00:07:24.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""link an error message back to the source?""" start="00:07:26.680" video="qanda-overlay" id="subtitle"]] +[[!template text="""Yeah, actually, that's done by default in""" start="00:07:30.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""compilation mode. That's 1 of the features""" start="00:07:32.680" video="qanda-overlay" id="subtitle"]] +[[!template text="""you get, which has been around for literally""" start="00:07:36.160" video="qanda-overlay" id="subtitle"]] +[[!template text="""decades. Oh, yeah. Is it already there?""" start="00:07:41.280" video="qanda-overlay" id="subtitle"]] +[[!template text="""Yes, it's already there.""" start="00:07:42.240" video="qanda-overlay" id="subtitle"]] +[[!template text="""Let's see. Do we have anything on IRC?""" start="00:07:45.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""Let me see. OK, looks like it seems like""" start="00:07:56.680" video="qanda-overlay" id="subtitle"]] +[[!template text="""we've run out of questions.""" start="00:07:58.000" video="qanda-overlay" id="subtitle"]] +[[!template text="""Is that true?""" start="00:07:58.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, it seems so. It seems so,""" start="00:08:04.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""although we still have a couple more minutes,""" start="00:08:06.820" video="qanda-overlay" id="subtitle"]] +[[!template text="""like maybe 3, 4 minutes on the stream.""" start="00:08:09.000" video="qanda-overlay" id="subtitle"]] +[[!template text="""So yeah. And then, of course,""" start="00:08:13.780" video="qanda-overlay" id="subtitle"]] +[[!template text="""once the stream does move on to the next""" start="00:08:15.800" video="qanda-overlay" id="subtitle"]] +[[!template text="""talk. Folks are welcome to join Jeff here on""" start="00:08:19.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""BigBlueButton. If Jeff still has a few more""" start="00:08:22.340" video="qanda-overlay" id="subtitle"]] +[[!template text="""minutes to just chat here or ask questions""" start="00:08:24.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""here, that works as well.""" start="00:08:25.800" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: JEFF CROSSMAN-WILSONEY-PORTMAN Yeah,""" start="00:08:26.920" video="qanda-overlay" id="subtitle"]] +[[!template text="""if anyone's excited about the tool.""" start="00:08:29.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""Are the notes are available online,""" start="00:08:38.460" video="qanda-overlay" id="subtitle"]] +[[!template text="""right? I uploaded an org file that was my""" start="00:08:42.100" video="qanda-overlay" id="subtitle"]] +[[!template text="""talk, and I actually included some""" start="00:08:43.700" video="qanda-overlay" id="subtitle"]] +[[!template text="""references. Like at the end,""" start="00:08:48.900" video="qanda-overlay" id="subtitle"]] +[[!template text="""there's some links and stuff like that.""" start="00:08:50.860" video="qanda-overlay" id="subtitle"]] +[[!template text="""Whenever you see like a underlined thing in""" start="00:08:54.620" video="qanda-overlay" id="subtitle"]] +[[!template text="""my presentation, it's like I was kind of""" start="00:08:56.840" video="qanda-overlay" id="subtitle"]] +[[!template text="""thinking people would have access to the""" start="00:08:58.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""actual presentation itself so they could go""" start="00:09:00.920" video="qanda-overlay" id="subtitle"]] +[[!template text="""and see what it was I was linking to some PDF""" start="00:09:04.640" video="qanda-overlay" id="subtitle"]] +[[!template text="""somewhere. How annoying is this for multiple""" start="00:09:07.540" video="qanda-overlay" id="subtitle"]] +[[!template text="""compilers? It's annoying,""" start="00:09:09.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""Ben. I basically have separate parsers for""" start="00:09:15.620" video="qanda-overlay" id="subtitle"]] +[[!template text="""Clang and GCC, and I'm not supporting MSVC at""" start="00:09:18.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""the moment. So yeah, that's where I do worry""" start="00:09:23.540" video="qanda-overlay" id="subtitle"]] +[[!template text="""about its fragility, about the way I'm kind""" start="00:09:26.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""of parsing these error messages,""" start="00:09:27.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""which are idiosyncratic.""" start="00:09:29.340" video="qanda-overlay" id="subtitle"]] +[[!template text="""Oh, yeah, great. Thank you,""" start="00:09:38.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""Amin. That's good. Should just follow that""" start="00:09:49.060" video="qanda-overlay" id="subtitle"]] +[[!template text="""link, I guess.""" start="00:09:49.600" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, yeah, it's so that you have to scroll""" start="00:09:56.420" video="qanda-overlay" id="subtitle"]] +[[!template text="""down a little bit underneath the video""" start="00:09:59.020" video="qanda-overlay" id="subtitle"]] +[[!template text="""embedding itself. There's timestamps.""" start="00:10:00.460" video="qanda-overlay" id="subtitle"]] +[[!template text="""And then below the timestamps,""" start="00:10:01.880" video="qanda-overlay" id="subtitle"]] +[[!template text="""I see a bunch of links,""" start="00:10:03.240" video="qanda-overlay" id="subtitle"]] +[[!template text="""including 1 that says download.org.""" start="00:10:06.140" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, let's see what that is.""" start="00:10:09.800" video="qanda-overlay" id="subtitle"]] +[[!template text="""Is that the right 1? Yeah,""" start="00:10:13.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""that's it. That's the 1.""" start="00:10:14.780" video="qanda-overlay" id="subtitle"]] +[[!template text="""Yeah, you can also see all of my hacks to Org""" start="00:10:19.280" video="qanda-overlay" id="subtitle"]] +[[!template text="""Present are in there as well.""" start="00:10:20.740" video="qanda-overlay" id="subtitle"]] +[[!template text="""I followed the System Crafters thing and made""" start="00:10:25.760" video="qanda-overlay" id="subtitle"]] +[[!template text="""a bunch of my own modifications.""" start="00:10:27.160" video="qanda-overlay" id="subtitle"]] +[[!template text="""Org Present has this problem where every""" start="00:10:33.120" video="qanda-overlay" id="subtitle"]] +[[!template text="""heading is a slide, which I don't like.""" start="00:10:35.760" video="qanda-overlay" id="subtitle"]] +[[!template text="""I kind of want hierarchy.""" start="00:10:37.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""You know? Oh, no. Sorry.""" start="00:10:41.040" video="qanda-overlay" id="subtitle"]] +[[!template text="""Every level 1 heading is a slide.""" start="00:10:43.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""And I kind of want hierarchy among the""" start="00:10:46.360" video="qanda-overlay" id="subtitle"]] +[[!template text="""slides. And I had to sort of invent it in""" start="00:10:51.440" video="qanda-overlay" id="subtitle"]] +[[!template text="""that system myself through navigation.""" start="00:10:54.320" video="qanda-overlay" id="subtitle"]] +[[!template text="""It looks like things have quieted down.""" start="00:11:03.800" video="qanda-overlay" id="subtitle"]] +[[!template text="""Shall we call it?""" start="00:11:09.520" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, sure. So yeah, thanks again for the""" start="00:11:14.020" video="qanda-overlay" id="subtitle"]] +[[!template text="""great talk, Jeff. And also to the audience""" start="00:11:17.780" video="qanda-overlay" id="subtitle"]] +[[!template text="""for questions and discussions.""" start="00:11:18.960" video="qanda-overlay" id="subtitle"]] +[[!template text="""People are welcome to stay here on BBB if""" start="00:11:21.720" video="qanda-overlay" id="subtitle"]] +[[!template text="""Jeff has time to continue the discussions and""" start="00:11:24.060" video="qanda-overlay" id="subtitle"]] +[[!template text="""ask any questions they might have.""" start="00:11:25.320" video="qanda-overlay" id="subtitle"]] +[[!template text="""Otherwise, yeah, we can wrap it.""" start="00:11:26.820" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure. Thank you so much.""" start="00:11:29.200" video="qanda-overlay" id="subtitle"]] +[[!template text="""And I love this conference.""" start="00:11:30.400" video="qanda-overlay" id="subtitle"]] +[[!template text="""I've been a happy attendee since like 2015 or""" start="00:11:33.900" video="qanda-overlay" id="subtitle"]] +[[!template text="""something. So yeah, it's great.""" start="00:11:36.760" video="qanda-overlay" id="subtitle"]] +[[!template text="""Thank you for your work.""" start="00:11:37.760" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you. Cheers. I mean,""" start="00:11:41.040" video="qanda-overlay" id="subtitle"]] +[[!template text="""in large part, thanks to awesome people like""" start="00:11:43.080" video="qanda-overlay" id="subtitle"]] +[[!template text="""you who give these amazing talks.""" start="00:11:44.280" video="qanda-overlay" id="subtitle"]] +[[!template text="""So Thank you as well.""" start="00:11:45.420" video="qanda-overlay" id="subtitle"]] +[[!template text="""[Speaker 1]: You are currently the only person in this""" start="00:14:30.260" video="qanda-overlay" id="subtitle"]] +[[!template text="""conference.""" start="00:14:30.460" video="qanda-overlay" id="subtitle"]] +[[!template text="""You""" start="00:21:15.260" video="qanda-overlay" id="subtitle"]] +[[!template text="""1""" start="00:21:37.760" video="qanda-overlay" id="subtitle"]] +[[!template text="""1 1 1 1 2 1 2 1 2 1 1 3 4 1 2 4 1 1 3 4 1 1 2""" start="00:22:23.260" video="qanda-overlay" id="subtitle"]] +[[!template text="""3 3 4 1 2 1""" start="00:22:28.100" video="qanda-overlay" id="subtitle"]] +[[!template text="""You""" start="00:24:41.445" video="qanda-overlay" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20overlay%3A%20Improving%20compiler%20diagnostics%20with%20overlays) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/overlay-before.md b/2023/info/overlay-before.md new file mode 100644 index 00000000..03bcd74e --- /dev/null +++ b/2023/info/overlay-before.md @@ -0,0 +1,46 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 21-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="overlay-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="overlay-mainVideo" data=""" +00:00.000 Introduction +00:33.560 Overlays and what they can do +02:02.500 Simple overlay example - creating an overlay +02:35.700 Adding properties +03:10.940 Deleting an overlay +03:24.660 Setting fonts the right way +03:59.540 More properties +04:12.580 Visibility +04:49.780 Adding text +05:27.820 Custom properties +05:45.380 Notes on properties +06:36.100 Improving C++ compiler output +08:17.680 The problem with C++ error messages +08:30.240 Many standard class templates have default arguments +08:47.520 Some types are aliases for longer things, too +09:20.960 Reporting type information accurately means long lines +10:18.240 Emacs can help - Treat C++ type names as just another kind of balanced expression +11:49.320 Add overlays to improve readability +12:22.400 Create a minor mode that runs during compilation +12:59.500 Parsing types as balanced expressions +14:16.100 Indent and fill with overlays - Use ancient "pretty printing" algorithms" +14:52.260 Overlays can mimic line breaks and indentation +15:14.520 Hiding details - Marking depths with overlays +17:12.660 Hiding to a target depth +18:04.900 Demo +20:10.220 Conclusion + +"""]]<div></div>Duration: 20:57 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li><li><a href="https://toobnix.org/w/5fJkawU4R9b1dJq5BcDykx">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="overlay-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="overlay-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus"></audio></div><div></div>Duration: 11:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/overlay-nav.md b/2023/info/overlay-nav.md new file mode 100644 index 00000000..ba04cc37 --- /dev/null +++ b/2023/info/overlay-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a> +Next by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/parallel-after.md b/2023/info/parallel-after.md new file mode 100644 index 00000000..2f390ff8 --- /dev/null +++ b/2023/info/parallel-after.md @@ -0,0 +1,631 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="parallel-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Hi everyone!""" start="00:00:00.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Welcome to our talk on Parallel Text Replacement.""" start="00:00:01.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""My name is Lovro, and I'll be telling you about an""" start="00:00:04.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""interesting problem that my friend Valentino and I""" start="00:00:07.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""set out to solve one afternoon.""" start="00:00:09.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We will describe the problem, take a look at some""" start="00:00:11.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""of the existing work and then present our solution.""" start="00:00:13.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Afterwards, we will show some demos and conclude""" start="00:00:16.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""with a quick overview of the implementation.""" start="00:00:19.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Let's get straight into it!""" start="00:00:21.520" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Problem: Goal""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Here is a problem that most of us have dealt with""" start="00:00:23.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""at some point.""" start="00:00:25.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Assume we have a piece of code such as the following.""" start="00:00:27.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We use a code example here, but in general what we're""" start="00:00:29.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""about to discuss can be applied to any piece of text.""" start="00:00:32.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""After a bit of thinking, we decide that the names of""" start="00:00:35.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the two variables, "foo" and "bar", should actually be""" start="00:00:37.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""swapped.""" start="00:00:39.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""That is, "foo" should be replaced with "bar", and "bar"""" start="00:00:40.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""should be replaced with "foo".""" start="00:00:43.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The question is: what is a good way to achieve this?""" start="00:00:45.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We could perform the edits manually if the code is""" start="00:00:49.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""small enough, and we might even be done reasonably""" start="00:00:51.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""quickly.""" start="00:00:53.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""However, consider two things.""" start="00:00:54.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Imagine the usual case where there's just too much""" start="00:00:56.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""code to edit by hand.""" start="00:00:58.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We have no other option than to automate the task.""" start="00:01:00.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""More importantly though, we have a whole programmable""" start="00:01:03.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""text editor right at our fingertips.""" start="00:01:06.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We should object to doing things that the computer""" start="00:01:08.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""can do for us.""" start="00:01:10.280" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Problem: Naive Multi-pass""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""So, one way to automate it is by using our old friend""" start="00:01:12.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""query-replace (M-%) multiple times in a sequence.""" start="00:01:15.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We first do a pass where we replace "foo" with "bar",""" start="00:01:19.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""then we do another pass where we replace "bar" with "foo".""" start="00:01:22.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""But that's clearly not right.""" start="00:01:25.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We all know that this naive multi-pass approach""" start="00:01:26.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""doesn't work because it results in interference""" start="00:01:29.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""between the two replacements.""" start="00:01:31.560" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Problem: Clever Multi-pass""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Instead, we have to be a bit more clever.""" start="00:01:34.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We should first replace "foo" with a temporary string,""" start="00:01:36.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""in this case "oof", that we will call a "token".""" start="00:01:39.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""To avoid interference, we must be careful to ensure""" start="00:01:42.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""that the token does not contain whatever we're about""" start="00:01:45.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to replace next.""" start="00:01:48.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Then we do a second pass to replace "bar" with "foo",""" start="00:01:49.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and finally a third pass to replace the token with "bar".""" start="00:01:52.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This gives us the result we want.""" start="00:01:56.080" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Problem: Terminology""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Putting the implementation aside for a moment, this style""" start="00:01:57.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""of text replacement, where we replace multiple sources""" start="00:02:01.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""with their targets, without running into interference""" start="00:02:05.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""issues between replacement pairs, is what we call""" start="00:02:09.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""a "parallel replacement".""" start="00:02:11.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This is the essence of the problem we're trying to solve.""" start="00:02:12.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The examples with swapping that we've shown so far""" start="00:02:16.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""are really just one of the many use cases that are""" start="00:02:18.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""supported by a general parallel replacement utility.""" start="00:02:21.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""To avoid confusion, let us clarify that the word "parallel"""" start="00:02:25.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""is not in reference to hardware parallelization, but""" start="00:02:28.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""rather comes from analogy with the Lisp let operator,""" start="00:02:31.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""where the bindings of variables are performed in parallel,""" start="00:02:34.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""rather than sequentially as in let*.""" start="00:02:38.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Parallel in this context means that none of the bindings""" start="00:02:40.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""are in scope within any of the initial value forms.""" start="00:02:43.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""In other words, just like a let's initialization form""" start="00:02:46.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""cannot refer to any of the earlier bindings, a""" start="00:02:50.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replacement pair's source should not be able to replace""" start="00:02:53.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the previously substituted targets of any other pair.""" start="00:02:56.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This is what we mean by "no interference".""" start="00:03:00.200" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Problem: Scaling Multi-pass""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""However, manually invoking multiple carefully chosen""" start="00:03:04.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""query-replace commands gets old very quickly.""" start="00:03:08.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Say we scaled up the problem and wanted to perform n""" start="00:03:11.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""swaps instead of just two, e.g. to swap, or rather,""" start="00:03:14.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""rotate, "foo" to "bar", "bar" to "baz", "baz" to "quux"""" start="00:03:18.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and "quux" to "foo".""" start="00:03:22.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We would first have to perform n - 1 additional""" start="00:03:23.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replacements to introduce the necessary tokens,""" start="00:03:26.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""effectively doubling the number of steps.""" start="00:03:29.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Even if we tried to automate this, think about what""" start="00:03:32.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""tokens the code would have to generate if we had no""" start="00:03:34.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""prior knowledge of the replacement pairs given by the""" start="00:03:37.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""user.""" start="00:03:40.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We would have to program defensively and use long""" start="00:03:41.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""randomly-generated strings that, one, hopefully do""" start="00:03:44.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""not interfere with any of the replacement pairs,""" start="00:03:47.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and two, might slow down the search if they're overly long.""" start="00:03:50.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Can we do better?""" start="00:03:53.480" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Solution: Single-pass""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Yes we can!""" start="00:03:55.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We can actually perform just a single pass.""" start="00:03:56.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The trick is to alternate between the replacement""" start="00:03:59.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""pairs, replacing whichever source occurs the earliest,""" start="00:04:02.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and making sure to continue scanning after the end""" start="00:04:06.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""of the substituted target in order to avoid interference.""" start="00:04:08.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This interleaving of replacements is not something""" start="00:04:12.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""that's easy to do by hand with query-replace.""" start="00:04:14.520" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Solution: Existing""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Since this is Emacs we're talking about, of course""" start="00:04:18.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""there already exist solutions that implement this idea.""" start="00:04:20.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Here are few that we could find.""" start="00:04:23.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The EmacsWiki has a page dedicated to this problem.""" start="00:04:25.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Stack Overflow has an old post where a couple of""" start="00:04:28.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""users provided their solutions.""" start="00:04:31.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Mastering Emacs also gives a method along with other""" start="00:04:33.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""interesting query-replace-regexp (C-M-%) patterns.""" start="00:04:36.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""More recently, Tony Zorman made a blogpost providing""" start="00:04:39.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""a solution with an interface based on query-replace.""" start="00:04:42.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""I encourage you to take a look at these solutions if""" start="00:04:45.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""you're interested in the details.""" start="00:04:47.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""But while a step in the right direction, these solutions""" start="00:04:50.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""are not satisfactory because they all lack one or""" start="00:04:53.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""more of the following.""" start="00:04:55.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""One, they are not completely automated and require""" start="00:04:56.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the user to come up with a relatively complicated""" start="00:05:00.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and verbose query-replace-regexp invocation.""" start="00:05:02.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Two, they are restricted to performing only 2-element""" start="00:05:06.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""swaps rather than general parallel replacements.""" start="00:05:09.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Three, they don't provide any sort of interactivity""" start="00:05:12.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""during replacement and instead perform it in one shot.""" start="00:05:15.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Four, they don't attempt to integrate with the familiar""" start="00:05:18.620" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""query-replace interface, which supports skipping, undo,""" start="00:05:21.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""history and more advanced features like Lisp expressions""" start="00:05:25.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and recursive query edits.""" start="00:05:28.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Most importantly however, five, none of them were""" start="00:05:30.700" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""designed with regular expressions in mind and instead""" start="00:05:33.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""only ever consider literal strings.""" start="00:05:36.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""In fact, the only one that comes close is the""" start="00:05:39.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""half-automated solution that invokes query-replace-regexp""" start="00:05:43.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""with a specially crafted replacement.""" start="00:05:46.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""As an example, here's how you would use this technique""" start="00:05:48.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to perform a 3-element parallel regex replacement.""" start="00:05:51.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""It uses the backslash-comma Lisp expression feature""" start="00:05:54.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""in order to choose the appropriate target to substitute.""" start="00:05:57.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Aside from being very clumsy and tedious to write out,""" start="00:06:01.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""this approach makes it really hard to use more complex""" start="00:06:03.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""regular expressions that make use of capture groups""" start="00:06:06.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""themselves.""" start="00:06:09.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This was the biggest limitation that we wanted""" start="00:06:10.800" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to get rid of and the main motivation for our work.""" start="00:06:12.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""So, as an alternative to the existing zoo of 80% solutions,""" start="00:06:15.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""we aim to provide a 100% solution, one that handles""" start="00:06:19.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""regexes and consolidates all of the existing ideas""" start="00:06:24.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""into a single package.""" start="00:06:27.120" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Solution: query-replace-parallel""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""We call it query-replace-parallel.""" start="00:06:29.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The package is free and open-source and can currently""" start="00:06:31.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""be found on GitHub under hokomo/query-replace-parallel.""" start="00:06:34.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The name is not yet finalized and we're open to any""" start="00:06:37.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""suggestions.""" start="00:06:40.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We hope to get it published on an Elisp""" start="00:06:41.503" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""package archive in the near future, but for now you""" start="00:06:43.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""can just download and load the main Elisp file manually.""" start="00:06:45.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""With all of that said, let's go through a few demos""" start="00:06:48.900" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to illustrate some use cases and see how to use the package.""" start="00:06:51.400" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Demonstration: Swap""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Our first demo is a simple swap, like the one we""" start="00:06:55.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""showed at the beginning of the presentation.""" start="00:06:57.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This chunk of text is actually one of the tests""" start="00:06:59.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""from our package's code.""" start="00:07:02.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Assuming we have loaded the package, we can execute""" start="00:07:03.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the query-replace-parallel command, a parallel version""" start="00:07:06.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""of the standard query-replace.""" start="00:07:09.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This command works with literal strings and will""" start="00:07:11.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""ask for each source and target in turn.""" start="00:07:14.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Our goal is to replace "foo" with "bar"""" start="00:07:16.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and "bar" with "foo".""" start="00:07:21.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""After inputting our replacements, we terminate the""" start="00:07:24.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""prompt by pressing enter with empty input.""" start="00:07:27.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""At this point, everything functions the same as in""" start="00:07:29.860" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""a standard query-replace invocation.""" start="00:07:32.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The echo area shows the match and the replacement""" start="00:07:35.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""we're about to make.""" start="00:07:37.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We can perform replacements,""" start="00:07:38.703" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""undo them,""" start="00:07:43.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""skip them,""" start="00:07:46.503" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""execute them until the end,""" start="00:07:49.203" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and so on.""" start="00:07:50.240" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Demonstration: LaTeX""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""The second demo shows our first regex use case.""" start="00:07:53.970" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Imagine we have the following LaTeX code.""" start="00:07:56.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We realize that we haven't been completely consistent""" start="00:07:58.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""in our use and naming of macros, so we decide to""" start="00:08:01.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""fix the problem.""" start="00:08:04.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This time we execute query-replace-parallel-regexp""" start="00:08:05.536" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""because we want to work with regex instead of literal""" start="00:08:08.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""strings.""" start="00:08:11.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We want to achieve two things.""" start="00:08:12.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""First, we want to wrap all usages of the variable n""" start="00:08:13.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""with the natvar macro.""" start="00:08:16.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Using the backslash-less-than and blackslash-greater-than""" start="00:08:18.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""constructs allows us to only match letters n not""" start="00:08:21.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""appearing as part of a larger word.""" start="00:08:23.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Second, we want to rename natvar to intvar because""" start="00:08:25.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the variables a, b and c are integers and not natural""" start="00:08:29.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""numbers.""" start="00:08:32.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We enter empty input to terminate the prompt and can""" start="00:08:33.300" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""now perform the replacements.""" start="00:08:35.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""There we go, the fixes are done and we didn't have""" start="00:08:42.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to think about in which order to apply them.""" start="00:08:44.480" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Demonstration: Regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""We now take a look at a more complicated regex""" start="00:08:48.700" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""example to demonstrate that even advanced query-replace""" start="00:08:51.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""features are supported.""" start="00:08:53.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Each "foo" and "bar" in this example is followed by""" start="00:08:55.100" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""a number.""" start="00:08:57.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The goal is to not only swap "foo" and "bar", but""" start="00:08:58.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""also increase or decrease the corresponding number.""" start="00:09:01.380" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We first match "foo" and capture the number that""" start="00:09:03.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""follows it.""" start="00:09:06.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""For the target, we make use of the backslash-comma""" start="00:09:07.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Lisp expression feature in order to replace the""" start="00:09:10.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""match with "bar" followed by the number's successor.""" start="00:09:12.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We do the same thing for "bar", except that we""" start="00:09:15.540" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replace the number with its predecessor.""" start="00:09:17.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Performing the replacements, we can see how each""" start="00:09:27.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""number is incremented or decremented appropriately.""" start="00:09:29.120" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Demonstration: Order""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""We haven't covered it explicitly so some of you may""" start="00:09:36.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""be wondering how parallel replacement deals with""" start="00:09:38.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""overlapping matches and whether the order of the""" start="00:09:41.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replacement pairs is significant.""" start="00:09:43.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This demo will clarify the exact behavior.""" start="00:09:45.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The first example has the sources "watch" and "stopwatch".""" start="00:09:48.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Conceptually, the matches overlap, but the rule is""" start="00:09:57.500" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""that matches are always processed earliest first,""" start="00:10:00.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""regardless of their length or the ordering of the pairs.""" start="00:10:03.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Therefore it is "stopwatch" that gets replaced,""" start="00:10:06.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and not its substring "watch".""" start="00:10:09.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The second example uses the sources "watch" and "watchword".""" start="00:10:16.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Both of the matches now conceptually start at the same""" start="00:10:19.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""position.""" start="00:10:22.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""In situations like these the order of the pairs does""" start="00:10:23.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""matter, and ties are broken by prefering the pair that""" start="00:10:26.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""was entered first, which is behavior that is inherited""" start="00:10:29.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""from the Elisp regex engine.""" start="00:10:32.280" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""So, the substring "watch" in "watchword" is what gets""" start="00:10:34.460" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replaced in this case.""" start="00:10:37.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Situations where the order of the pairs is significant""" start="00:10:39.460" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""are not very common however, so the user generally""" start="00:10:41.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""doesn't have to worry about this edge case.""" start="00:10:44.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The order only matters when two or more sources""" start="00:10:46.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""share the same prefix, as in this example.""" start="00:10:49.960" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Demonstration: Fun""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""The final demo tests the limits of the package and""" start="00:10:54.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""shows that it fully integrates with query-replace.""" start="00:10:56.960" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""It is really just for fun and can even serve as a""" start="00:10:59.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""small Emacs brainteaser.""" start="00:11:03.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""See if you can keep up!""" start="00:11:04.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We open a directory and enter Writable Dired mode""" start="00:11:06.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""in order to rename the directories "foo" and "bar".""" start="00:11:09.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Instead of doing it quickly by hand, we decide to""" start="00:11:11.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""show off and use query-replace-parallel-regexp.""" start="00:11:14.760" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We enter our pairs and make use of the""" start="00:11:17.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""backslash-question-mark query edit feature.""" start="00:11:20.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Now whenever we perform a replacement, the query""" start="00:11:25.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""edit makes Emacs stop and prompt us for additional""" start="00:11:27.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""input to use as the target.""" start="00:11:30.840" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We confirm the renames and now enter the "bar-lib"""" start="00:11:36.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""directory in order to perform the same kind of""" start="00:11:39.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""replacement on "baz" and "quux".""" start="00:11:42.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Rather than save time, we decide to be extra lazy""" start="00:11:44.500" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and take the long route.""" start="00:11:47.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We recall the first pair and initiate a recursive""" start="00:11:48.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""invocation of query-replace-parallel-regexp.""" start="00:11:52.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We are now replacing the replacement.""" start="00:11:54.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We apply our fixes and then do the same thing again""" start="00:12:01.020" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""with the second pair.""" start="00:12:04.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Recall and recurse.""" start="00:12:05.970" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We confirm the prompt and finally rename our directories.""" start="00:12:16.300" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Wow, that really paid off.""" start="00:12:25.360" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""Implementation""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""Before we finish, a few quick words about the""" start="00:12:29.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""implementation for the curious.""" start="00:12:31.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Both query-replace-parallel and query-replace-parallel-regexp""" start="00:12:33.300" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""delegate to the complex perform-replace function""" start="00:12:36.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""which is the workhorse of query-replace's interactive""" start="00:12:39.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""mechanism.""" start="00:12:41.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The way we achieve multiple interleaved replacements""" start="00:12:43.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""is by providing perform-replace with a big "matcher regex"""" start="00:12:45.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and a special replacement function.""" start="00:12:49.120" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Essentially, a complex parallel replacement like this""" start="00:12:50.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""is transformed into a standard replacement like this.""" start="00:12:54.400" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This is similar to the trick shown earlier in the""" start="00:12:57.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""presentation.""" start="00:13:00.200" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Each source is put in its own capture group to allow""" start="00:13:00.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""the replacement function to determine which one matched""" start="00:13:03.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""and return the appropriate target.""" start="00:13:06.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""However, we now take care to support arbitrary""" start="00:13:08.980" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""regular expressions as sources.""" start="00:13:11.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We achieve this by converting each source regex into""" start="00:13:13.480" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""an equivalent one for which we can guarantee that its""" start="00:13:17.080" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""capture groups will not clash with our matcher regex.""" start="00:13:19.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Information about this conversion is stored, and""" start="00:13:22.920" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""once the replacement function is called it has""" start="00:13:26.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""enough data to apply the replacement from the""" start="00:13:28.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""viewpoint of the original regex.""" start="00:13:30.360" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""The regex transformation is reliable because it""" start="00:13:32.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""uses the rx library, allowing us to treat regexes""" start="00:13:35.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""as s-expressions and avoid any nasty manual parsing.""" start="00:13:38.520" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""In fact, rx itself is based on one of Olin Shivers'""" start="00:13:42.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""100% solutions:""" start="00:13:46.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""SRE, or the S-expression regex notation.""" start="00:13:48.436" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""We all stand on the shoulders of many giants, so""" start="00:13:51.320" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""let's strive to design good solutions that we can""" start="00:13:54.440" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""all benefit from, many years into the future!""" start="00:13:56.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Finally, because query-replace's core is not completely""" start="00:13:59.240" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""customizable, we did have to sprinkle in some advice""" start="00:14:03.000" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""to get certain things working.""" start="00:14:06.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""This concerns only minor cosmetic fixes and not the""" start="00:14:07.600" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""core replacement functionality, but we have nontheless""" start="00:14:11.160" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""tried to do it in the simplest and least intrusive way""" start="00:14:14.040" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""possible.""" start="00:14:16.680" video="mainVideo-parallel" id="subtitle"]] + +[[!template new="1" text="""End""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]] + +[[!template text="""In conclusion, go download and play with the package.""" start="00:14:18.740" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Even if you're not performing overlapping replacements,""" start="00:14:21.680" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""you can still use query-replace-parallel for the""" start="00:14:24.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""peace of mind knowing that things won't go wrong if""" start="00:14:26.880" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""you perform more than one replacement at a time.""" start="00:14:29.720" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Feel free to let us know about any interesting or""" start="00:14:32.460" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""crazy use cases you might come up with, as well as""" start="00:14:34.640" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""improvements or bugs that make it only a 99% solution.""" start="00:14:37.560" video="mainVideo-parallel" id="subtitle"]] +[[!template text="""Thanks for listening and have a great EmacsConf!""" start="00:14:40.640" video="mainVideo-parallel" id="subtitle"]] + +<a name="parallel-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: And I think we are live.""" start="00:00:08.620" video="qanda-parallel" id="subtitle"]] +[[!template text="""Hello again, everyone.""" start="00:00:09.620" video="qanda-parallel" id="subtitle"]] +[[!template text="""And hi, Lovro. How are you doing?""" start="00:00:10.940" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Just a second. Should I join the other room?""" start="00:00:15.339" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, no, no, you can stay here.""" start="00:00:18.460" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: I can stay in the backstage.""" start="00:00:20.860" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Everything is fine. I don't think you are""" start="00:00:24.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""technically in the backstage right now you're""" start="00:00:25.520" video="qanda-parallel" id="subtitle"]] +[[!template text="""just in Big Blue Button with us.""" start="00:00:26.750" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh thanks. Oh because I have 2 of them open I""" start="00:00:30.040" video="qanda-parallel" id="subtitle"]] +[[!template text="""thought there were 2 different rooms.""" start="00:00:30.920" video="qanda-parallel" id="subtitle"]] +[[!template text="""1 is the backstage and the other,""" start="00:00:32.720" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: whichever, I can hear you and so can the""" start="00:00:38.239" video="qanda-parallel" id="subtitle"]] +[[!template text="""stream, so don't worry too much about which""" start="00:00:39.840" video="qanda-parallel" id="subtitle"]] +[[!template text="""is the backstage and which is the front page.""" start="00:00:41.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: I have no idea. Well, great,""" start="00:00:41.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""great. Okay, yeah. Yeah,""" start="00:00:43.660" video="qanda-parallel" id="subtitle"]] +[[!template text="""I'm doing great, just to answer your""" start="00:00:45.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""question.""" start="00:00:45.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, great, great, Okay,""" start="00:00:47.379" video="qanda-parallel" id="subtitle"]] +[[!template text="""well splendid. So, I've pasted a link again""" start="00:00:49.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""on IRC if you want to ask your questions,""" start="00:00:51.520" video="qanda-parallel" id="subtitle"]] +[[!template text="""and I'd invite you to do so,""" start="00:00:53.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""because we have about 9 minutes of laborious""" start="00:00:54.620" video="qanda-parallel" id="subtitle"]] +[[!template text="""time to answer as many of them as possible.""" start="00:00:56.580" video="qanda-parallel" id="subtitle"]] +[[!template text="""And I'm going to start with the first 1.""" start="00:00:58.360" video="qanda-parallel" id="subtitle"]] +[[!template text="""This looks great and was very well-presented.""" start="00:01:01.100" video="qanda-parallel" id="subtitle"]] +[[!template text="""Do you have plans to upstream this""" start="00:01:03.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""functionality into Emacs?""" start="00:01:04.239" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: That's a good idea. That's something we""" start="00:01:08.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""thought about as well.""" start="00:01:08.860" video="qanda-parallel" id="subtitle"]] +[[!template text="""Currently, we haven't really contacted anyone""" start="00:01:11.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""to do this. Also, the current implementation,""" start="00:01:16.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""so as I mentioned in the presentation towards""" start="00:01:19.760" video="qanda-parallel" id="subtitle"]] +[[!template text="""the end, so we use a little bit of advice to""" start="00:01:22.120" video="qanda-parallel" id="subtitle"]] +[[!template text="""sort of patch some functionality of query""" start="00:01:24.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""replace because not everything was easy to""" start="00:01:26.479" video="qanda-parallel" id="subtitle"]] +[[!template text="""implement. The core functionality luckily""" start="00:01:28.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""was, But there's a couple of fixes we need to""" start="00:01:32.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""apply to the message function in order to""" start="00:01:34.200" video="qanda-parallel" id="subtitle"]] +[[!template text="""display a nice message in the echo buffer""" start="00:01:36.380" video="qanda-parallel" id="subtitle"]] +[[!template text="""because this doesn't happen on its own when""" start="00:01:39.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""we're using this trick with this big regex""" start="00:01:41.100" video="qanda-parallel" id="subtitle"]] +[[!template text="""and whatnot. So I don't think that the code""" start="00:01:45.360" video="qanda-parallel" id="subtitle"]] +[[!template text="""as it is would be upstreamable.""" start="00:01:47.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""I think probably if we wanted to upstream it,""" start="00:01:50.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""we would have to do some proper work on""" start="00:01:54.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""refactoring query place itself in order to""" start="00:01:57.180" video="qanda-parallel" id="subtitle"]] +[[!template text="""integrate all of this functionality just""" start="00:01:58.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""directly without any patching left and right.""" start="00:02:01.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""But yeah, definitely something I've given""" start="00:02:05.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""some thought, but so far no progress on it.""" start="00:02:10.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""I haven't actually started doing anything""" start="00:02:11.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""about it.""" start="00:02:12.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, So I'm curious now,""" start="00:02:17.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""you developed the feature and then you moved""" start="00:02:19.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""on to the presentation or did you want to do""" start="00:02:21.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""a presentation for EmacsConf and then you""" start="00:02:23.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""worked on something like this?""" start="00:02:24.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""Which was it first, the chicken or the egg?""" start="00:02:26.360" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it was the former.""" start="00:02:28.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""So this is a problem I've been aware of for,""" start="00:02:31.320" video="qanda-parallel" id="subtitle"]] +[[!template text="""I mean, probably a couple of years.""" start="00:02:33.340" video="qanda-parallel" id="subtitle"]] +[[!template text="""And, you know, I talked to my friend""" start="00:02:35.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""Valentino about it and we had like a little""" start="00:02:37.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""discussion, you know, how would we do this?""" start="00:02:39.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""And then I remember back when I was""" start="00:02:41.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""researching about this problem and the""" start="00:02:44.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""various Emacs Lisp solutions,""" start="00:02:45.100" video="qanda-parallel" id="subtitle"]] +[[!template text="""all I could find were these solutions that""" start="00:02:47.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""would, you know, just shy away from""" start="00:02:49.400" video="qanda-parallel" id="subtitle"]] +[[!template text="""implementing the RegEx case,""" start="00:02:50.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""which is a really complicated 1.""" start="00:02:52.340" video="qanda-parallel" id="subtitle"]] +[[!template text="""And, after some discussion,""" start="00:02:54.720" video="qanda-parallel" id="subtitle"]] +[[!template text="""my friend and I decided,""" start="00:02:56.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""okay, what the hell? Let's,""" start="00:02:58.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""let's try and implement this.""" start="00:02:59.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""How hard can it be? And yeah,""" start="00:03:01.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""basically in 1 afternoon,""" start="00:03:03.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""the idea, our little trick and the whole""" start="00:03:06.300" video="qanda-parallel" id="subtitle"]] +[[!template text="""implementation was born.""" start="00:03:07.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""And then I think that was maybe around a year""" start="00:03:11.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""ago, maybe a bit less.""" start="00:03:12.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""And then through the months,""" start="00:03:14.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""we just thought, oh yeah,""" start="00:03:15.920" video="qanda-parallel" id="subtitle"]] +[[!template text="""maybe we could present this,""" start="00:03:17.420" video="qanda-parallel" id="subtitle"]] +[[!template text="""maybe it would be interesting for people to""" start="00:03:18.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""see and that's how we came up with the idea""" start="00:03:20.660" video="qanda-parallel" id="subtitle"]] +[[!template text="""to present at EmacsConf.""" start="00:03:22.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, great. I don't see other people asking""" start="00:03:27.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""questions. So people, it's nice if I ask""" start="00:03:30.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""questions but you know,""" start="00:03:31.100" video="qanda-parallel" id="subtitle"]] +[[!template text="""the point is kind of for you to ask the""" start="00:03:33.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""questions. I see someone who's joined us on""" start="00:03:35.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""BBB. Peter, would you like to ask a question""" start="00:03:36.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""maybe? Otherwise I see another person writing""" start="00:03:41.720" video="qanda-parallel" id="subtitle"]] +[[!template text="""a question on the pad,""" start="00:03:43.040" video="qanda-parallel" id="subtitle"]] +[[!template text="""so we can either move for this 1.""" start="00:03:44.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""So I'll leave Peter to figure out if they""" start="00:03:46.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""want to ask a question.""" start="00:03:47.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""So I'm moving on to the next question.""" start="00:03:49.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 2]: I can jump in. That's a really well done talk""" start="00:03:57.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""and you really clearly laid out the problem""" start="00:04:01.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""and the solution there.""" start="00:04:03.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""While I was watching it,""" start="00:04:05.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""I was thinking maybe the nice way to name it""" start="00:04:10.740" video="qanda-parallel" id="subtitle"]] +[[!template text="""is just to name it query replace and query""" start="00:04:13.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""replace regext, you know,""" start="00:04:15.700" video="qanda-parallel" id="subtitle"]] +[[!template text="""overloading the original functions and then""" start="00:04:18.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""using a prefix number,""" start="00:04:23.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""like control number to indicate how many""" start="00:04:26.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""replacements you're going to do.""" start="00:04:29.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""But maybe that doesn't work with the""" start="00:04:31.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""recursive editing stuff,""" start="00:04:36.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""which I don't use much.""" start="00:04:37.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""So I don't have a good method.""" start="00:04:40.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: I think it would definitely work.""" start="00:04:43.260" video="qanda-parallel" id="subtitle"]] +[[!template text="""Well, the question is,""" start="00:04:46.260" video="qanda-parallel" id="subtitle"]] +[[!template text="""if we just overwrite the definitions,""" start="00:04:47.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""then, oh, well, I guess we could do that.""" start="00:04:51.700" video="qanda-parallel" id="subtitle"]] +[[!template text="""Nothing stops us. I mean,""" start="00:04:53.410" video="qanda-parallel" id="subtitle"]] +[[!template text="""we're in Emacs. We could definitely do that.""" start="00:04:54.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""And then if you give, like,""" start="00:04:55.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""a prefix argument, maybe it just drops you""" start="00:04:57.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""back to the original query replace.""" start="00:04:59.060" video="qanda-parallel" id="subtitle"]] +[[!template text="""Yeah, that's an idea. For now,""" start="00:05:01.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""we decided, OK, let's just keep everything""" start="00:05:02.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""explicitly separate just to avoid any""" start="00:05:05.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""confusion.""" start="00:05:05.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I think that's the right thing to do""" start="00:05:09.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""for now. What I'm actually thinking is that""" start="00:05:11.820" video="qanda-parallel" id="subtitle"]] +[[!template text="""when you do query replace,""" start="00:05:13.620" video="qanda-parallel" id="subtitle"]] +[[!template text="""it just does the regular query replace.""" start="00:05:15.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""And if you're going to do,""" start="00:05:17.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""say, 3 parallel replacements,""" start="00:05:20.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""then you do Control-U,""" start="00:05:21.340" video="qanda-parallel" id="subtitle"]] +[[!template text="""query replace. Sorry. Control-3,""" start="00:05:25.580" video="qanda-parallel" id="subtitle"]] +[[!template text="""query replace. And then that way you don't""" start="00:05:28.580" video="qanda-parallel" id="subtitle"]] +[[!template text="""have The final prompt that you give nothing""" start="00:05:33.400" video="qanda-parallel" id="subtitle"]] +[[!template text="""to.""" start="00:05:33.760" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Exactly, that's actually not a bad idea.""" start="00:05:36.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""I think I like that. Yeah,""" start="00:05:39.720" video="qanda-parallel" id="subtitle"]] +[[!template text="""that's not a bad idea.""" start="00:05:40.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: It's always a quagmire whether to ask for an""" start="00:05:44.760" video="qanda-parallel" id="subtitle"]] +[[!template text="""argument or to use the universal argument.""" start="00:05:47.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""When you're working with Emacs and especially""" start="00:05:51.060" video="qanda-parallel" id="subtitle"]] +[[!template text="""the UX side of things in the package,""" start="00:05:52.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""it's so complicated to figure out which 1 you""" start="00:05:54.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""want to do. In this particular case,""" start="00:05:56.880" video="qanda-parallel" id="subtitle"]] +[[!template text="""I think it's the better option to use the""" start="00:06:00.340" video="qanda-parallel" id="subtitle"]] +[[!template text="""universal argument or any kind of argument""" start="00:06:02.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""with a control number before.""" start="00:06:04.040" video="qanda-parallel" id="subtitle"]] +[[!template text="""All right, we have about 3 more minutes of""" start="00:06:10.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""questions. Peter, if you don't mind,""" start="00:06:12.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""I'll keep reading the questions in the chat.""" start="00:06:14.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""Did you use pair programming while developing""" start="00:06:19.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""it, it being a package,""" start="00:06:21.100" video="qanda-parallel" id="subtitle"]] +[[!template text="""or did you work independently,""" start="00:06:22.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""alternating and reviewing with Valentino?""" start="00:06:24.840" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: It was definitely a pair programming kind of""" start="00:06:28.320" video="qanda-parallel" id="subtitle"]] +[[!template text="""thing. So if I remember correctly,""" start="00:06:29.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""I was sitting at the computer and Valentino""" start="00:06:32.760" video="qanda-parallel" id="subtitle"]] +[[!template text="""was in front of a whiteboard and we were just""" start="00:06:36.020" video="qanda-parallel" id="subtitle"]] +[[!template text="""dissecting this regex and a bunch of examples""" start="00:06:38.400" video="qanda-parallel" id="subtitle"]] +[[!template text="""and trying to get these capture groups and""" start="00:06:41.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""stuff that we have to remap internally to get""" start="00:06:44.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""these offsets right and avoid off by 1 error""" start="00:06:46.560" video="qanda-parallel" id="subtitle"]] +[[!template text="""and stuff like that. So yeah,""" start="00:06:48.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""definitely a team effort.""" start="00:06:49.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, great. Moving on to the next question.""" start="00:06:53.660" video="qanda-parallel" id="subtitle"]] +[[!template text="""What is your background in programming?""" start="00:06:55.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""Was it difficult to implement following the""" start="00:06:57.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""same API and architecture as what is already""" start="00:06:59.700" video="qanda-parallel" id="subtitle"]] +[[!template text="""in Emacs?""" start="00:07:00.200" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: So maybe just a quick back story.""" start="00:07:05.400" video="qanda-parallel" id="subtitle"]] +[[!template text="""Both Valentino and I are actually PhD""" start="00:07:06.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""students in computer science,""" start="00:07:08.300" video="qanda-parallel" id="subtitle"]] +[[!template text="""and we literally share an office.""" start="00:07:09.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""So that's how we even started talking about""" start="00:07:12.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""this whole thing. And we both use Emacs,""" start="00:07:14.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""of course. But I don't think this was too""" start="00:07:18.380" video="qanda-parallel" id="subtitle"]] +[[!template text="""hard to implement because luckily all of the""" start="00:07:20.740" video="qanda-parallel" id="subtitle"]] +[[!template text="""interactive functionality like this""" start="00:07:22.300" video="qanda-parallel" id="subtitle"]] +[[!template text="""complicated undo, skipping,""" start="00:07:23.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""execute until the end and so on,""" start="00:07:25.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""all of this is really just already provided""" start="00:07:27.980" video="qanda-parallel" id="subtitle"]] +[[!template text="""by the Emacs queer replace implementation.""" start="00:07:29.860" video="qanda-parallel" id="subtitle"]] +[[!template text="""So sort of what we do is we just invoke it as""" start="00:07:34.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""a function and delegate to it.""" start="00:07:36.080" video="qanda-parallel" id="subtitle"]] +[[!template text="""And we came up with this clever trick to""" start="00:07:37.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""basically delegate this multi-replacement to""" start="00:07:42.380" video="qanda-parallel" id="subtitle"]] +[[!template text="""this 1 single function that's already there.""" start="00:07:45.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""So it wasn't too complicated.""" start="00:07:47.980" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Alright. And we have about 2 minutes of time""" start="00:07:54.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""for the last question.""" start="00:07:55.560" video="qanda-parallel" id="subtitle"]] +[[!template text="""What did you learn about Emacs programming or""" start="00:07:58.040" video="qanda-parallel" id="subtitle"]] +[[!template text="""programming in general while working on this""" start="00:08:00.020" video="qanda-parallel" id="subtitle"]] +[[!template text="""project? A very wide question for me.""" start="00:08:02.320" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Maybe 1 thing I would like to add to the""" start="00:08:05.840" video="qanda-parallel" id="subtitle"]] +[[!template text="""previous just answer is I don't want to say""" start="00:08:09.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""like you know we're PhDs,""" start="00:08:10.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""a PhD is required for this or anything,""" start="00:08:12.780" video="qanda-parallel" id="subtitle"]] +[[!template text="""not at all. It's mostly just for a little bit""" start="00:08:15.800" video="qanda-parallel" id="subtitle"]] +[[!template text="""of context, but I think obviously,""" start="00:08:19.220" video="qanda-parallel" id="subtitle"]] +[[!template text="""even if you're not a PhD,""" start="00:08:20.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""I mean, you don't even require like""" start="00:08:22.360" video="qanda-parallel" id="subtitle"]] +[[!template text="""university, you know, education or anything.""" start="00:08:24.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""It wasn't overly difficult to implement,""" start="00:08:27.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""sort of just read some code that's already""" start="00:08:30.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""there and you know follow what you see and""" start="00:08:33.539" video="qanda-parallel" id="subtitle"]] +[[!template text="""poke Emacs a little bit and do a little bit""" start="00:08:35.860" video="qanda-parallel" id="subtitle"]] +[[!template text="""of debugging on the internals and you can""" start="00:08:38.140" video="qanda-parallel" id="subtitle"]] +[[!template text="""definitely get it. So definitely not a""" start="00:08:40.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""prerequisite to have a degree or anything to""" start="00:08:42.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""do any of this stuff. Okay so Coming back to""" start="00:08:45.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I'm going to amend a little bit the""" start="00:08:48.420" video="qanda-parallel" id="subtitle"]] +[[!template text="""question because we only have 1 minute.""" start="00:08:49.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""So just 1 thing in 10 seconds,""" start="00:08:51.600" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 2]: what did you""" start="00:08:52.490" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: learn about this?""" start="00:08:53.040" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: your last question. What did I learn about""" start="00:08:54.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""Emacs programming? That Emacs is so flexible""" start="00:08:56.420" video="qanda-parallel" id="subtitle"]] +[[!template text="""that I can go and I can patch literally its""" start="00:08:59.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""message function. And that is how we achieve""" start="00:09:01.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""the nice message function in the echo buffer.""" start="00:09:03.680" video="qanda-parallel" id="subtitle"]] +[[!template text="""So I can literally go and patch something as""" start="00:09:06.720" video="qanda-parallel" id="subtitle"]] +[[!template text="""crucial as message.""" start="00:09:07.560" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: It's great. That's a lovely 1.""" start="00:09:09.920" video="qanda-parallel" id="subtitle"]] +[[!template text="""And I think, again, we're going back to the""" start="00:09:12.260" video="qanda-parallel" id="subtitle"]] +[[!template text="""philosophy of Emacs. Everything is""" start="00:09:13.660" video="qanda-parallel" id="subtitle"]] +[[!template text="""programmable and even changing the message""" start="00:09:15.200" video="qanda-parallel" id="subtitle"]] +[[!template text="""function is great. All right,""" start="00:09:16.640" video="qanda-parallel" id="subtitle"]] +[[!template text="""well, thank you so much,""" start="00:09:17.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""Lovro, and thanks to Valentino as well,""" start="00:09:19.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""who's not here, but who's contributed to this""" start="00:09:21.820" video="qanda-parallel" id="subtitle"]] +[[!template text="""talk. Any last word?""" start="00:09:23.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, just if you're gonna build any""" start="00:09:29.540" video="qanda-parallel" id="subtitle"]] +[[!template text="""solutions, try to make them as foolproof and""" start="00:09:31.980" video="qanda-parallel" id="subtitle"]] +[[!template text="""as 100% as possible so we get more of these""" start="00:09:34.360" video="qanda-parallel" id="subtitle"]] +[[!template text="""goodies that are nice and robust for""" start="00:09:36.280" video="qanda-parallel" id="subtitle"]] +[[!template text="""everybody to use.""" start="00:09:37.000" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, lovely. Well,""" start="00:09:39.400" video="qanda-parallel" id="subtitle"]] +[[!template text="""thank you so much, Lover,""" start="00:09:40.240" video="qanda-parallel" id="subtitle"]] +[[!template text="""for your presentation and your answer.""" start="00:09:41.940" video="qanda-parallel" id="subtitle"]] +[[!template text="""We'll be moving on to the next talk in just""" start="00:09:44.340" video="qanda-parallel" id="subtitle"]] +[[!template text="""about 5 seconds, and I'll see you after.""" start="00:09:47.260" video="qanda-parallel" id="subtitle"]] +[[!template text="""Bye, Lovro!""" start="00:09:47.900" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Yep, bye bye!""" start="00:09:49.760" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 0]: So I'm just waiting to make sure my VNC is a""" start="00:10:01.440" video="qanda-parallel" id="subtitle"]] +[[!template text="""little slow. Okay, we switch to the next""" start="00:10:02.840" video="qanda-parallel" id="subtitle"]] +[[!template text="""talk. All right, Lover,""" start="00:10:03.480" video="qanda-parallel" id="subtitle"]] +[[!template text="""I'm gonna need to go get ready now.""" start="00:10:04.960" video="qanda-parallel" id="subtitle"]] +[[!template text="""Yep. Bye-bye, and thanks for your talk.""" start="00:10:09.060" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 1]: Bye, thank you, see you.""" start="00:10:11.160" video="qanda-parallel" id="subtitle"]] +[[!template text="""[Speaker 2]: You""" start="00:10:15.060" video="qanda-parallel" id="subtitle"]] + +Questions or comments? Please e-mail [hokomo@disroot.org](mailto:hokomo@disroot.org?subject=Comment%20for%20EmacsConf%202023%20parallel%3A%20Parallel%20text%20replacement) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/parallel-before.md b/2023/info/parallel-before.md new file mode 100644 index 00000000..54bb132d --- /dev/null +++ b/2023/info/parallel-before.md @@ -0,0 +1,36 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 15-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="parallel-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="parallel-mainVideo" data=""" +00:00.000 Introduction +00:23.440 Problem: Goal +01:12.360 Problem: Naive Multi-pass +01:34.200 Problem: Clever Multi-pass +01:57.720 Problem: Terminology +03:04.440 Problem: Scaling Multi-pass +03:55.920 Solution: Single-pass +04:18.240 Solution: Existing +06:29.080 Solution: query-replace-parallel +06:55.240 Demonstration: Swap +07:53.970 Demonstration: LaTeX +08:48.700 Demonstration: Regex +09:36.320 Demonstration: Order +10:54.440 Demonstration: Fun +12:29.120 Implementation +14:18.740 End + +"""]]<div></div>Duration: 14:46 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/t3G5zo35epS6HvVot9MdZv">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="parallel-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="parallel-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus"></audio></div><div></div>Duration: 10:16 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/parallel-nav.md b/2023/info/parallel-nav.md new file mode 100644 index 00000000..5d255eff --- /dev/null +++ b/2023/info/parallel-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a> +Next by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/poltys-after.md b/2023/info/poltys-after.md new file mode 100644 index 00000000..7adf9ca7 --- /dev/null +++ b/2023/info/poltys-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [perma-curious@posteo.de](mailto:perma-curious@posteo.de?subject=Comment%20for%20EmacsConf%202023%20poltys%3A%20The%20browser%20in%20a%20buffer) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/poltys-before.md b/2023/info/poltys-before.md new file mode 100644 index 00000000..b5eb7ada --- /dev/null +++ b/2023/info/poltys-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 35-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="poltys-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 34:30 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1quXfJqC9bh9VxkA9UC21x">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/poltys-nav.md b/2023/info/poltys-nav.md new file mode 100644 index 00000000..dd2be68d --- /dev/null +++ b/2023/info/poltys-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a> +Next by track: <a href="/2023/talks/cubing">Speedcubing in Emacs</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/ref-after.md b/2023/info/ref-after.md new file mode 100644 index 00000000..9af1f6ff --- /dev/null +++ b/2023/info/ref-after.md @@ -0,0 +1,298 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="ref-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""Hello, this is Christopher Howard,""" start="00:00:00.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and welcome to my talk,""" start="00:00:04.940" video="mainVideo-ref" id="subtitle"]] +[[!template text=""""Informal Reference Tracking."""" start="00:00:06.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""This is a workflow talk,""" start="00:00:08.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""so I need to explain a little bit about""" start="00:00:10.574" video="mainVideo-ref" id="subtitle"]] +[[!template text="""what my needs were.""" start="00:00:12.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I am not a professional scholar or academic,""" start="00:00:14.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but there are a number of subjects""" start="00:00:18.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I'm interested in,""" start="00:00:20.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and I occasionally like to write""" start="00:00:21.607" video="mainVideo-ref" id="subtitle"]] +[[!template text="""gemlog posts about them.""" start="00:00:23.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So I needed some way to keep track of references.""" start="00:00:25.600" video="mainVideo-ref" id="subtitle"]] +[[!template text="""References to webpage articles, references to books,""" start="00:00:28.680" video="mainVideo-ref" id="subtitle"]] +[[!template text="""pages in books, and notes about them.""" start="00:00:32.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Something that was searchable,""" start="00:00:37.280" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but also something that was quick and easy to use,""" start="00:00:39.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and something that I could set up quickly.""" start="00:00:42.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And the approach I took, it only took me""" start="00:00:45.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""about an hour or two to figure out""" start="00:00:47.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""how to put it together.""" start="00:00:49.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I do want to emphasize""" start="00:00:52.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that there are better ways to do this.""" start="00:00:53.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I'm not recommending you use my code""" start="00:00:56.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or follow my exact approach.""" start="00:00:58.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""In particular, what I'm doing was meant to be done""" start="00:01:02.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""with Org's built-in capture""" start="00:01:05.940" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and templates functionality,""" start="00:01:09.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""so that's something that's more flexible,""" start="00:01:11.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""programmable, and there's also a lot of add-ins""" start="00:01:14.907" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that can be tied into that.""" start="00:01:21.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""For example, tools that allow you to search for,""" start="00:01:23.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""you know, feed in a URL, and it automatically""" start="00:01:31.320" video="mainVideo-ref" id="subtitle"]] +[[!template text="""pulls all the reference data for you.""" start="00:01:34.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And there's tools out there""" start="00:01:38.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that are really meant for scientific writing,""" start="00:01:39.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""so if you do this professionally,""" start="00:01:43.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""you may need to keep track of dozens of details""" start="00:01:46.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""for each reference""" start="00:01:49.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and then have some fancy system to generate that""" start="00:01:51.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""into your, or output that into your paper.""" start="00:01:55.320" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So there are better systems,""" start="00:02:00.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but this is what worked for me and what was easy.""" start="00:02:02.440" video="mainVideo-ref" id="subtitle"]] + +[[!template new="1" text="""Tip about completion frameworks""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""I do want to emphasize that if you haven't,""" start="00:02:06.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""you really want to learn how to use helm-mode""" start="00:02:11.320" video="mainVideo-ref" id="subtitle"]] +[[!template text="""H-E-L-M, or one of the similar systems in Emacs""" start="00:02:14.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that does fuzzy search on Emacs commands.""" start="00:02:20.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""For example, in Helm here,""" start="00:02:26.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I input one keychord, and then I just have to remember""" start="00:02:29.340" video="mainVideo-ref" id="subtitle"]] +[[!template text="""a few characters of some command,""" start="00:02:39.007" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and they don't even have to be right next to each other,""" start="00:02:40.720" video="mainVideo-ref" id="subtitle"]] +[[!template text="""like H-O-C will bring up `helm-occur`.""" start="00:02:43.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""That's based on its algorithms""" start="00:02:47.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""of what I most likely meant""" start="00:02:51.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and the ones that I've used in the past.""" start="00:02:53.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So it usually brings up the command that I want,""" start="00:02:55.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or the one that I want""" start="00:02:57.920" video="mainVideo-ref" id="subtitle"]] +[[!template text="""is one or two spots away in the entry.""" start="00:02:59.580" video="mainVideo-ref" id="subtitle"]] +[[!template text="""That just saves me a lot of time""" start="00:03:03.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""[and] a lot of memorization.""" start="00:03:05.074" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So if you haven't learned Helm""" start="00:03:06.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or a similar system for Emacs, you really want to.""" start="00:03:09.120" video="mainVideo-ref" id="subtitle"]] + +[[!template new="1" text="""References file overview""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""So what is my approach?""" start="00:03:14.920" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Well, basically, what it comes down to is really""" start="00:03:18.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""fundamentally nothing more than just a list""" start="00:03:24.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""of Org entries in a file.""" start="00:03:27.307" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And there's one entry per reference.""" start="00:03:30.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Fundamentally, that's all it is.""" start="00:03:35.580" video="mainVideo-ref" id="subtitle"]] +[[!template text="""But I'll go over the parts.""" start="00:03:37.207" video="mainVideo-ref" id="subtitle"]] +[[!template text="""You can see there's the title for the entry,""" start="00:03:39.207" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and that's not necessarily""" start="00:03:43.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the title of the book or the article,""" start="00:03:44.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but that's my perspective on it,""" start="00:03:47.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that's what I want to remember about it,""" start="00:03:50.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and what I'll be looking for later""" start="00:03:52.720" video="mainVideo-ref" id="subtitle"]] +[[!template text="""when I do a search on my references.""" start="00:03:54.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""There's also in here the use of Org's tags""" start="00:03:56.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""here to the right of the title,""" start="00:04:06.660" video="mainVideo-ref" id="subtitle"]] +[[!template text="""very handy for searching for entries later.""" start="00:04:08.274" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I use some Org properties attached to each entry.""" start="00:04:12.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I automatically add in here an ID""" start="00:04:18.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that can be useful if you want to""" start="00:04:21.740" video="mainVideo-ref" id="subtitle"]] +[[!template text="""link entries together later.""" start="00:04:24.074" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I automatically add in here the date""" start="00:04:27.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that the entry was created,""" start="00:04:30.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""which can be useful to me if things""" start="00:04:31.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""got sorted in a different order at some point,""" start="00:04:35.700" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I could still look through""" start="00:04:38.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the most recent entries that I had made""" start="00:04:39.940" video="mainVideo-ref" id="subtitle"]] +[[!template text="""if I wanted to do that for some reason.""" start="00:04:42.507" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And sometimes I add in this publication year field""" start="00:04:45.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""with the idea that one day I might want to do""" start="00:04:48.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""a search for entries based on the publication year""" start="00:04:52.720" video="mainVideo-ref" id="subtitle"]] +[[!template text="""of the book or the article,""" start="00:04:55.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""say, only to use recent references""" start="00:04:57.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or something like that.""" start="00:05:00.774" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And then down here below the properties""" start="00:05:03.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""is where I paste in the URL to the webpage, or""" start="00:05:05.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""type in the title and author of the book""" start="00:05:10.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""on the pages, maybe the pages that were relevant,""" start="00:05:13.007" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the pages of the periodical, or something like that.""" start="00:05:16.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And I could put anything that I want down here,""" start="00:05:21.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""some other notes about what's important""" start="00:05:23.920" video="mainVideo-ref" id="subtitle"]] +[[!template text="""about this article to me.""" start="00:05:25.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So fundamentally, that's all it is.""" start="00:05:29.940" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Of course, I've added in a bit of convenience code""" start="00:05:32.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""to make this go a lot faster""" start="00:05:35.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""rather than typing all this out.""" start="00:05:37.080" video="mainVideo-ref" id="subtitle"]] + +[[!template new="1" text="""The Emacs Lisp code""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""For that, I'll switch back to my init.el file.""" start="00:05:39.320" video="mainVideo-ref" id="subtitle"]] +[[!template text="""There's really just five functions.""" start="00:05:45.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""The first two here are ones""" start="00:05:49.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I've adapted off the Internet.""" start="00:05:52.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Honestly, I can't remember""" start="00:05:54.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""exactly where that I got them from,""" start="00:05:56.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but basically, they're just some functions""" start="00:05:58.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""for making a block of text writable or readable.""" start="00:06:00.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Writable or not writable, I should say.""" start="00:06:04.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""The idea there is that""" start="00:06:09.300" video="mainVideo-ref" id="subtitle"]] +[[!template text="""when I'm creating a new entry,""" start="00:06:12.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I don't want to accidentally delete""" start="00:06:13.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or write over some earlier entries that I've made.""" start="00:06:16.307" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So I use a little bit of Emacs functionality for that.""" start="00:06:18.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And then here are the three reference functions""" start="00:06:24.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I've actually written.""" start="00:06:29.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Really trivial, basic stuff here.""" start="00:06:32.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""The core of it is the `new-reference` function.""" start="00:06:35.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Basically, what that does is""" start="00:06:41.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""it opens up the references file,""" start="00:06:44.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""jumps to the end of the reference file,""" start="00:06:47.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""starts a new entry, inserts the asterisk.""" start="00:06:52.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""It jumps back to the previous text,""" start="00:06:57.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and whatever previous text there is,""" start="00:07:01.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""it makes that read-only.""" start="00:07:03.474" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Again, so that I don't accidentally delete that,""" start="00:07:04.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or cut, or type over it, or something""" start="00:07:08.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""when I'm making a new reference.""" start="00:07:10.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Then it goes back to the new reference,""" start="00:07:14.580" video="mainVideo-ref" id="subtitle"]] +[[!template text="""automatically adds in a unique ID for that,""" start="00:07:17.680" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and then automatically stamps it with""" start="00:07:21.340" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the date the entry was created — today's date.""" start="00:07:25.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Now, I've got two other functions here.""" start="00:07:29.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""One is `view-references`,""" start="00:07:32.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""which does nothing but open up the reference file""" start="00:07:34.540" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and switch to that buffer""" start="00:07:37.807" video="mainVideo-ref" id="subtitle"]] +[[!template text="""if you're not already on it.""" start="00:07:39.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And then there's one other here, `edit-references`,""" start="00:07:42.540" video="mainVideo-ref" id="subtitle"]] +[[!template text="""which does the exact same thing except for""" start="00:07:45.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""it also goes over all the text in the buffer""" start="00:07:50.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and makes it writable.""" start="00:07:53.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So if I really do want to edit those other references,""" start="00:07:55.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I've got a function to quickly make that possible.""" start="00:07:58.120" video="mainVideo-ref" id="subtitle"]] + +[[!template new="1" text="""Example reference to Elfeed article""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""Let me give an example of this.""" start="00:08:02.720" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I type in here, new reference.""" start="00:08:07.500" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Now I've jumped to the end of my references file.""" start="00:08:13.980" video="mainVideo-ref" id="subtitle"]] +[[!template text="""See, it's ready to take the title.""" start="00:08:16.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Well, I guess I need to have something,""" start="00:08:19.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""some content, to put in here.""" start="00:08:21.720" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Let's say I was looking through Elfeed,""" start="00:08:23.660" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and let's say I found this interesting article""" start="00:08:28.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""about Mars earthquakes.""" start="00:08:31.600" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Let's say I open it up [and]""" start="00:08:38.220" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I read through the article.""" start="00:08:40.007" video="mainVideo-ref" id="subtitle"]] +[[!template text="""First, I'd figure out what it is""" start="00:08:41.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I find interesting about this, what it is that""" start="00:08:43.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I'm going to want to remember and look up later.""" start="00:08:47.260" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So I come up with a quick title based on that.""" start="00:08:51.580" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Let's go back to the references with `view-reference`.""" start="00:08:57.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And, let's just call it""" start="00:09:01.900" video="mainVideo-ref" id="subtitle"]] +[[!template text=""""Study of Mars Earthquake."""" start="00:09:05.674" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Now I'm going to also want to put in some tags.""" start="00:09:13.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""On my system, that's done with""" start="00:09:18.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Control C, Control Q (`C-c C-q`).""" start="00:09:21.107" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And I can put in some tags.""" start="00:09:23.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I like to go ahead and insert the colons.""" start="00:09:25.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""You can leave those out,""" start="00:09:29.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""but they're going to get added anyway,""" start="00:09:30.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""so I'm in the habit of using them.""" start="00:09:32.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Let's say we'll call this 'Astronomy' as one tag,""" start="00:09:36.780" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and the next tag could be 'Planets'.""" start="00:09:41.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""If I wanted to use a tag""" start="00:09:47.060" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that was more than one word in the tag,""" start="00:09:48.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I'd need to use underscores or something like that.""" start="00:09:50.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""If I wanted a tag that was 'Mars Earthquakes',""" start="00:09:53.540" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I could do it like that, but that's kind of silly.""" start="00:10:00.500" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Now I try not to be too clever with the tags.""" start="00:10:05.060" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I don't spend a lot of time thinking about them.""" start="00:10:08.660" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I just come up with some general buckets""" start="00:10:10.600" video="mainVideo-ref" id="subtitle"]] +[[!template text="""to throw things in.""" start="00:10:13.107" video="mainVideo-ref" id="subtitle"]] +[[!template text="""You can see the tags were added there,""" start="00:10:15.020" video="mainVideo-ref" id="subtitle"]] +[[!template text="""to the right of the title.""" start="00:10:16.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Now you can see down here under PROPERTIES,""" start="00:10:19.380" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the ID has already been added,""" start="00:10:23.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the Date_Created has been added.""" start="00:10:25.320" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Sometimes, I'll like to put in the publication year,""" start="00:10:27.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and for that, I use the `org-set-property` command.""" start="00:10:30.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Publication_Year, this year in this case.""" start="00:10:38.140" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And then I just need to paste in the URL.""" start="00:10:43.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I do that manually.""" start="00:10:46.680" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I use Org's bracket format for that.""" start="00:10:48.080" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So I start that, go back to the article,""" start="00:10:53.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""copy the URL, paste that in.""" start="00:10:57.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""If I want, I can add it in the title""" start="00:11:02.100" video="mainVideo-ref" id="subtitle"]] +[[!template text="""with the second pair of brackets here.""" start="00:11:04.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Don't have to, but often like to.""" start="00:11:07.460" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Close that off, and there it is.""" start="00:11:14.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""That was really it.""" start="00:11:18.560" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I add a return on the end here,""" start="00:11:20.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""just so the next entry comes out with the right spacing.""" start="00:11:22.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""But really, that's it,""" start="00:11:26.620" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and typically, when I'm not explaining it,""" start="00:11:28.307" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that only takes 20 seconds or so, or 30 seconds.""" start="00:11:31.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Pretty quick. Pretty easy.""" start="00:11:37.500" video="mainVideo-ref" id="subtitle"]] + +[[!template new="1" text="""Searching the references""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]] + +[[!template text="""What about searching later?""" start="00:11:41.540" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Well, often the easiest thing is just do a simple,""" start="00:11:45.540" video="mainVideo-ref" id="subtitle"]] +[[!template text="""boring incremental search.""" start="00:11:50.474" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I usually know roughly""" start="00:11:54.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""what it is that I'm looking for already.""" start="00:11:55.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""If I was looking for that wildflower article,""" start="00:11:58.500" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I could just do an incremental search for wildflowers""" start="00:12:02.380" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and jump through that. It's pretty simple.""" start="00:12:06.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Not very impressive, but honestly, most of the time""" start="00:12:07.920" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that gets me there pretty quick.""" start="00:12:13.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Sometimes I find it useful to do an Occur search,""" start="00:12:16.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""more specifically a Helm Occur search.""" start="00:12:20.360" video="mainVideo-ref" id="subtitle"]] +[[!template text="""If I use the `helm-occur` command,""" start="00:12:23.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""then I like to use this to search by tag.""" start="00:12:31.260" video="mainVideo-ref" id="subtitle"]] +[[!template text="""That's where it really becomes handy.""" start="00:12:34.680" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Let's say I want to narrow it down""" start="00:12:36.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""to all my astronomy references""" start="00:12:39.207" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and then narrow it down a little bit more to planets.""" start="00:12:42.640" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I can put spaces in between and it still works.""" start="00:12:50.040" video="mainVideo-ref" id="subtitle"]] +[[!template text="""You can see here in one window,""" start="00:12:54.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""it gives me the bottom window there.""" start="00:12:57.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""It's giving…, just because of the way""" start="00:13:00.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the tags are formatted with the title, it gives me""" start="00:13:03.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""a list of all the titles that have those tags.""" start="00:13:06.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""And I usually find what I want pretty quick""" start="00:13:09.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""by just tapping through here.""" start="00:13:11.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Once I find the one that I think I want,""" start="00:13:13.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I press enter, and now I'm focused on just that entry.""" start="00:13:16.500" video="mainVideo-ref" id="subtitle"]] +[[!template text="""There is some advanced functionality, I believe,""" start="00:13:24.140" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I used in the past where you could search""" start="00:13:26.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""based on the property fields.""" start="00:13:29.960" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So do something like search for publication —""" start="00:13:33.120" video="mainVideo-ref" id="subtitle"]] +[[!template text="""the most recent publications in the last 10 years.""" start="00:13:37.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""There's some kind of advanced syntax for that,""" start="00:13:42.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""which I used once or twice.""" start="00:13:46.200" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Honestly, I use that so infrequently""" start="00:13:48.220" video="mainVideo-ref" id="subtitle"]] +[[!template text="""that I have to go back to the Emacs manual""" start="00:13:51.400" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and figure it out each time, and figure out again""" start="00:13:54.840" video="mainVideo-ref" id="subtitle"]] +[[!template text="""how I did that the last time.""" start="00:13:57.740" video="mainVideo-ref" id="subtitle"]] +[[!template text="""But since I do it only once""" start="00:13:59.880" video="mainVideo-ref" id="subtitle"]] +[[!template text="""every three or four months, it's not a problem.""" start="00:14:02.000" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So I'm not going to go over that today.""" start="00:14:06.680" video="mainVideo-ref" id="subtitle"]] +[[!template text="""That's pretty much it in a nutshell.""" start="00:14:11.520" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Again, the code that I wrote, this specific approach""" start="00:14:16.480" video="mainVideo-ref" id="subtitle"]] +[[!template text="""is not really what I'm recommending.""" start="00:14:19.974" video="mainVideo-ref" id="subtitle"]] +[[!template text="""But here it is if you really do want to use it.""" start="00:14:24.280" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Maybe I can make a link to the URL""" start="00:14:31.160" video="mainVideo-ref" id="subtitle"]] +[[!template text="""and share that in the chat room or something.""" start="00:14:36.240" video="mainVideo-ref" id="subtitle"]] +[[!template text="""But I consider this to be trivial code.""" start="00:14:40.060" video="mainVideo-ref" id="subtitle"]] +[[!template text="""So just use that if you want to use it.""" start="00:14:46.760" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I should be signing off here now.""" start="00:14:49.800" video="mainVideo-ref" id="subtitle"]] +[[!template text="""I should be in the chat room, in the IRC chat room,""" start="00:14:53.440" video="mainVideo-ref" id="subtitle"]] +[[!template text="""or you can reach out to me by email if you'd like.""" start="00:14:58.260" video="mainVideo-ref" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:15:01.920" video="mainVideo-ref" id="subtitle"]] + + + +Captioner: bhavin192 + +Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20ref%3A%20Org-Mode%20workflow%3A%20informal%20reference%20tracking) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/ref-before.md b/2023/info/ref-before.md new file mode 100644 index 00000000..165a4e1b --- /dev/null +++ b/2023/info/ref-before.md @@ -0,0 +1,20 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 16-min talk; Q&A: IRC +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="ref-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="ref-mainVideo" data=""" +00:00.000 Introduction +02:06.040 Tip about completion frameworks +03:14.920 References file overview +05:39.320 The Emacs Lisp code +08:02.720 Example reference to Elfeed article +11:41.540 Searching the references + +"""]]<div></div>Duration: 15:04 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/cYpEatASFWXLzDfKH4Fhec">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/ref-nav.md b/2023/info/ref-nav.md new file mode 100644 index 00000000..a370300e --- /dev/null +++ b/2023/info/ref-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/solo">How I play TTRPGs in Emacs</a> +Next by track: <a href="/2023/talks/unentangling">(Un)entangling projects and repos</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/repl-after.md b/2023/info/repl-after.md new file mode 100644 index 00000000..d0a895ad --- /dev/null +++ b/2023/info/repl-after.md @@ -0,0 +1,1146 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="repl-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Hi! My name is Eduardo Ochs""" start="00:00:00.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and the title of this talk is: REPLs""" start="00:00:03.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in strange places - Lua, LateX, LPeg, LPegRex,""" start="00:00:05.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and TikZ. I'm the author of an Emacs""" start="00:00:09.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""package called eev, and this is a talk""" start="00:00:12.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""at the EmacsConf 2023, that is happening in""" start="00:00:14.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""December 2023, at the internets.""" start="00:00:18.480" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Diagrams""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""This is one of the""" start="00:00:22.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples of diagrams that we are""" start="00:00:23.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""going to see - let me show how I generate""" start="00:00:24.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it... one second,""" start="00:00:27.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I have to use a smaller font here...""" start="00:00:30.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is a file called ParseTree2.lua...""" start="00:00:35.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""let me go back to this block of tests again...""" start="00:00:39.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and now if I run""" start="00:00:42.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this...""" start="00:00:43.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we get these outputs here at the""" start="00:00:47.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""right, and then in this line here it""" start="00:00:50.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""generates a PDF, and if I type f8 here it""" start="00:00:53.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""shows the PDF in the lower right window.""" start="00:00:58.120" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""eev""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Let me start by explaining""" start="00:01:03.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""briefly what is eev.""" start="00:01:06.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""First: it is something that""" start="00:01:09.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""appeared by accident in the mid-90s - I""" start="00:01:12.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""explained this story in my""" start="00:01:14.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""presentation at the EmacsConf 2019...""" start="00:01:16.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's a package... it's an Emacs""" start="00:01:20.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""package that is part of ELPA... it has at""" start="00:01:23.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""least 10 users - those are the ones""" start="00:01:26.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that I know by name...""" start="00:01:29.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eev means `emacs-execute-verbosely'...""" start="00:01:32.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eev is something that treats eval-last-sexp""" start="00:01:38.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""as the central feature of Emacs...""" start="00:01:40.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eev blurs the distinction between""" start="00:01:44.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""programmers and users, and it replaces""" start="00:01:45.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the slogan "users should not be forced to""" start="00:01:48.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""see Lisp", that is something that Richard""" start="00:01:51.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Stallman told me once, by "users should see""" start="00:01:53.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lisp instead of buttons" and "new users""" start="00:01:57.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""should see Lisp in the first 5 minutes"...""" start="00:02:00.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I'm going to show""" start="00:02:04.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""some examples of that soon.""" start="00:02:05.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Eev uses code in comments a lot,""" start="00:02:08.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and also tests in comments...""" start="00:02:11.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I changed my way of presenting it""" start="00:02:15.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it became very REPL-centric""" start="00:02:17.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in the last few years, in the""" start="00:02:19.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sense that I start by explaining its""" start="00:02:22.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""main features by its support for REPLs...""" start="00:02:24.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eev supposes""" start="00:02:28.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that we want to keep""" start="00:02:31.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""executable notes of everything - I'm also""" start="00:02:32.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""going to show examples of this in a""" start="00:02:35.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""second... eev has lots of "videos for""" start="00:02:37.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""people who hate videos", and it tries to""" start="00:02:40.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""do everything with very little magic and""" start="00:02:43.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""without black boxes - I'm going to explain""" start="00:02:46.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""many of these things very soon.""" start="00:02:48.840" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Another figure""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""This is a figure that that I'm going""" start="00:02:50.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to show in details soon, that is""" start="00:02:52.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""about something important about Lua...""" start="00:02:57.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the font is very bad now, so let me""" start="00:02:59.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""change the font... the figure is this one...""" start="00:03:03.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and...""" start="00:03:07.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""what most people do when they""" start="00:03:08.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""visit a file with something""" start="00:03:12.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""interesting on it is that they just go""" start="00:03:14.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""there and they set a bookmark there, or""" start="00:03:16.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they put the position in a register...""" start="00:03:18.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but I prefer to keep""" start="00:03:21.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""links to everything that is interesting""" start="00:03:26.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""as elisp hyperlinks. So, for example, this is""" start="00:03:29.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""an elisp hyperlink to a file, that goes""" start="00:03:32.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to this anchor here, and to this string""" start="00:03:35.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""after this anchor... this is a variant""" start="00:03:37.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that opens that file in the window""" start="00:03:41.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""at the right -""" start="00:03:44.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here... and this is""" start="00:03:45.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a sexp that changes the font. I""" start="00:03:48.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""have a command with a very short name""" start="00:03:53.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that does that, but I""" start="00:03:56.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""prefer to keep that as a one-liner.""" start="00:03:59.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""About the videos... we can see""" start="00:04:02.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the list of first-class videos of eev""" start="00:04:06.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by executing this, M-x find-1stclassvideos,""" start="00:04:10.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""or by running this alias here, M-x 1c...""" start="00:04:14.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and then what we see is this...""" start="00:04:18.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the first sexp here""" start="00:04:20.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""regenerates this buffer - so we can make a""" start="00:04:24.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""mess here and then run this and the""" start="00:04:26.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""original buffer is regenerated again in""" start="00:04:29.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a clean way...""" start="00:04:33.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""each of these things here""" start="00:04:34.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""opens a buffer with information about""" start="00:04:36.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a video... let me take a specific""" start="00:04:40.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""example here... this video here is about""" start="00:04:44.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one of the ancestors of this talk, that""" start="00:04:49.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is a library that I wrote""" start="00:04:51.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""for creating diagrams in LaTeX using""" start="00:04:53.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a package called Pict2e using REPLs...""" start="00:04:58.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""anyway...""" start="00:05:03.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the thing is that if we""" start="00:05:03.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""run a sexp like this one and we don't""" start="00:05:06.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""have a local copy of the video eev""" start="00:05:11.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""will try to download to the local copy -""" start="00:05:14.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and instead of doing that by asking""" start="00:05:17.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something like "do you want me""" start="00:05:20.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to download the local copy? Blah""" start="00:05:21.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""blah blah blah blah..." it simply opens a""" start="00:05:24.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""buffer like this, I mean, if we don't""" start="00:05:28.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""have a local copy yet it will open a""" start="00:05:30.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""buffer like this one, in which these""" start="00:05:33.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things here in comments are links to the""" start="00:05:36.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""documentation... I mean, this thing here""" start="00:05:39.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""explains the idea of local copies""" start="00:05:43.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of files from the internet...""" start="00:05:46.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""there are more details here, and here...""" start="00:05:48.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this is a script that we""" start="00:05:54.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""can execute line by line, so instead of""" start="00:05:57.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this script being hidden behind the""" start="00:06:00.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""button that we just press after a""" start="00:06:02.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""question like "Do you want me to do""" start="00:06:06.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something blah blah blah? Yes or no?"""" start="00:06:08.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the script is visible here and we can""" start="00:06:10.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""execute it step by step... it creates a""" start="00:06:13.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""terminal with a shell here in the""" start="00:06:17.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""right window, and when we type f8 in""" start="00:06:20.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one of these lines here the lines are""" start="00:06:24.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sent... (...) so this is going""" start="00:06:26.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to download a copy of the video... the""" start="00:06:29.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""wget says that I already have a copy of""" start="00:06:31.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the video and its subtitles... and so on.""" start="00:06:36.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And after getting a copy of the video""" start="00:06:39.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we can run this sexp here and it displays""" start="00:06:43.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the video.""" start="00:06:48.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I said that eev has lots of""" start="00:06:49.920" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""videos for people who hate videos", and""" start="00:06:55.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the idea is that very few""" start="00:06:58.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""people are going to watch the videos in""" start="00:06:59.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""real time... and most of the people that""" start="00:07:02.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I know - or: most of the people that""" start="00:07:06.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""are interested in eev in some""" start="00:07:08.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""way... they are going to watch just""" start="00:07:10.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""small sections of the video, and most of""" start="00:07:13.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the time they're just going to read the""" start="00:07:16.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""subtitles of the video. So, for each""" start="00:07:17.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one of the videos we have a page""" start="00:07:20.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""about the video... let me see if I""" start="00:07:23.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""have internet here... yes. This is a""" start="00:07:27.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""page...""" start="00:07:30.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and usually these pages have a link""" start="00:07:32.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to another page that""" start="00:07:39.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""has all the subtitles of the""" start="00:07:40.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""video... uh, wherever... in this one""" start="00:07:43.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's not so visible...""" start="00:07:46.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but anyway, there are several""" start="00:07:48.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""ways of accessing the subtitles of the""" start="00:07:50.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""video, and one of the ways is by running""" start="00:07:52.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this sexp here,""" start="00:07:56.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that opens a file in Lua that is""" start="00:07:57.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""what I use to generate the""" start="00:08:01.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""subtitles.""" start="00:08:03.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Anyway... by the way, these things... each""" start="00:08:04.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one of these things here is a hyperlink""" start="00:08:08.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to a position of the video, so if I type""" start="00:08:12.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this the right way it goes to that""" start="00:08:15.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""position. Anyway, let me go back...""" start="00:08:18.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""also, the tutorials of eev... the""" start="00:08:24.120" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""intros" of eev, that start with "find-" and""" start="00:08:27.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""end with "-intro", they have lots of blocks""" start="00:08:31.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that say "[Video links:]", like this one, and""" start="00:08:34.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these blocks have links to positions""" start="00:08:39.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in videos, and if we don't have a local""" start="00:08:41.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""copy of the video yet the thing shows""" start="00:08:43.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""us a script that lets us download the""" start="00:08:47.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""local copy.""" start="00:08:49.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Anyway, I said that I was going""" start="00:08:50.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to explain what I mean by "magic" and""" start="00:08:54.400" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""black boxes".""" start="00:08:58.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is something that I've been""" start="00:08:59.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""trying to explain for a long time, and I""" start="00:09:03.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""think that I got a very good explanation""" start="00:09:05.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""about that in a video that I made""" start="00:09:07.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""about something called eev-wconfig, that""" start="00:09:09.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is a tool for configuring eev on""" start="00:09:13.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Windows without "magic" - without buttons""" start="00:09:15.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that do things without explaining what""" start="00:09:19.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they're doing.""" start="00:09:22.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""This is a part of the subtitles""" start="00:09:22.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the video, let me read that...""" start="00:09:25.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eev-wconfig is an attempt to solve the""" start="00:09:28.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""problem of how to install these things""" start="00:09:32.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""on Windows both without magic and with""" start="00:09:35.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very little""" start="00:09:37.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""magic. Remember this slogan: "any""" start="00:09:37.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sufficiently advanced technology is""" start="00:09:41.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""indistinguishable from""" start="00:09:44.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""magic". Here in this video I'm going to""" start="00:09:45.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""use the term magic as a shorthand""" start="00:09:49.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""for sufficiently advanced technology,""" start="00:09:52.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that is something that is complex and""" start="00:09:55.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""non-obvious and that is""" start="00:09:57.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""indistinguishable from magic in the""" start="00:10:00.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sense of being almost impossible to""" start="00:10:02.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand. And I'm also going to use a""" start="00:10:04.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the term "black box" as a near-synonym for""" start="00:10:07.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""magic, and sometimes the term""" start="00:10:10.280" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""black box" is more convenient even though""" start="00:10:13.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's a bit longer - it has more""" start="00:10:16.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""letters - because when I use the term""" start="00:10:17.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""black box it invites us to use""" start="00:10:20.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""expressions like "opening the black box",""" start="00:10:22.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I'm going to use that""" start="00:10:25.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""expression a lot.""" start="00:10:26.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Now let me try to explain what is...""" start="00:10:28.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sorry, let me change the font...""" start="00:10:37.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""what is Lua. Lua is a minimalistic""" start="00:10:41.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""language, in the sense of""" start="00:10:45.480" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""batteries not included"... it uses""" start="00:10:50.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""associative tables for most of its data""" start="00:10:53.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""structures...""" start="00:10:56.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it is so minimalistic""" start="00:10:56.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that its default print function, when""" start="00:11:00.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we tell... when we create an associative""" start="00:11:04.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""table and we ask it to print...""" start="00:11:06.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""when we ask "print" to print an""" start="00:11:09.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""associative table it just prints the""" start="00:11:13.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""address of the table. Here are some""" start="00:11:15.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples... here is a table, and when we""" start="00:11:17.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""ask "print" to print it it just says""" start="00:11:21.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that it's the table at this address here.""" start="00:11:24.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, one of things that that most""" start="00:11:26.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""people do when they start using Lua is""" start="00:11:30.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that either they download a package with""" start="00:11:32.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a pretty-printing function or they write""" start="00:11:35.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""their own pretty-printing functions. My""" start="00:11:37.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""own pretty-printing function is called""" start="00:11:39.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""PP, with upper case letters, and it works""" start="00:11:41.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""like this...""" start="00:11:46.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it prints associative tables""" start="00:11:47.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in a way like this. It says that for""" start="00:11:50.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the key 1 the the value associated to""" start="00:11:53.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it is 2, for the key 2 the value is""" start="00:11:57.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""3, and for the key 3 the value is 5.""" start="00:12:00.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""When I started using Lua one of my""" start="00:12:04.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""favorite languages was also a language""" start="00:12:11.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that used associative tables a lot -""" start="00:12:13.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it was called Icon...""" start="00:12:15.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I had to write my own""" start="00:12:16.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""pretty-printing functions for Icon, so""" start="00:12:21.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I just had to port my pretty-printing""" start="00:12:23.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""functions to Lua... and my first""" start="00:12:27.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""version looked at something like this... it""" start="00:12:29.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""just had some some global functions... lots""" start="00:12:32.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of them, actually...""" start="00:12:36.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and after a while I rewrote it, and I""" start="00:12:39.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""rewrote it again, and again, and again, and""" start="00:12:42.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is one of the versions of that,""" start="00:12:44.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is not even the default at this""" start="00:12:47.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""point...""" start="00:12:49.880" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""Tos" is for "to string"...""" start="00:12:51.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this is a demo...""" start="00:12:54.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's very modular, so it's easy to replace""" start="00:12:58.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""parts of it, or to toggle flags... and this""" start="00:13:01.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is an example. If I try to print the""" start="00:13:05.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""table of methods for a certain""" start="00:13:08.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""class... I will need a smaller font...""" start="00:13:10.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it prints the table like this, with the""" start="00:13:14.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""names of the methods and then links to""" start="00:13:16.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the source code of the functions...""" start="00:13:20.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these links only make sense in Emacs and""" start="00:13:21.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in eev...""" start="00:13:25.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and when we run a link like this one...""" start="00:13:25.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it shows the source code in the""" start="00:13:30.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""window at the right. So, for some""" start="00:13:32.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""functions the source code is three lines,""" start="00:13:35.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""for other ones it's one line... and""" start="00:13:37.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever. Anyway, let me go""" start="00:13:40.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""back... Lua can be used in many different""" start="00:13:44.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""styles... most people hate other people's""" start="00:13:47.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""styles... when I started using it in the""" start="00:13:50.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""year 2000 I learned most of the basic""" start="00:13:53.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""language in a single day - it was very""" start="00:13:57.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""similar to things that I was already""" start="00:13:59.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""using... and then I rewrote the the mini-""" start="00:14:02.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""language that I was using to""" start="00:14:05.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""generate the HTML for my pages""" start="00:14:10.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in Lua... actually I had to rewrite it""" start="00:14:13.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""many times, but the first version I""" start="00:14:16.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""certainly did in my first weeks or first""" start="00:14:18.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""months using Lua...""" start="00:14:21.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""In the beginning I was just using""" start="00:14:22.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it for writing programs that either""" start="00:14:27.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""didn't take any input at all - because""" start="00:14:30.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the input was already in the source file -""" start="00:14:32.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""or that worked as Unix programs,""" start="00:14:35.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that would read files""" start="00:14:40.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and process these files in some way""" start="00:14:43.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and output something.""" start="00:14:45.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I mentioned the "basic language" here...""" start="00:14:49.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I only learned how to use closures,""" start="00:14:52.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""metatables, and coroutines many years later...""" start="00:14:54.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in the beginning, when I started using Lua,""" start="00:14:58.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it didn't have a package manager...""" start="00:15:02.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it appeared later, it is called""" start="00:15:04.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Luarocks... it has had this package""" start="00:15:06.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""manager for several years, most""" start="00:15:10.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the rocks for Luarocks are poorly""" start="00:15:13.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""documented and hacker-unfriendly,""" start="00:15:15.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so you can't rely just on the""" start="00:15:18.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""documentation and you can't rely just on the""" start="00:15:21.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""source code, because, I mean... if you are""" start="00:15:23.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a genius of course you can, but for""" start="00:15:26.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""people who are either lazy, or dumb, or""" start="00:15:29.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever, like me, or unfocused...""" start="00:15:31.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the source code is hard to""" start="00:15:34.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand and hard to tinker with.""" start="00:15:36.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Some rocks are excellent. The""" start="00:15:38.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""best rocks are well documented""" start="00:15:43.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but they are hacker-unfriendly""" start="00:15:46.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in a sense that I hope that""" start="00:15:48.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I'll be able to explain soon.""" start="00:15:51.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""The best rocks use local""" start="00:15:52.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""variables and metatables a lot -""" start="00:15:55.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so if you are beginner""" start="00:15:58.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""learning Lua you're not going to""" start="00:16:02.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand what their source code do...""" start="00:16:03.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they use lots of dirty tricks.""" start="00:16:06.160" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Object orientation in Lua""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Let me talk a bit about object""" start="00:16:08.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""orientation in Lua. It can be done in""" start="00:16:12.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""many ways...""" start="00:16:14.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the main book about Lua, called""" start="00:16:15.880" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""Programming in Lua", by one of the authors""" start="00:16:19.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the language, Roberto Ierusalimschy,""" start="00:16:21.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""presents several ways of doing""" start="00:16:23.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""object orientation in Lua... I hated all""" start="00:16:26.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of these ways - and also the ways that I""" start="00:16:29.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""tried from the rocks.""" start="00:16:33.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And then I wrote my own way""" start="00:16:34.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of doing object orientation in Lua... it's""" start="00:16:38.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very minimalistic, it's in this file here,""" start="00:16:40.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""eoo.lua... the main code is just this five""" start="00:16:43.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lines here...""" start="00:16:48.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and here's an example of how it works.""" start="00:16:49.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Here we define the class Vector,""" start="00:16:53.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with some metamethods...""" start="00:16:58.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this metamethod here will tell Lua""" start="00:17:02.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""what to do when the""" start="00:17:05.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""user asks to add two vectors, this one""" start="00:17:08.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here tells Lua what to do when the user""" start="00:17:12.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""asks Lua to convert a vector to a string,""" start="00:17:15.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and... whatever, this one is""" start="00:17:18.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something that I'm going to explain in a""" start="00:17:21.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""second. So, here we create a vector with""" start="00:17:24.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these coordinates, 3 and 4... here we create""" start="00:17:27.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""another Vector... if we "print" here then Lua""" start="00:17:30.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""uses this function here, in the __tostring...""" start="00:17:33.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""if we add the two vectors it uses this""" start="00:17:36.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""function here, in the __add metamethod, and""" start="00:17:39.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""if we run the method :norm...""" start="00:17:43.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it is defined here, in the table __index.""" start="00:17:45.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Anyway...""" start="00:17:49.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Even this thing being so small I used""" start="00:17:58.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to forget how its innards worked all""" start="00:18:02.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the time. Actually I always forget how""" start="00:18:04.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things work and I have to remember them""" start="00:18:08.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""somehow... and I have to have""" start="00:18:09.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""tricks for remembering, and tricks for""" start="00:18:12.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""summarizing things, and diagrams, and so""" start="00:18:15.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""on. And every time that I forgot how this""" start="00:18:18.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing worked I went back to the""" start="00:18:22.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""source code, and then I looked at the""" start="00:18:24.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams... or, of course, in the""" start="00:18:26.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""first times I had to draw the diagrams...""" start="00:18:29.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I run the examples, and of course in""" start="00:18:31.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in the beginning I thought that the code""" start="00:18:35.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""was clear and my examples were very""" start="00:18:36.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""brief, and so I had to rewrite the""" start="00:18:39.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples many times until they became,""" start="00:18:41.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""let's say...""" start="00:18:44.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""perfect.""" start="00:18:45.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was saying that Lua can be used in""" start="00:18:47.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""many ways, and in my way of using Lua - in""" start="00:18:52.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my favorite way - everything can be""" start="00:18:56.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""inspected and modified from REPLs,""" start="00:18:59.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""like we can do in Emacs and in SmallTalk,""" start="00:19:02.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""or sort of. So, in my""" start="00:19:06.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""favorite way of using Lua there's no""" start="00:19:08.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""security at all, everything can be""" start="00:19:10.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""changed at all times.""" start="00:19:12.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Of course most people hate that...""" start="00:19:14.920" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""My init file""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""My init file has lots of classes... by the""" start="00:19:19.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""way, instead of keeping many small files""" start="00:19:22.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with many things I put lots of stuff""" start="00:19:26.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in just one big init file.""" start="00:19:29.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""My init file has lots of classes,""" start="00:19:31.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and lots of global functions, and""" start="00:19:34.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lots of cruft - and people hate that,""" start="00:19:37.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of course. This is an example...""" start="00:19:41.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is the index at the top""" start="00:19:44.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of my init file,""" start="00:19:46.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the classes start here, and then""" start="00:19:48.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we have some functions, and""" start="00:19:53.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""then we have functions that load""" start="00:19:59.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""certain packages, and then we have... cruft.""" start="00:20:01.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Whatever.""" start="00:20:03.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Most people think that my style""" start="00:20:04.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of using Lua is dirty, and dangerous...""" start="00:20:08.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and they wouldn't touch my Lua code""" start="00:20:10.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with a 10 feet pole... but most of the""" start="00:20:12.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things that I'm going to present here in""" start="00:20:15.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this presentation are ideas that should""" start="00:20:18.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""be easy to port to other environments""" start="00:20:23.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and other languages, especially the""" start="00:20:28.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams... so the code is not so important.""" start="00:20:32.280" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""LaTeX and LuaLaTeX""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Now let me talk a bit about LuaLaTeX,""" start="00:20:35.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that is LaTeX with a Lua interpreter""" start="00:20:39.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""embedded inside, and two ways""" start="00:20:41.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of generating pictures in LaTeX: TikZ,""" start="00:20:44.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that is very famous, and Pict2e, that is not""" start="00:20:48.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very famous and that is very low level...""" start="00:20:54.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I think that not many people use it.""" start="00:20:57.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I said before that when I""" start="00:21:02.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""learned Lua I realized that it was""" start="00:21:04.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very good for writing little""" start="00:21:06.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""languages. I was doing my PhD at the""" start="00:21:09.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""time and typesetting the diagrams for""" start="00:21:14.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my PhD thesis was very boring, so""" start="00:21:19.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one of the things that I did was that I""" start="00:21:24.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""created a little language for typesetting""" start="00:21:29.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the diagrams for me. it was""" start="00:21:34.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""called Dednat because initially""" start="00:21:36.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it only generated diagrams for""" start="00:21:38.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Natural Deduction, and then it had""" start="00:21:41.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""several versions...""" start="00:21:43.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these are the slides for my""" start="00:21:45.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""presentation about Dednat6... "Dednat6 is""" start="00:21:46.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""an extensible semi-preprocessor for""" start="00:21:52.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""LuaLaTeX that understands diagrams in""" start="00:21:56.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""ASCII art"... in the sense that when I have""" start="00:22:01.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a .tex file that has this, and when""" start="00:22:05.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Dednat6 is loaded,""" start="00:22:11.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""when I give the right commands""" start="00:22:13.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Dednat6 interprets this block here as""" start="00:22:15.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something that defines this""" start="00:22:19.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagram... oops, sorry, it interprets this""" start="00:22:22.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagram here, this diagram in""" start="00:22:28.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""comments here, as something that defines""" start="00:22:30.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a diagram called foo... a deduction called""" start="00:22:34.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""foo, and it generates this code here...""" start="00:22:39.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so that we can just invoke""" start="00:22:41.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the definition of the""" start="00:22:44.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""deduction by typing \ded{foo}.""" start="00:22:45.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And Dednat6 also""" start="00:22:47.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""supports another language for typesetting""" start="00:22:50.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""bidimensional diagrams with""" start="00:22:57.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""arrows and stuff for category Theory and""" start="00:22:59.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""blah blah blah... the specifications of""" start="00:23:05.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these diagrams look like this...""" start="00:23:08.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here is a... sorry, here is a very good""" start="00:23:12.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""example, this is a huge diagram...""" start="00:23:14.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sorry, one second...""" start="00:23:16.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so, the source code that generates""" start="00:23:18.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this diagram here is just this thing at""" start="00:23:20.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the left, so it's very visual... we can""" start="00:23:25.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""typeset the diagram in ASCII art here and""" start="00:23:32.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""then in this part here we tell how""" start="00:23:35.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the nodes are to be joined, which""" start="00:23:38.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""arrows have to to have annotations, and""" start="00:23:41.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so on...""" start="00:23:43.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this language is extensible in""" start="00:23:45.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the sense that... uh, where's that...""" start="00:23:46.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here: comments that start with "%:"""" start="00:23:48.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""are interpreted as""" start="00:23:52.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""definitions for tree diagrams,""" start="00:23:54.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lines that start with "%D"""" start="00:23:56.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""define 2D diagrams with arrows and""" start="00:23:58.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""stuff, and lines that start with "%L"""" start="00:24:00.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""contain blocks of Lua code""" start="00:24:04.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that we can use to extend the interpreter""" start="00:24:06.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""on-the-fly...""" start="00:24:09.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""anyway, here are some recent""" start="00:24:10.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples of diagrams that I used""" start="00:24:12.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Dednat6 to typeset... this diagram""" start="00:24:15.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here was generated by this""" start="00:24:19.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specification here...""" start="00:24:21.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this diagram here with the""" start="00:24:22.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""curved arrows was generated by this""" start="00:24:27.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specification here.""" start="00:24:30.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, Dednat6 was very easy to extend,""" start="00:24:32.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and at some point I started to use it""" start="00:24:39.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to generate diagrams using Pict2e -""" start="00:24:41.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""mainly for the classes that I give""" start="00:24:44.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""at the University... I teach mathematics and""" start="00:24:47.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever... in a bad place. Whatever...""" start="00:24:50.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Let me show an animation... here is a""" start="00:24:57.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagram that I generated with Dednat6,""" start="00:25:00.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it is a flip book animation, like... we""" start="00:25:02.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""type PgUp and PgDn and we go""" start="00:25:06.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to the next page of the book and to the""" start="00:25:09.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""previous page of the book...""" start="00:25:11.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and here is the source code that generates""" start="00:25:12.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that. This source code is not very visual,""" start="00:25:16.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so it's quite clumsy to edit that""" start="00:25:19.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagram directly in the .tex file like""" start="00:25:22.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that...""" start="00:25:27.520" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Manim""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""These diagrams were inspired""" start="00:25:28.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by something called my Manim, that...""" start="00:25:30.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I forgot the name of the guy, but""" start="00:25:33.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's a guy that makes many videos about""" start="00:25:37.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Mathematics, and he created this library""" start="00:25:41.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""called Manim for generating his""" start="00:25:44.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""animations, and other people adapted""" start="00:25:48.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""his library to make it more accessible...""" start="00:25:51.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I tried to learn it, but""" start="00:25:55.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""each animation, even an animation""" start="00:25:59.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that has very few frames... each""" start="00:26:01.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""animation took ages to render, so it""" start="00:26:03.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""wasn't fun... and animations in PDFs can""" start="00:26:07.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""be rendered in seconds. So these""" start="00:26:11.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things were fun for me, because my laptop""" start="00:26:13.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is very very slow, and my Manim was not fun.""" start="00:26:18.680" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Generating diagrams from REPLs""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Anyway, writing code like this""" start="00:26:24.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""inside a .tex file was not very""" start="00:26:27.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""fun because it was hard to""" start="00:26:32.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""debug... so in 2022 I started to play""" start="00:26:35.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with ways of generating these""" start="00:26:38.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams from REPLs, and I found a""" start="00:26:41.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""way for Pict2e and a way for TikZ...""" start="00:26:43.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""each one of these ways became a video...""" start="00:26:47.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""if you go to the list of first-class""" start="00:26:50.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""videos of eev you're going to see""" start="00:26:53.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that there's a video about Pict2e here""" start="00:26:57.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here and a video about TikZ...""" start="00:26:59.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here you have some some information""" start="00:27:03.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""like length, an explanation, etc...""" start="00:27:05.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and here are the pages for these videos.""" start="00:27:09.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""My page about the video about Pict2e""" start="00:27:11.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""looks like this, it has some diagrams...""" start="00:27:16.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever... and this one is much""" start="00:27:20.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""nicer, and a lot of people""" start="00:27:23.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""watched that video... I mean, I think""" start="00:27:26.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that 250 people watched it - for me that's""" start="00:27:30.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a million of people...""" start="00:27:33.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this video is about how to""" start="00:27:35.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""extract diagrams from the manual... from""" start="00:27:39.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the TikZ manual and how to run those""" start="00:27:44.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples in a REPL and modify""" start="00:27:46.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""them bit by bit... this is a a""" start="00:27:49.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""screenshot... but let me go back.""" start="00:27:53.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""At that point these things were just""" start="00:27:57.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""prototypes, the code was not very nice...""" start="00:28:00.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and in this year I wrote... I was able""" start="00:28:03.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to unify those two ways of generating PDFs,""" start="00:28:07.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the one for TikZ and the one for Pict2e,""" start="00:28:12.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I unified them with many other""" start="00:28:16.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things that generated diagrams.""" start="00:28:18.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""The basis of these things is""" start="00:28:20.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something called Show2.lua... I'm not going""" start="00:28:24.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to show its details now, but its""" start="00:28:29.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""extension that generates TikZ code""" start="00:28:35.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is just this, so we can specify a""" start="00:28:39.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagram with just a block like this,""" start="00:28:43.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and then uh if we""" start="00:28:45.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""run :show00() it returns a string""" start="00:28:49.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that is just the body... the inner""" start="00:28:54.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""body of the .tex file, if we run this we""" start="00:28:56.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""see the whole .tex file, and if we run""" start="00:29:00.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this we save the .tex file and we""" start="00:29:03.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""compile the .tex file to generate a PDF...""" start="00:29:05.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and if we run this we show the PDF in""" start="00:29:08.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the lower right window.""" start="00:29:10.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And that's the same thing for all""" start="00:29:14.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my recent programs that generate""" start="00:29:17.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""PDFs - they are all""" start="00:29:20.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""integrated... here is the one that...""" start="00:29:22.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the basis for all my modules that generate""" start="00:29:26.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams with Pict2e...""" start="00:29:29.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""its demos are not very interesting,""" start="00:29:30.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so let me show some demos of""" start="00:29:34.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""extensions that do interesting things...""" start="00:29:36.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so, this is a diagram that I created""" start="00:29:39.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by editing it in a REPL...""" start="00:29:45.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I create several Pict objects here...""" start="00:29:47.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and if I execute this it""" start="00:29:51.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""compiles an object, generates a PDF, and""" start="00:29:54.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""if I tap this... here is the PDF.""" start="00:29:59.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And if I just ask Lua to""" start="00:30:04.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""display what is "pux", here,""" start="00:30:07.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it shows the source code in Pict2e""" start="00:30:10.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the diagram... and the""" start="00:30:15.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""nice thing is that it is indented, so""" start="00:30:18.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's easy to debug the Pict2e code.""" start="00:30:20.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""If anyone is interested the""" start="00:30:23.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""module that does the tricks for""" start="00:30:25.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""indentation is very easy to understand...""" start="00:30:28.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it has lots of tests and test blocks,""" start="00:30:31.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I think that its data""" start="00:30:35.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""structures are easy to understand.""" start="00:30:38.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Anyway... here is another""" start="00:30:42.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""example. The :show() is""" start="00:30:44.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here... it generates a 3D diagram.""" start="00:30:51.360" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Parsers""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""Now let me talk about parsers and""" start="00:30:56.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""REPLs in VERY strange places... I mean,""" start="00:31:06.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""using REPLs to build parsers step by step""" start="00:31:09.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and" replacing parts by more complex""" start="00:31:13.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""parts. So, I said that Lua is very""" start="00:31:17.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""minimalistic, and everybody knows that""" start="00:31:23.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""implementations of regular expressions""" start="00:31:28.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""are big and complex..""" start="00:31:30.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so, instead of coming with""" start="00:31:32.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""full regular expressions Lua comes with""" start="00:31:34.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something called "patterns" and a""" start="00:31:37.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""library function called "string.match".""" start="00:31:39.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Here is""" start="00:31:43.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a copy of the part of the manual that""" start="00:31:44.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""explains the syntax... a part of the""" start="00:31:50.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""syntax of of patterns... here's how""" start="00:31:53.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""string.match is described in the""" start="00:31:57.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""manual - it's just this... "looks for""" start="00:31:59.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the first match of pattern in the string""" start="00:32:03.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""as blah blah blah"... and then we have to""" start="00:32:05.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""go to the other section of the menual""" start="00:32:08.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that explains patterns.""" start="00:32:10.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lua patterns are so simple,""" start="00:32:11.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so limited, that they don't even""" start="00:32:20.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""have the the alternation operator...""" start="00:32:23.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here is how it is described in the""" start="00:32:26.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""elisp manual -""" start="00:32:29.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""backslash-pipe specifies""" start="00:32:31.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""an alternative, blah blah blah.""" start="00:32:36.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""When we want to to build more""" start="00:32:40.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""complex... regular expressions,""" start="00:32:42.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""patterns, grammars, etc... we have to use""" start="00:32:45.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""an external library for that... no,""" start="00:32:49.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sorry, a library that is external""" start="00:32:52.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but that was written by one of the""" start="00:32:56.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""authors of Lua itself. This library""" start="00:32:58.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is called Lpeg, and its manual says...""" start="00:33:00.880" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""Lpeg is a new pattern matching library for""" start="00:33:05.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lua based on Parsing Expression Grammars""" start="00:33:09.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""(PEGs)". The manual is very terse, I""" start="00:33:12.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""found it incredibly hard to read... it""" start="00:33:18.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""doesn't have any diagrams - it has some""" start="00:33:21.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples, though... and the Lua Wiki""" start="00:33:25.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""has a big page called Lpeg Tutorial""" start="00:33:29.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with lots of examples...""" start="00:33:33.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but it it also doesn't have""" start="00:33:35.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams and I found some things""" start="00:33:38.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""incredibly hard to understand.""" start="00:33:41.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""For example, this is something that is in""" start="00:33:42.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the the manual of Lpeg that I saw and I""" start="00:33:45.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thought: "Wow, great! This makes all sense""" start="00:33:48.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and is going to be very useful!"...""" start="00:33:51.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's a way to to build""" start="00:33:53.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""grammars that can be recursive,""" start="00:33:54.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and they sort of can encode BNF""" start="00:33:57.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""grammars... we just have to translate the""" start="00:34:01.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""BNF a bit to get rid of some""" start="00:34:03.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""recursions and to translate them to""" start="00:34:06.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""something else.""" start="00:34:08.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And the manual also has some things""" start="00:34:09.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that I thought: "Oh, no! I don't have any""" start="00:34:11.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""idea of what this thing does"... and in fact""" start="00:34:15.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I saw these things for the first""" start="00:34:18.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""time more than 10 years ago and they""" start="00:34:20.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""only started to make sense one year ago.""" start="00:34:22.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""One example is group captures.""" start="00:34:26.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lpeg also comes with a""" start="00:34:30.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""module called the Re module... let me""" start="00:34:36.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""pronounce as it in Portuguese - the Re""" start="00:34:38.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""module... its manual says: "The Re""" start="00:34:41.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""module (provided by the file re.lua in the""" start="00:34:45.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""distribution) supports a somewhat conventional""" start="00:34:48.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""regular expression syntax for pattern usage""" start="00:34:51.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""within lpeg"... and""" start="00:34:56.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is a quick reference... this""" start="00:34:58.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing is very brief, it has some nice""" start="00:35:03.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples but it's hard to understand anyway...""" start="00:35:06.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and here are some comments about""" start="00:35:08.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my attempts to learn Re.lua. This is""" start="00:35:13.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a class... in this case it's a very small""" start="00:35:17.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""class... this file implements a :pm()""" start="00:35:20.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""method - I'm going to show examples of""" start="00:35:24.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""other :pm() methods very soon - so, this is""" start="00:35:28.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a :pm() method for Re.lua that lets us""" start="00:35:32.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""compare the syntax of Lua patterns, Lpeg,""" start="00:35:35.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and Re... let's see this example here... so,""" start="00:35:38.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""if we run this it loads my version of""" start="00:35:44.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg... no, sorry, my version of lpegrex...""" start="00:35:47.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it shows that when we apply""" start="00:35:52.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the :pm() method to this Lua pattern, this""" start="00:35:57.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg pattern, and this Re pattern""" start="00:36:01.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they all give the same results. So we can""" start="00:36:04.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""use this thing... this kind of thing here""" start="00:36:08.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to show how to translate from Lua""" start="00:36:10.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""patterns, that are familiar because""" start="00:36:14.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they're similar to regular expressions,""" start="00:36:16.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""only weaker...""" start="00:36:18.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to lpeg, that is super weird""" start="00:36:20.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and to Re, that is not so weird.""" start="00:36:24.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Anyway, the comment says that in 2012""" start="00:36:27.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I had a project that needed a""" start="00:36:35.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""precedence passer that could parse""" start="00:36:37.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""arithmetical expressions with the right""" start="00:36:40.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""precedences... and at that point I was""" start="00:36:43.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""still struggling with pure lpeg, and I""" start="00:36:46.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""couldn't do much with it, so I tried to""" start="00:36:49.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""learn Re.lua instead, and I wrote this old""" start="00:36:52.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""class here...""" start="00:36:55.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that allowed me to use a preprocessor""" start="00:36:56.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""on patterns for Lua. And the thing is that""" start="00:37:01.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with this preprocessor I could""" start="00:37:03.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specify precedence grammars using this""" start="00:37:04.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing here, that worked, but was super""" start="00:37:07.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""clumsy... and I gave up after a few attempts.""" start="00:37:11.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and in 2022 I heard about something""" start="00:37:16.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""called lpegrex,""" start="00:37:21.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that was a... a kind of extension or Re,""" start="00:37:23.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it was much more powerful than re.lua,""" start="00:37:29.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but after a while I realized that it""" start="00:37:32.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""had the same defects as re.lua...""" start="00:37:34.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and let me explain that, because""" start="00:37:37.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it has all to do with the things about""" start="00:37:40.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""black boxes and magic that I told in the""" start="00:37:44.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""beginning. Both... I mean, sorry, neither""" start="00:37:48.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""re.lua or lpegrex had some features that""" start="00:37:52.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I needed... they didn't let us explore...""" start="00:37:57.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sorry, they received a pattern that was""" start="00:38:00.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specified as a string, and it converted""" start="00:38:03.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that into an lpeg pattern, but it didn't""" start="00:38:06.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""let us explore the the lpeg patterns""" start="00:38:09.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that it generated...""" start="00:38:12.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""their code was written in a way""" start="00:38:15.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that was REPL-unfriendly - I""" start="00:38:18.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""couldn't modify parts of the code""" start="00:38:21.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""bit by bit in a REPL and try to change""" start="00:38:24.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the code without changing the""" start="00:38:28.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""original file... the code was very""" start="00:38:31.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""hard to explore, to hack, and to extend -""" start="00:38:34.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in my opinion... the documentation was not""" start="00:38:36.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very clear... and I sent one or two messages""" start="00:38:39.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to the the developer of lpegrex and...""" start="00:38:43.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""he was too busy to help me. He""" start="00:38:47.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""answered it very briefly, and, uh, to be""" start="00:38:50.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""honest I felt... rejected. I felt that I""" start="00:38:53.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""wasn't doing anything interesting...""" start="00:38:56.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever, whatever...""" start="00:38:58.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, in 2022 I was trying to learn lpegrex""" start="00:39:03.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""because I was thinking that it would""" start="00:39:09.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""solve my problems - but it didn't...""" start="00:39:11.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it didn't have the features that I needed,""" start="00:39:13.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it was hard to extend, hard to explore,""" start="00:39:16.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and hard to debug, and I""" start="00:39:20.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""decided to rewrite it in a more""" start="00:39:23.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""hacker-friendly way - in the sense that...""" start="00:39:25.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""was modular, and I could replace any""" start="00:39:30.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""part of the module from a REPL...""" start="00:39:33.760" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""ELpeg1.lua""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""My version of it was called ELpeg1.lua...""" start="00:39:35.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I decided that in my version I""" start="00:39:43.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""wouldn't have the part that""" start="00:39:47.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""receives a grammar specified as a string""" start="00:39:49.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and converts that to lpeg... I would""" start="00:39:54.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""just have the backend part, that are the""" start="00:39:57.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""functions in lpeg that let us specify""" start="00:40:00.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""powerful grammars.""" start="00:40:04.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Let me go back. Let me explain a""" start="00:40:05.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""bit about lpeg... Lua has""" start="00:40:11.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""coercions: the + expects to receive""" start="00:40:15.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""true numbers, and if one of its arguments,""" start="00:40:21.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""or both of them, are strings, it converts""" start="00:40:24.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the string... the strings to numbers so in""" start="00:40:27.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this case here, 2+"3",""" start="00:40:29.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it returns the number 5,""" start="00:40:33.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this is the concatenation""" start="00:40:36.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""operator... it expects to receive""" start="00:40:39.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""strings, so in this case it will""" start="00:40:42.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""convert the number 2 to the string "2",""" start="00:40:45.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and the concatenation of thes two""" start="00:40:47.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things will be 23... oops, sorry, "23"""" start="00:40:50.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""as a string.""" start="00:40:54.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lpeg also has some coercions.""" start="00:40:56.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I usually set these""" start="00:40:58.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""globals to let me write my grammars""" start="00:41:01.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in a very compact way, so instead""" start="00:41:05.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of lpeg.B, lpeg.C, etc I use these globals,""" start="00:41:09.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""like uppercase B, uppercase C, and so on...""" start="00:41:14.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and with these globals I can write""" start="00:41:18.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""things like this: C(1)*"_"...""" start="00:41:21.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and lpeg knows that lpeg.C...""" start="00:41:26.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it sort of expands this to lpeg.C,""" start="00:41:33.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but lpeg.C expects to receive""" start="00:41:38.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""an lpeg pattern, and 1 is not yet an""" start="00:41:42.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg pattern, so it is coerced into an""" start="00:41:44.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg pattern by calling lpeg.P,""" start="00:41:47.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so this short thing here becomes""" start="00:41:51.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""equivalent to lpeg.C(lpeg.P(1)), and the""" start="00:41:55.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""multiplication, when at least one of its""" start="00:42:03.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""arguments is an lpeg pattern... it expects""" start="00:42:07.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to receive two lpeg patterns, and in""" start="00:42:10.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this case the one at the right is""" start="00:42:13.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""just a string, so it is coerced to an lpeg""" start="00:42:15.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""pattern by using lpeg.P.""" start="00:42:18.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""With this idea we can sort of""" start="00:42:20.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand the comparison here. I mean,""" start="00:42:25.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""let me run it again... this first part is""" start="00:42:28.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""very similar to a regular expression""" start="00:42:31.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here at the left...""" start="00:42:34.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and when we apply this... Lua pattern""" start="00:42:35.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to this subject here the result""" start="00:42:39.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is this thing here, this thing, this""" start="00:42:43.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing and this thing... I'm going to""" start="00:42:47.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""call each one of these results""" start="00:42:54.320" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""captures", so each of these things""" start="00:42:56.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""between parentheses "captures" a substring""" start="00:42:59.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the original string and these""" start="00:43:03.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""captured substrings are returned in a""" start="00:43:06.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""certain order. Here is how to express the""" start="00:43:08.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""same thing in lpeg...""" start="00:43:11.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's very cryptic but it's a""" start="00:43:12.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""good way to understand the some basic""" start="00:43:15.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""operators of lpeg, I mean we can look at""" start="00:43:20.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the manual and understand and""" start="00:43:23.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""what C, S and R do, and also""" start="00:43:26.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""exponentiation... and this strange thing""" start="00:43:30.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here receives this string here, runs""" start="00:43:37.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a function that I have defined, that""" start="00:43:41.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""converts it to an object of a certain""" start="00:43:43.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""class, and that class""" start="00:43:46.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""represents Re patterns, so this thing""" start="00:43:47.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is treated as a pattern for re.lua,""" start="00:43:52.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it is matched against the string,""" start="00:43:54.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and it returns the same thing as the""" start="00:43:56.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""other one.""" start="00:43:59.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Also, this thing here also has a""" start="00:44:02.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""comparison with lpegrex, but these""" start="00:44:05.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""patterns are very trivial, they""" start="00:44:08.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""don't do anything very strange...""" start="00:44:11.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so let's go back and see what""" start="00:44:13.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""kinds of very strange things there are.""" start="00:44:15.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Here is the page of lpegrex at github,""" start="00:44:18.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here's the documentation...""" start="00:44:26.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it's relatively brief,""" start="00:44:29.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it explains lpegrex as being an""" start="00:44:32.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""extension of Re.lua, so it explains""" start="00:44:35.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""mainly the additional features... here is a""" start="00:44:39.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""quick reference that explains only the""" start="00:44:42.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""additional features...""" start="00:44:45.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""some of the these things""" start="00:44:46.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was able to understand""" start="00:44:49.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by struggling a lot, and some I wasn't""" start="00:44:50.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""able to even by spending several evenings""" start="00:44:57.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""try to to build examples...""" start="00:45:02.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this is something very nice. Lpegrex""" start="00:45:04.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""comes with some example parsers... and""" start="00:45:12.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here is a parser that parses the Lua""" start="00:45:15.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""grammar - I mean, this is the the grammar""" start="00:45:18.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""for Lua 5.4 at the end of the""" start="00:45:22.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""reference manual... it's just this... this""" start="00:45:25.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is in a kind of BNF, and this is the BNF""" start="00:45:31.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""translated""" start="00:45:34.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to the language of lpegrex, so this""" start="00:45:35.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing uses many constructions that are""" start="00:45:39.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in re.lua and some extra constructions that""" start="00:45:43.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""are described here... and with these""" start="00:45:48.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""examples I was able to to understand""" start="00:45:50.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""some of the...""" start="00:45:54.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of these things here that are""" start="00:45:55.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""described here in the quick""" start="00:45:58.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""reference - but not all.""" start="00:46:00.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, I wasn't able to use lpegrex""" start="00:46:04.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by itself, because some things didn't""" start="00:46:11.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""make much sense, and I decided to""" start="00:46:14.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""reimplement it in my own style,""" start="00:46:16.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""because that would be a way to map...""" start="00:46:18.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to at the very least map what I had""" start="00:46:23.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understood and what I didn't, learn""" start="00:46:26.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""one feature at a time, do comparisons, and""" start="00:46:29.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so on.""" start="00:46:33.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Here I pointed to two features of lpeg...""" start="00:46:35.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in one I said "Oh, great! This thing can""" start="00:46:38.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""be used to to define grammars, even""" start="00:46:41.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""recursive grammars", and so on...""" start="00:46:44.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and this is an "Oh, no!" feature - one""" start="00:46:45.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing that didn't make any sense at all...""" start="00:46:49.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""group captures. One thing that I did to""" start="00:46:51.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand group captures was to""" start="00:46:56.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""represent them as diagrams. Of course in""" start="00:46:59.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the beginning I was drawing these""" start="00:47:02.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams by hand, but then I realized""" start="00:47:05.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that I could use the bits of lpeg""" start="00:47:08.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that I already knew to build a grammar""" start="00:47:11.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that would parse a little language and""" start="00:47:14.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""generate these diagrams in LaTeX, and I was""" start="00:47:17.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""able to make this.""" start="00:47:21.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""In this diagram here""" start="00:47:21.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this thing above the arrow is Lua code...""" start="00:47:25.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""a piece of Lua code that""" start="00:47:30.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specifies an lpeg pattern... this""" start="00:47:33.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing here at the top is the string that""" start="00:47:37.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""is being matched, and the things below""" start="00:47:39.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the underbraces are the captures that""" start="00:47:43.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""each thing... sorry, that each thing""" start="00:47:46.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""captures.""" start="00:47:50.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""For example, this underbrace here""" start="00:47:51.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""corresponds to this pattern here,""" start="00:47:58.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that parses a single character but""" start="00:48:00.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""doesn't return any captures, this thing""" start="00:48:02.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here parses a single "b" and doesn't""" start="00:48:05.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""return any captures, this thing here""" start="00:48:08.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""parses a single character and captures""" start="00:48:11.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it, and this thing here parses the""" start="00:48:14.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""character "d" and captures it... and this""" start="00:48:16.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""other thing here transforms this""" start="00:48:21.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""pattern into another pattern...""" start="00:48:24.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""returns first a capture with all""" start="00:48:27.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the string that was parsed by this""" start="00:48:33.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""pattern here, and then all the captures""" start="00:48:35.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""returned by this thing here before""" start="00:48:37.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the ":".""" start="00:48:41.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, this was a way to build""" start="00:48:42.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""concrete examples for things that the""" start="00:48:45.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpag manual was explaining in a very terse""" start="00:48:48.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""way, and it worked for me - some things""" start="00:48:52.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that were very""" start="00:48:55.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""mysterious started to make sense, and I""" start="00:48:57.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""started to have intelligent questions""" start="00:48:59.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to ask in the mailing list.""" start="00:49:03.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And with that I was able to""" start="00:49:06.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand what are group captures,""" start="00:49:10.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and group captures that receive a name...""" start="00:49:12.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Well, let me explain what this does.""" start="00:49:17.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""This thing here captures... sorry, parses""" start="00:49:22.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the empty string and returns this as a""" start="00:49:27.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""constant... so, this is something that""" start="00:49:29.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""doesn't exist in regular expressions...""" start="00:49:32.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""it parses nothing and""" start="00:49:35.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""returns this as a capture... then this""" start="00:49:38.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""thing here returns these two""" start="00:49:41.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""constants here, and parses the empty""" start="00:49:44.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""string, and this thing here converts""" start="00:49:47.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the results of this thing here into a""" start="00:49:51.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""group capture, and stores it in the label""" start="00:49:54.160" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""d"... and then here's another constant""" start="00:49:57.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""capture.""" start="00:50:03.280" video="mainVideo-repl" id="subtitle"]] + +[[!template new="1" text="""Building lists""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]] + +[[!template text="""And I realized that these things""" start="00:50:03.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here were similar to how Lua""" start="00:50:05.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""specifies building lists...""" start="00:50:08.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""when we build... sorry, tables. When""" start="00:50:09.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we build a table, and we say that the""" start="00:50:16.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""first element of the table is here, this""" start="00:50:18.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""element is put at the end of the table...""" start="00:50:21.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""when after the that would say d=42...""" start="00:50:23.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""we are putting the 42""" start="00:50:29.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in the the slot whose key is "d".""" start="00:50:31.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""This was happening with lpeg captures,""" start="00:50:34.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but there was something very strange...""" start="00:50:39.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""these group captures could hold""" start="00:50:43.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""more than one capture - more than one""" start="00:50:46.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""value... so there was something between""" start="00:50:49.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lists and tables. I started to use this""" start="00:50:51.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""notation to...""" start="00:50:58.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""explain in my notation what they""" start="00:51:00.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""were doing... many things started""" start="00:51:04.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to make sense, many mysterious""" start="00:51:08.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""sentences in the manual started to""" start="00:51:10.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""make sense... but some didn't...""" start="00:51:12.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but at least I was able to send""" start="00:51:14.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""some intelligent questions to the""" start="00:51:19.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""mailing lis,t and the author of Lua and""" start="00:51:22.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg answered some of them...""" start="00:51:25.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""he was not very happy about my""" start="00:51:27.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""questions - he... told me that those""" start="00:51:31.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""diagrams were a waste of time, the""" start="00:51:34.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""manual was perfectly clear, and so on...""" start="00:51:37.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever - but I was able to...""" start="00:51:40.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so, it was weird, but I was able to""" start="00:51:44.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""understand lots of things from his""" start="00:51:48.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""answers. This is a copy of one of""" start="00:51:51.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my messages, then there's another one,""" start="00:51:56.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""another one, some of them had diagrams...""" start="00:51:58.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""then he complained about these diagrams,""" start="00:52:01.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""he said that these things here, that look""" start="00:52:04.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""like table constructors, "do not exist"...""" start="00:52:08.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""whatever... anyway, once I understood""" start="00:52:11.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""group captures many features""" start="00:52:17.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""were very easy to understand""" start="00:52:20.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I started to be able to use lpeg to""" start="00:52:23.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""to build some very interesting things...""" start="00:52:26.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was able to reproduce some""" start="00:52:28.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of the features that I saw in lpegrex -""" start="00:52:33.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""remember that this... where is that?""" start="00:52:36.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this is the syntax of Lua... here -""" start="00:52:41.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was able to understand""" start="00:52:46.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""how these things here were translated to""" start="00:52:48.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg code... to lpeg patterns""" start="00:52:52.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""by using group captures in a certain""" start="00:52:55.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""way... I was able to implement them""" start="00:52:58.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in ELpeg1.lua...""" start="00:53:03.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and after some time I was able to use""" start="00:53:04.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""ELpeg1.lua to build grammars that""" start="00:53:08.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""were able to parse""" start="00:53:12.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""arithmetical expressions with the""" start="00:53:14.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""right precedence... and here's an example""" start="00:53:18.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in which I built the grammar step by step...""" start="00:53:20.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I test the current grammar, and I""" start="00:53:23.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""replace a bit, and then I test the new""" start="00:53:29.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""grammar and so on...""" start="00:53:35.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and you can see that the result is""" start="00:53:36.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""always a tree that is drawn in a""" start="00:53:39.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""nice two dimensional way...""" start="00:53:43.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""At this point these powers here""" start="00:53:44.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""are returned as a list,""" start="00:53:48.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""as an operation "pow"""" start="00:53:50.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""with several arguments, here... and then""" start="00:53:53.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I apply a kind of parsing combinator,""" start="00:53:57.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here... that transforms these trees into""" start="00:54:00.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""other trees and with these combinators""" start="00:54:03.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here I can specify that the "^" is""" start="00:54:08.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""associative in a certain direction...""" start="00:54:12.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that the "/" is associative in""" start="00:54:14.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""another direction... the "-" uses""" start="00:54:17.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the same direction as a the "/",""" start="00:54:20.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and so on... and they have the""" start="00:54:23.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""right precedences.""" start="00:54:26.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So, here are the tests...""" start="00:54:29.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here is my file ELpeg1.lua... it has""" start="00:54:34.560" video="mainVideo-repl" id="subtitle"]] +[[!template text="""several classes, each class has tests""" start="00:54:38.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""after it...""" start="00:54:41.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was able to implement something""" start="00:54:42.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that lpegrex has, that is called""" start="00:54:46.240" video="mainVideo-repl" id="subtitle"]] +[[!template text=""""keywords", that is very useful for parsing""" start="00:54:50.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""programs in programming languages...""" start="00:54:53.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I was able to implement something""" start="00:54:56.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""similar to the debugger... to the""" start="00:54:59.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""lpeg debugger lpeg uses... I was""" start="00:55:02.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""frustrated by some limitations of""" start="00:55:08.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the lpeg debugger, and I implemented""" start="00:55:11.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""my own that is, uh... much better!...""" start="00:55:16.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Let me show something else... I was""" start="00:55:23.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""able to translate a good part of the""" start="00:55:24.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Lua parser, here, to ELpeg1.lua... I haven't""" start="00:55:27.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""finished yet, but I have most of the""" start="00:55:33.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the translation here...""" start="00:55:38.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and after having all that I was able to""" start="00:55:39.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""build other grammars very quickly...""" start="00:55:47.280" video="mainVideo-repl" id="subtitle"]] +[[!template text="""writing new parsers finally became fun.""" start="00:55:50.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""And here's one example that I showed in the""" start="00:55:55.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""beginning.""" start="00:55:58.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""If I remember correctly...""" start="00:56:00.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I took a figure from the Wikipedia...""" start="00:56:05.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I don't have its link now...""" start="00:56:10.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""but I specified a grammar that parses""" start="00:56:12.440" video="mainVideo-repl" id="subtitle"]] +[[!template text="""exactly the example that appears""" start="00:56:17.080" video="mainVideo-repl" id="subtitle"]] +[[!template text="""in the Wikipedia...""" start="00:56:20.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""so, with my grammar, considering that""" start="00:56:20.840" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the top level entry is "Stmt", when I""" start="00:56:24.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""parse this string here""" start="00:56:28.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the result is this tree...""" start="00:56:30.680" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and I can do some operations on that,""" start="00:56:36.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I can define how this thing is to be""" start="00:56:41.120" video="mainVideo-repl" id="subtitle"]] +[[!template text="""converted into LaTeX,""" start="00:56:44.040" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I can define other operations""" start="00:56:45.640" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that convert trees into other trees, and""" start="00:56:49.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""here are some tests of these operations...""" start="00:56:53.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""This is what I showed in the beginning...""" start="00:56:54.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I'm not going to explain all the details""" start="00:57:00.360" video="mainVideo-repl" id="subtitle"]] +[[!template text="""of this thing now...""" start="00:57:02.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this :show() converts this thing""" start="00:57:04.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""into LaTeX in the way specified by these""" start="00:57:09.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""instructions here, that says that...""" start="00:57:11.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""well, whatever...""" start="00:57:16.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and here's the result - the LaTeXed result...""" start="00:57:25.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and these diagrams here are generated by""" start="00:57:32.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this file here, that defines a simple""" start="00:57:41.760" video="mainVideo-repl" id="subtitle"]] +[[!template text="""grammar that parses this thing here,""" start="00:57:46.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and then LaTeXes it in a certain way, and""" start="00:57:48.480" video="mainVideo-repl" id="subtitle"]] +[[!template text="""and also tests to check if this code here...""" start="00:57:52.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""this Lua code that generates an lpeg grammar...""" start="00:57:56.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""parses this subject here and""" start="00:58:02.000" video="mainVideo-repl" id="subtitle"]] +[[!template text="""returns the expected result...""" start="00:58:05.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""So: this is the code that I""" start="00:58:08.600" video="mainVideo-repl" id="subtitle"]] +[[!template text="""wanted to show. I wanted to show many""" start="00:58:12.240" video="mainVideo-repl" id="subtitle"]] +[[!template text="""more things but I wasn't able to prepare""" start="00:58:16.720" video="mainVideo-repl" id="subtitle"]] +[[!template text="""them before the conference... and I hope""" start="00:58:19.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""that soon - for some value of "soon" -""" start="00:58:23.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I'll be able to create REPL-based""" start="00:58:27.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""tutorials for lpeg, Re, and ELpeg1.lua...""" start="00:58:30.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""where lpeg is something very famous,""" start="00:58:33.920" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Re is a module of lpeg...""" start="00:58:36.320" video="mainVideo-repl" id="subtitle"]] +[[!template text="""I could also do something like this""" start="00:58:39.200" video="mainVideo-repl" id="subtitle"]] +[[!template text="""for lpegrex... and ELpeg1.lua is""" start="00:58:42.400" video="mainVideo-repl" id="subtitle"]] +[[!template text="""the thing that I wrote, the one that""" start="00:58:47.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""has test in comments, and the tests""" start="00:58:51.160" video="mainVideo-repl" id="subtitle"]] +[[!template text="""usually generate trees, and sometimes""" start="00:58:56.800" video="mainVideo-repl" id="subtitle"]] +[[!template text="""they generate TeX code.""" start="00:58:59.520" video="mainVideo-repl" id="subtitle"]] +[[!template text="""Yeah, so that's it! I wanted to""" start="00:59:00.880" video="mainVideo-repl" id="subtitle"]] +[[!template text="""present much more but I wasn't able to""" start="00:59:04.960" video="mainVideo-repl" id="subtitle"]] +[[!template text="""prepare it... so: sorry, thanks, bye! =)""" start="00:59:07.160" video="mainVideo-repl" id="subtitle"]] + +Questions or comments? Please e-mail [eduardoochs@gmail.com](mailto:eduardoochs@gmail.com?subject=Comment%20for%20EmacsConf%202023%20repl%3A%20REPLs%20in%20strange%20places%3A%20Lua%2C%20LaTeX%2C%20LPeg%2C%20LPegRex%2C%20TikZ) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/repl-before.md b/2023/info/repl-before.md new file mode 100644 index 00000000..0266527b --- /dev/null +++ b/2023/info/repl-before.md @@ -0,0 +1,28 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 60-min talk; Q&A: IRC +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="repl-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="repl-mainVideo" data=""" +00:00.000 Intro +00:21.560 Diagrams +01:03.320 eev +02:51.360 Another figure +08:52.560 eev-wconfig, magic, and black boxes +10:44.240 Lua +16:10.960 Object orientation in Lua +19:19.823 My init file +20:31.000 LaTeX and LuaLaTeX +25:28.280 Manim +26:30.880 Generating diagrams from REPLs +31:03.240 Parsers +39:03.200 ELpeg1.lua +50:04.160 Building lists + +"""]]<div></div>Duration: 59:10 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oAjqkLNfo9B63EE1G6cJJV">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/repl-nav.md b/2023/info/repl-nav.md new file mode 100644 index 00000000..7ef1a2a2 --- /dev/null +++ b/2023/info/repl-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a> +Next by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/sat-close-after.md b/2023/info/sat-close-after.md new file mode 100644 index 00000000..a40a2ed3 --- /dev/null +++ b/2023/info/sat-close-after.md @@ -0,0 +1,178 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="sat-close-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""[Speaker 0]: Session is being recorded.""" start="00:00:05.200" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Just waiting for Corwin and Leo.""" start="00:00:06.819" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Great. Corwin, would you like to share your""" start="00:00:16.359" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""screen?""" start="00:00:17.960" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Let's see the audio through BBB so we don't""" start="00:00:37.620" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""have to splice it in afterwards because it's""" start="00:00:39.840" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""annoying to splice things.""" start="00:00:41.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I mean, Leo will be taking care of it,""" start="00:00:43.680" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""not me, so. Okay, he's going to finish up.""" start="00:00:47.020" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: So, in the meantime, it's been a long day,""" start="00:00:52.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""people. Thanks for sticking around.""" start="00:00:55.320" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""And we're going to do a little bit of jazz""" start="00:00:57.180" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""handing until Corwin comes back.""" start="00:00:58.739" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Smack. I""" start="00:01:00.060" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 2]: can't imagine an Emacs con without getting to""" start="00:01:14.240" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""enjoy Leo's famous jazz hands.""" start="00:01:16.020" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: I can tell you it's a lot easier...""" start="00:01:21.420" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Hello? I can tell you it's a lot easier to do""" start="00:01:23.160" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""jazz hands at 9am EST than it is at 5pm EST,""" start="00:01:25.760" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""because for me it's 11 and I've barely seen""" start="00:01:30.860" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""this 1 today. Okay Corwin,""" start="00:01:34.160" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""do you have a presentation right now?""" start="00:01:39.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""We do not seem to be able to hear you,""" start="00:01:45.480" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Corwin. Okay, just bear with us,""" start="00:01:47.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""folks. We're gonna figure out this 1.""" start="00:01:55.240" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""This is the last bug of the day,""" start="00:01:57.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""and then we're clear until tomorrow.""" start="00:01:58.660" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 2]: I just heard you, but I don't know if it was""" start="00:02:05.820" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""here or via mumble. Okay.""" start="00:02:07.700" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Can we figure out? Whenever there's a problem""" start="00:02:14.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""like this, like Sash and myself are furiously""" start="00:02:17.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""typing in the background,""" start="00:02:19.460" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""we say, oh, can we fix this slide?""" start="00:02:20.640" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""But here, I'm stumped.""" start="00:02:22.740" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 2]: I think Corbin is in the GenTrack on Mumble.""" start="00:02:33.180" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, so let's all switch to GenTrack and""" start="00:02:40.520" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""we'll be able to figure out the way.""" start="00:02:43.780" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, well, while Corwin figures out how to""" start="00:03:18.420" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""get started, we might as well maybe do a""" start="00:03:21.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""little bit of closing remarks,""" start="00:03:23.940" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""and then you can jump in whenever you want.""" start="00:03:25.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Sounds good to me.""" start="00:03:29.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. Thank you, everyone,""" start="00:03:31.980" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""for coming to Emacs Conf 2023.""" start="00:03:34.459" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""We made it to the end of the first day!""" start="00:03:37.120" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Hooray! We're going to keep these closing""" start="00:03:39.140" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""remarks short because it's a long day.""" start="00:03:40.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""It's almost midnight and Leah will turn into""" start="00:03:42.880" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""a pumpkin very soon. So before that happens,""" start="00:03:44.920" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""we just want to say hello and thanks.""" start="00:03:48.580" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""And pre-recorded talks are already up.""" start="00:03:50.640" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""They're on the talk pages,""" start="00:03:55.260" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""they're on media.emaxcontent.org.""" start="00:03:56.520" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""We'll work on extracting the live talks,""" start="00:03:58.860" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""but it'll take a few weeks.""" start="00:04:00.620" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 3]: Maybe, you""" start="00:04:01.920" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 0]: know, we'll see how it goes.""" start="00:04:02.220" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Please feel free to spread the word,""" start="00:04:04.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""because you know some people didn't actually""" start="00:04:06.100" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""know there was EmacsConf this weekend,""" start="00:04:07.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""so let them know, because it's a lot of fun.""" start="00:04:09.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""More talks tomorrow. And if you've got ideas""" start="00:04:11.400" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""for making things better,""" start="00:04:15.020" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""or If you'd like to tell us what's working""" start="00:04:15.900" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""well and what you'd like,""" start="00:04:17.500" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""please put them in the conference pad at""" start="00:04:18.940" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""pad.emaxconf.org. Anything anyone want to""" start="00:04:21.180" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""add?""" start="00:04:26.580" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm all good.""" start="00:04:30.060" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 2]: Let's see if Corwin can get his mic to work.""" start="00:04:32.900" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""No, it's not.""" start="00:04:37.740" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, I mean, did you want to say something""" start="00:04:43.520" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""as well? Because people have heard you talk""" start="00:04:45.140" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""all day long on the Dev track,""" start="00:04:47.220" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""but not on the general track,""" start="00:04:49.120" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""actually. It's the first time they hear you""" start="00:04:50.240" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""today.""" start="00:04:51.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 2]: Right. Oh, well, way to put me on the spot,""" start="00:04:52.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""but more seriously, thanks.""" start="00:04:56.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""So yeah, it's a lot of fun.""" start="00:04:58.040" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""You know, it's, we sort of keep coming back""" start="00:05:00.340" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""every year and doing this conference.""" start="00:05:03.760" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""It's always been fun. And we keep doing it""" start="00:05:06.300" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""thanks to, you know, all the people who""" start="00:05:08.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""submit all these amazing talks with these""" start="00:05:11.320" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""amazing sessions. And of course the audience""" start="00:05:14.600" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""as well. I don't have a lot to say I guess""" start="00:05:16.560" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""for today because I think we're hoping to""" start="00:05:19.940" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""keep it kind of short and sweet.""" start="00:05:21.500" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""So yeah, I think that's about it for me.""" start="00:05:24.400" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I guess we'll maybe wait another minute or so""" start="00:05:25.920" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""to see if Cormen can make it.""" start="00:05:28.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""But yeah, that's all for me.""" start="00:05:30.580" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, great. Speaking of putting people""" start="00:05:34.820" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""on the spot, you might see a face in the room""" start="00:05:37.920" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""that you might have seen last year,""" start="00:05:41.600" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""but we've got Flobby Koda in the room as""" start="00:05:43.840" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""well, who you might not have heard of him but""" start="00:05:45.700" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""he's been doing a lot of the check-ins today""" start="00:05:49.400" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""for most of the speakers and he's been doing""" start="00:05:51.140" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""a wonderful job at it.""" start="00:05:53.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Florian, do you want to say a word if only to""" start="00:05:54.520" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""say you're being put on the spot?""" start="00:05:56.560" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 4]: I have nothing prepared really but I just""" start="00:06:00.620" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""want to thank everybody who could,""" start="00:06:02.840" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""with who I could talk in between.""" start="00:06:05.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""So I had like wonderful 20 to 30 minute talks""" start="00:06:07.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""with every speaker before they get into the""" start="00:06:10.580" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""live Q&A or the live presentation.""" start="00:06:12.900" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Thanks a lot for everybody,""" start="00:06:15.780" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I learned quite a lot and also thank you for""" start="00:06:16.920" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""all of you guys and everyone for having such""" start="00:06:19.640" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""a beautiful experience here.""" start="00:06:22.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, thank you. We're glad to have you.""" start="00:06:25.960" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Okay, Sasha, Unless you've got anything else""" start="00:06:29.180" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""to add, and Corwin, have you fixed your""" start="00:06:31.120" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""microphone? Yes, we can hear you Corwin.""" start="00:06:33.880" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Okay, well let's start again.""" start="00:06:38.400" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Let's forget everything you've heard for the""" start="00:06:39.160" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""last 20 minutes. We'll start again.""" start="00:06:40.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I'm just kidding.""" start="00:06:41.640" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 3]: You tell me. No, I mean,""" start="00:06:35.280" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I don't know what I could possibly add to all""" start="00:06:45.560" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""that. I think we absolutely should get some""" start="00:06:47.760" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""rest, save it for tomorrow.""" start="00:06:50.200" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I was just looking through these notes in the""" start="00:06:52.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""couple of minutes that I had between my own""" start="00:06:55.240" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""talk. Thank you for your help with that.""" start="00:06:57.480" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""But also, especially you,""" start="00:07:00.720" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Sasha, and Leo, and everybody in the IRC over""" start="00:07:02.420" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""the months here, just encouraging me to keep""" start="00:07:08.040" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""going when it was just seemed futile.""" start="00:07:10.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Even though it just really turned into a""" start="00:07:13.580" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""brain dump, I appreciate getting the chance""" start="00:07:15.780" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""of feeling like that process is more""" start="00:07:18.120" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""documented now than it was before I did it.""" start="00:07:20.320" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Hey, that's not nothing,""" start="00:07:22.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""right? And that's why we all do this.""" start="00:07:23.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""And I don't know, Floey really said it""" start="00:07:25.440" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""perfect. Like, I appreciate the chance to get""" start="00:07:28.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""to work on this with you.""" start="00:07:30.520" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I learned so much.""" start="00:07:31.560" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: Amazing. Well, you know what?""" start="00:07:36.400" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Without further ado, I believe it's time for""" start="00:07:39.020" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""us to say goodbye for day 1.""" start="00:07:41.380" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""We will obviously be seeing you tomorrow at 9""" start="00:07:42.840" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""a.m. I think the schedule is actually stating""" start="00:07:45.340" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""we're starting at 8.59am.""" start="00:07:48.740" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Is it correct?""" start="00:07:50.500" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, I think the chrono tab will kick in.""" start="00:07:51.220" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""The video is like 6 minutes long.""" start="00:07:54.020" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Actually, maybe I should,""" start="00:07:57.620" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I'll give it an extra minute for safety,""" start="00:07:58.660" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""I think. Yeah, yeah. I'll tweak the timing.""" start="00:08:00.660" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 1]: I think that'd be wise for people we do not""" start="00:08:04.340" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""know basically 8.59 is when I brush my teeth""" start="00:08:06.420" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""before going live so we might be in a very""" start="00:08:08.460" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""awkward spot for me to introduce the talk if""" start="00:08:10.680" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""it happens. Well anyway folks thank you very""" start="00:08:12.740" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""much for watching and we'll see you tomorrow.""" start="00:08:15.420" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""Bye-bye! All right, I have closed the bbb oh""" start="00:08:19.360" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""it's restarting apparently oh it's we're back""" start="00:08:31.320" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""on the q and a between stephan and let's""" start="00:08:34.780" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""close this hey we are off""" start="00:08:37.480" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""[Speaker 3]: we are clear I am pausing the recording I""" start="00:08:44.700" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""don't have permission to do that in this""" start="00:08:52.540" video="mainVideo-sat-close" id="subtitle"]] +[[!template text="""room.""" start="00:08:54.280" video="mainVideo-sat-close" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-close%3A%20Saturday%20closing%20remarks) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/sat-close-before.md b/2023/info/sat-close-before.md new file mode 100644 index 00000000..d44b5b4b --- /dev/null +++ b/2023/info/sat-close-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 9-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="sat-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 09:00 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/sat-close-nav.md b/2023/info/sat-close-nav.md new file mode 100644 index 00000000..219f76fc --- /dev/null +++ b/2023/info/sat-close-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/sat-open">Saturday opening remarks</a> +Next by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/sat-open-after.md b/2023/info/sat-open-after.md new file mode 100644 index 00000000..aee69d2e --- /dev/null +++ b/2023/info/sat-open-after.md @@ -0,0 +1,132 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="sat-open-mainVideo-transcript"></a> +# Transcript + +[[!template text="""Welcome to EmacsConf 2023, where we get to find out""" start="00:00:00.000" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""just how much we can do with a text editor.""" start="00:00:04.559" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Just like last year, we have two tracks.""" start="00:00:07.698" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""There's a General track and a Development track,""" start="00:00:10.317" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""but really, you'll probably find""" start="00:00:12.656" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""interesting things on both tracks""" start="00:00:14.235" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""no matter what your level of experience is,""" start="00:00:15.954" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so don't feel limited to one or the other.""" start="00:00:18.493" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""For Saturday, it's mostly Org Mode talks on the General track.""" start="00:00:21.152" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The doc talk on the development track""" start="00:00:24.711" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""is about literate documentation with Emacs and Org Mode,""" start="00:00:26.870" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and it's a general-audience talk""" start="00:00:30.129" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""even though it's in the Development track.""" start="00:00:31.688" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""I just ran out of space in the schedule.""" start="00:00:33.607" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:35.266" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:38.505" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and I'll give you a quick overview as well.""" start="00:00:41.264" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:44.043" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""using free and open source software.""" start="00:00:47.522" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Using a streaming media player like mpv""" start="00:00:50.401" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:52.820" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""but there are also web-based players""" start="00:00:56.219" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""just in case that's all you've got.""" start="00:00:57.818" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The schedule shows the General track on top""" start="00:01:00.297" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and the Development track on the bottom,""" start="00:01:02.296" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so you can see what else is going on.""" start="00:01:03.975" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""As you're watching the talks,""" start="00:01:06.594" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""you can refer to the schedule in another window.""" start="00:01:07.793" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Hover over the boxes to see the times and titles,""" start="00:01:10.692" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and click on the boxes in the schedule""" start="00:01:13.711" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""to jump to the talk's page for more details.""" start="00:01:15.610" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:18.389" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or as an Org file in different time zones.""" start="00:01:20.928" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Many talks will be followed by""" start="00:01:23.187" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:24.686" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:27.345" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:30.424" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:33.423" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can join the web conference room""" start="00:01:36.582" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""by clicking on the BBB link""" start="00:01:38.281" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:39.900" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:42.839" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""To improve performance, please keep your webcam off""" start="00:01:45.758" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:48.217" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""This year we're experimenting with automatically switching""" start="00:01:50.956" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""between talks and Q&A sessions,""" start="00:01:53.575" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so the transitions on the stream might be a little sudden,""" start="00:01:55.934" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""but people in the BigBlueButton room""" start="00:01:59.133" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""can continue the conversation""" start="00:02:00.892" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""even after the talk moves off-stream.""" start="00:02:02.571" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:02:05.410" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""depending on what the speakers prefer.""" start="00:02:08.769" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:11.088" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and on the schedule page as well.""" start="00:02:14.107" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Please ask your questions in the recommended places""" start="00:02:16.826" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so that the speakers can easily see them.""" start="00:02:19.265" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Some talks will have the Q&A after the event,""" start="00:02:21.784" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so you can add your questions to their Etherpad.""" start="00:02:24.503" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We'll e-mail the speakers afterwards""" start="00:02:27.362" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and update the talk pages when they answer.""" start="00:02:29.461" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:02:32.360" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:02:35.499" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:02:38.978" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""on how to make the most of Q&A.""" start="00:02:42.537" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you can, please add notes and ask questions""" start="00:02:45.236" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:48.015" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for everyone to share their notes,""" start="00:02:51.174" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:52.833" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:55.772" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We have one pad for each talk,""" start="00:02:59.791" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""so you can follow the links to get to the next one""" start="00:03:01.850" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or go back to the schedule and get the link from there.""" start="00:03:03.969" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you have general feedback about""" start="00:03:07.128" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""the conference itself, please put it in""" start="00:03:08.767" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""pad.emacsconf.org/2023 , which is linked on each pad.""" start="00:03:10.926" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can also use this as a general community message board""" start="00:03:16.385" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for things like Help Wanted.""" start="00:03:19.044" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:03:22.183" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""to be part of lots of conversations.""" start="00:03:25.320" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:27.961" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""through your web browser. The tabs on the left can help you""" start="00:03:31.680" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""switch between the different channels.""" start="00:03:34.519" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:37.078" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:40.340" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:43.696" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:47.415" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:52.394" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Of course, you can join any of these channels""" start="00:03:55.673" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""with your favourite IRC client.""" start="00:03:57.792" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""We're on the libera.chat network.""" start="00:04:00.071" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Once again, we're going to be streaming with open captions""" start="00:04:03.910" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:04:06.549" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:04:09.628" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:04:12.987" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:04:15.706" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you need additional accommodations,""" start="00:04:19.205" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""please let us know in #emacsconf-org""" start="00:04:21.024" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and we'll see if we can make things happen.""" start="00:04:23.784" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:04:25.683" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If it doesn't look like we've noticed yet,""" start="00:04:29.922" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:31.781" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""where we will be quietly panicking.""" start="00:04:35.220" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""In all of these conversations, please keep in mind""" start="00:04:37.379" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:04:40.078" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""They basically boil down to: please be nice.""" start="00:04:43.077" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:46.557" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""should be available from the talk pages""" start="00:04:48.996" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""shortly after they start playing,""" start="00:04:50.995" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and we'll post the recordings of live talks""" start="00:04:52.734" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:54.633" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:57.752" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""the emacsconf-discuss mailing list.""" start="00:05:00.271" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""All right, let's get going.""" start="00:05:03.570" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Leo Vivier is hosting the general track,""" start="00:05:05.129" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and Amin Bandali hosting the development track.""" start="00:05:07.529" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:05:10.648" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:05:13.367" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""That's also where we get to thank""" start="00:05:15.446" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""all the people and organizations""" start="00:05:17.085" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""who make EmacsConf even possible.""" start="00:05:18.724" video="mainVideo-sat-open" id="subtitle"]] +[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:21.763" video="mainVideo-sat-open" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sat-open%3A%20Saturday%20opening%20remarks) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/sat-open-before.md b/2023/info/sat-open-before.md new file mode 100644 index 00000000..c812c4c6 --- /dev/null +++ b/2023/info/sat-open-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 6-min talk; Q&A: Etherpad +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="sat-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:25 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wEZX2JkDFpFqNFXnYeQTyb">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/sat-open-nav.md b/2023/info/sat-open-nav.md new file mode 100644 index 00000000..c1355bfc --- /dev/null +++ b/2023/info/sat-open-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a> +Next by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/scheme-after.md b/2023/info/scheme-after.md new file mode 100644 index 00000000..17b95b51 --- /dev/null +++ b/2023/info/scheme-after.md @@ -0,0 +1,544 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="scheme-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Hello and welcome everyone on EmacsConf 2023.""" start="00:00:02.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I'm Andrew Tropin.""" start="00:00:07.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I work on operating systems and programming languages.""" start="00:00:08.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Today, we discuss Lisps, Schemes, REPLs,""" start="00:00:11.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""interactive development,""" start="00:00:16.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and how to make your own cozy development environment.""" start="00:00:18.140" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Interactive development""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Let's start from interactive development.""" start="00:00:23.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Lisps are famous for a nice""" start="00:00:26.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Interactive Development Experience.""" start="00:00:29.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""They have REPLs.""" start="00:00:32.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Emacs Lisp has its own Lisp machine,""" start="00:00:34.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and a lot of cool IDE with different functionality""" start="00:00:40.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""is already here and providing""" start="00:00:44.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""a nice and pleasant experience.""" start="00:00:47.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""The question is, is it enough?""" start="00:00:51.620" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""In most cases, yes, but for some languages,""" start="00:00:56.840" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""we have some white spaces, some missing pieces.""" start="00:00:59.921" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And for example, in Scheme world,""" start="00:01:04.840" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""we already have a few tools.""" start="00:01:08.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""We have REPL, we have integration for REPL in Emacs,""" start="00:01:10.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""but is it enough?""" start="00:01:14.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Let's see.""" start="00:01:16.680" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""REPL: Read Eval Print Loop""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""We know that Emacs is very good for Lisps and REPL.""" start="00:01:18.180" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Lisp and Emacs should be a perfect setup.""" start="00:01:22.840" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But let's see how REPL basically works.""" start="00:01:26.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's an event loop which does three things.""" start="00:01:30.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It reads an expression, it evaluates the expression,""" start="00:01:34.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and it prints the result.""" start="00:01:37.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""We can take a simple expression, input it into REPL,""" start="00:01:40.740" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and evaluate it and see the result.""" start="00:01:47.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Very nice, very convenient.""" start="00:01:48.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You can experiment and see immediately what is happening.""" start="00:01:50.820" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You can even run a long-running process""" start="00:01:55.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which does something.""" start="00:01:57.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You can interrupt it and everything will be okay.""" start="00:01:58.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But the problem appears""" start="00:02:07.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""when you start to develop a bigger project.""" start="00:02:08.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And in most cases, you don't do""" start="00:02:11.660" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""your whole development in REPL.""" start="00:02:14.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You do only a small part of it.""" start="00:02:16.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""In most cases, you just write""" start="00:02:18.461" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the source code in text files,""" start="00:02:20.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and after that, you run those snippets of code""" start="00:02:22.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""from those text files, or run the whole project.""" start="00:02:26.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's not very convenient to copy and paste""" start="00:02:30.721" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""every time the snippets of code to the REPL,""" start="00:02:33.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""see the result, modify the snippet of code,""" start="00:02:36.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""copy it again, and so on.""" start="00:02:38.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So people invented some integration""" start="00:02:41.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""between REPL and your text editor.""" start="00:02:44.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So you can evaluate expressions inside your text editor""" start="00:02:46.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and see the result here.""" start="00:02:51.600" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Long-lasting loops""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Works good so far, but what happens""" start="00:02:53.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""if we run a long-lasting loop,""" start="00:02:56.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which does a lot of operations.""" start="00:03:02.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""As you can see here with a simple example,""" start="00:03:05.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the output of the function,""" start="00:03:07.840" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""stdout of the function is presented here,""" start="00:03:13.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and the resulting value is here.""" start="00:03:16.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""If you run a long-running process,""" start="00:03:18.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you don't see anything happening.""" start="00:03:22.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And you see there's a watch instead of my cursor.""" start="00:03:24.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Maybe you don't see it, but nothing actually happens,""" start="00:03:29.260" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""at least from the point of view of the user.""" start="00:03:33.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But if we interrupt the evaluation,""" start="00:03:36.380" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""we will see that some process in the background""" start="00:03:38.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""was launched, but we didn't see anything.""" start="00:03:41.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Because the REPL is a single-threaded blocking process,""" start="00:03:44.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which reads stdin and prints stdout,""" start="00:03:51.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""make the integration""" start="00:03:54.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""between the REPL and your text editor""" start="00:03:55.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""is not an easy task.""" start="00:03:58.541" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And even if you do it,""" start="00:04:02.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you have a lot of downsides, usually.""" start="00:04:04.321" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Not interruptible""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""First of all, the process is not interruptible.""" start="00:04:07.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""If you have a remote process which listens on the socket""" start="00:04:13.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to which you connect from your development environment,""" start="00:04:18.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you run some infinite loop, for example,""" start="00:04:21.940" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you can't interrupt it.""" start="00:04:25.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Because interruption is done via signals,""" start="00:04:28.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and signals to remote processes are not usually""" start="00:04:31.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the thing in such integrations.""" start="00:04:35.040" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Output is not interactive""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Output is also not interactive.""" start="00:04:38.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Usually, for example, here you can see""" start="00:04:41.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""when I evaluate the expression,""" start="00:04:45.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the output is captured on the evaluation side,""" start="00:04:47.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and after that, after the whole evaluation""" start="00:04:51.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""of the whole expression finished,""" start="00:04:53.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I get the result, all the stdout at once.""" start="00:04:56.180" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And if I run the process which evaluates for 5 seconds,""" start="00:05:06.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I will see the first signs of the life""" start="00:05:09.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""only after 5 seconds of evaluation.""" start="00:05:13.781" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Okay, what else?""" start="00:05:17.040" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""No protocol""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""When you do such integrations, you have no protocol,""" start="00:05:23.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you have just stdin and stdout.""" start="00:05:26.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You print to stdin from your text editor.""" start="00:05:29.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You read from stdout of the process.""" start="00:05:32.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's hard to tell if evaluation is finished,""" start="00:05:36.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""if it requires stdin, and how to extend the REPL""" start="00:05:40.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to make it more featureful, and so on.""" start="00:05:47.320" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Not scalable""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""And also, such integrations are usually not very scalable.""" start="00:05:51.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""For example, if you want to have a completion,""" start="00:05:57.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you type something, you have the completion. Cool.""" start="00:06:14.700" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But if you run the process and at the same time""" start="00:06:17.461" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""try to have a completion, you don't have it,""" start="00:06:22.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""because the evaluation is in progress,""" start="00:06:24.621" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can't calculate the completion candidates""" start="00:06:29.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""at the same time. To make it more obvious,""" start="00:06:33.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I will start a completion here.""" start="00:06:35.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You see the completion pop-ups.""" start="00:06:41.020" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I start the evaluation process,""" start="00:06:43.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and when I try to complete something,""" start="00:06:46.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the evaluation freezes and there is no completion.""" start="00:06:49.860" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Not very convenient.""" start="00:06:53.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Usually, you have some long-running processes""" start="00:06:55.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you want them to continue while you have""" start="00:06:58.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""your go to definition, completion, and other things.""" start="00:07:01.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Overall, those issues make it quite inconvenient""" start="00:07:08.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to integrate REPL in text editors or development environments,""" start="00:07:13.660" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""so you need something else""" start="00:07:18.420" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to make the work comfortable.""" start="00:07:21.380" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""nREPL""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""There is already a solution called nREPL.""" start="00:07:25.860" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's a synchronous protocol which allows""" start="00:07:28.980" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to send operations to the server""" start="00:07:31.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and receive responses in a synchronous manner.""" start="00:07:34.020" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And here is a simple example of a few operations.""" start="00:07:37.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""First one is cloning the existing session,""" start="00:07:42.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and as a response you will get a new session.""" start="00:07:45.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Also you send the evaluation request with code""" start="00:07:49.241" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that you want to evaluate, and you get two responses.""" start="00:07:52.100" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""First one says that output is captured""" start="00:07:55.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and it's equal to "hi\n",""" start="00:08:00.601" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and after that, you receive an "Evaluation completed",""" start="00:08:02.840" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the value of this expression.""" start="00:08:06.561" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""This protocol was developed""" start="00:08:12.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""for CIDER development environment.""" start="00:08:14.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's a Clojure development environment for Emacs.""" start="00:08:15.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It's very cool, featureful, reliable,""" start="00:08:18.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and I would say production-ready.""" start="00:08:22.860" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""A lot of professional Clojure developers use it.""" start="00:08:26.900" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""The nREPL protocol is very simple.""" start="00:08:31.500" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It has a few operations out of the box,""" start="00:08:33.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can extend it with any arbitrary operation you want.""" start="00:08:38.220" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I work a lot on Guix codebase and other Scheme projects,""" start="00:08:46.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""so the experience I had previously with nREPL""" start="00:08:53.820" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""was not satisfying. I decided""" start="00:08:57.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to just implement nREPL protocol.""" start="00:08:59.400" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Arei, Ares, and how to try""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""First of all, I implemented nREPL server in Guile.""" start="00:09:01.740" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I called it `guile-ares-rs`, and used it""" start="00:09:05.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""with a generic nREPL client for Emacs.""" start="00:09:11.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It worked.""" start="00:09:13.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It had some rough edges, but overall it was okay.""" start="00:09:14.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And after that, to add more features""" start="00:09:18.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to make the implementation more complete,""" start="00:09:21.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I wrote my own nREPL client for Emacs and called it `arei`.""" start="00:09:25.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And I got almost complete Guile IDE in two months.""" start="00:09:33.220" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So `ares-rs` is nREPL server implementation.""" start="00:09:40.180" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""`arei` is Emacs client, which uses the same nREPL protocol.""" start="00:09:45.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It utilizes `sesman` package for managing sessions,""" start="00:09:49.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the association of buffers with nREPL connection.""" start="00:09:54.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It has some roots.""" start="00:10:00.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""The implementation has some roots""" start="00:10:04.380" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in Geiser, CIDER, Monroe, and Rail.""" start="00:10:06.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I took small snippets for some parts of functionality.""" start="00:10:09.980" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I used the CAPF and xref infrastructure""" start="00:10:15.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""for completion at point and cross-reference capabilities.""" start="00:10:19.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And by the time of conference, I hope""" start="00:10:23.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that README will be complete enough""" start="00:10:27.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""so you will be able to try it yourself.""" start="00:10:30.200" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Let's see what is possible with it already.""" start="00:10:34.180" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Let's connect to nREPL server.""" start="00:10:42.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""After that, you can evaluate the expression.""" start="00:10:51.900" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And you see the stdout and the result.""" start="00:10:56.281" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Very nice, very convenient.""" start="00:11:02.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You have different expression, you evaluate it,""" start="00:11:04.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you get the value of the evaluation.""" start="00:11:08.660" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You can run an infinite loop""" start="00:11:10.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which prints to stderr and stdout""" start="00:11:12.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you see all necessary stuff.""" start="00:11:15.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Very cool.""" start="00:11:18.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But also, you can interrupt the evaluation,""" start="00:11:19.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which is very convenient if you accidentally""" start="00:11:21.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""run an infinite loop.""" start="00:11:25.160" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Continuations""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Also, do you remember here we have a few more examples""" start="00:11:27.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that we didn't try yet?""" start="00:11:32.940" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""For example, on usual REPL implementation,""" start="00:11:34.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""if I evaluate this expression, I get return value.""" start="00:11:39.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I make a continuation and save it to this variable""" start="00:11:47.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and I try to call this evaluation""" start="00:11:50.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and I get an exception,""" start="00:11:52.860" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""because the environment in which this continuation""" start="00:11:55.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""was created was different and it has redefined""" start="00:11:58.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""stdout and stderr to capture it.""" start="00:12:03.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But when I run it one more time,""" start="00:12:06.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""when I resume the continuation,""" start="00:12:08.980" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the environment changed and it doesn't work.""" start="00:12:12.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""What happens in `arei`?""" start="00:12:15.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I define continuation, I save the continuation""" start="00:12:17.420" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""for the simple expression""" start="00:12:21.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and I resume the continuation with a new argument,""" start="00:12:23.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can see at the top of the screen""" start="00:12:27.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that it works perfectly fine.""" start="00:12:30.140" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Reading from stdin""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Also, with a usual REPL implementation,""" start="00:12:32.460" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""let's see what happens when we have a process""" start="00:12:35.560" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which reads from stdin.""" start="00:12:40.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I evaluate the expression and nothing visible happens.""" start="00:12:41.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I can try to type `C-g`, `C-c`,""" start="00:12:48.100" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and after some time it will say user interrupt.""" start="00:12:53.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""What actually I expect in such a case""" start="00:12:56.560" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to have a minibuffer which prompts me for the input.""" start="00:13:00.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""When I evaluate the same expression in the `arei`,""" start="00:13:04.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you see the prompt at the minibuffer""" start="00:13:10.020" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and here I can tell, "Hello I'm a message from minibuffer".""" start="00:13:12.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Cool. You will see that this message is printed to stdout,""" start="00:13:21.900" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and unspecified was returned""" start="00:13:26.100" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""as a result of this expression.""" start="00:13:28.680" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Fancy example with continuations""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Let's make some fancy example with continuations.""" start="00:13:33.420" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Continuations is a very cool mechanism""" start="00:13:37.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which is not the topic of today's talk,""" start="00:13:45.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""but you can find a lot of interesting information""" start="00:13:48.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in Scheme documentation or in related books,""" start="00:13:51.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and I advise you to do it because it's really nice thing""" start="00:13:54.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that is actually applicable""" start="00:13:58.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in many different programming languages.""" start="00:14:00.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Here you can see the infinite loop""" start="00:14:03.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which just prints values increasing one by one.""" start="00:14:05.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And here we save a continuation on each iteration.""" start="00:14:09.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I can call the continuation""" start="00:14:13.300" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and it will resume from the previous saved step.""" start="00:14:18.060" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And you can see, it resumed from the same step""" start="00:14:21.940" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""we interrupted earlier, but we provided a new value for it. +another value for it.""" start="00:14:27.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""We can provide another value""" start="00:14:31.641" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and it resumed from the same spot it was saved earlier.""" start="00:14:33.921" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But I also can provide a `read-i` value""" start="00:14:39.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and if I provide `read-i` value,""" start="00:14:42.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the infinite loop will read the input from stdin""" start="00:14:45.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and will continue the evaluation""" start="00:14:50.780" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""with a different `i` provided in this input.""" start="00:14:53.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So let's try to type some arbitrary value""" start="00:14:56.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you see that the loop continued with this value.""" start="00:15:03.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Very nice.""" start="00:15:07.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And every time we could easily interrupt it.""" start="00:15:08.040" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Guix API""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Okay, what most annoying thing that I had previously""" start="00:15:13.160" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""with the usual REPL implementation""" start="00:15:17.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that I have a quite nice Guix API""" start="00:15:19.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""where I can build packages, systems and other stuff.""" start="00:15:22.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But if I evaluate this expression, I will get an error.""" start="00:15:27.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Okay. I will get an error""" start="00:15:35.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""because I don't have an appropriate environment.""" start="00:15:38.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""But what I can do, I can connect to the remote REPL""" start="00:15:44.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""by creating a server with `guix repl --listen` command""" start="00:15:51.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and connecting to it with `geiser-connect` command.""" start="00:15:55.060" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And now I can evaluate this expression.""" start="00:15:58.620" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Right?""" start="00:16:01.820" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Wow.""" start="00:16:03.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Okay.""" start="00:16:10.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""It actually doesn't matter for my example.""" start="00:16:14.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I will explain how it doesn't work easily.""" start="00:16:19.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""This is a long-running process which prints something""" start="00:16:22.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and it can take up to a few minutes.""" start="00:16:26.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And for the whole few minutes I don't see any results,""" start="00:16:29.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the same as with this infinite loop which prints to stdout""" start="00:16:33.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""but I don't see anything interactively.""" start="00:16:38.720" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""With `arei`, I can run""" start="00:16:42.200" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""the evaluation of the same expression,""" start="00:16:45.620" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you will see instantly""" start="00:16:51.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""that stdout is presented here in slightly yellowish color.""" start="00:16:54.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I can interrupt the evaluation""" start="00:17:00.201" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""if I don't want to wait until it's finished,""" start="00:17:02.921" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and just after that, I can evaluate another value.""" start="00:17:06.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So that's cool.""" start="00:17:15.780" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And let's see one more thing.""" start="00:17:23.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""We have an infinite loop and we have some completion here.""" start="00:17:25.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And completion still works,""" start="00:17:30.340" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""very nice,""" start="00:17:32.580" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""while the infinite loop is running.""" start="00:17:33.660" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Okay.""" start="00:17:40.260" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Support""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""Actually it took me around two months""" start="00:17:42.060" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""of full-time work funded by my own savings,""" start="00:17:44.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can support and help to the project""" start="00:17:48.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""using OpenCollective or by contributing on SourceHut.""" start="00:17:51.600" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Future steps - Multiple simultaneous evaluations in different contexts""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""The future steps for the project""" start="00:17:57.020" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""include an experimental workflow where you have""" start="00:17:58.700" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""multiple simultaneous evaluation in different contexts.""" start="00:18:03.675" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""For example, you have Fibers, you have Goblins,""" start="00:18:07.540" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""you have some HTTP server or some other thing,""" start="00:18:11.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you want to run all of them independently""" start="00:18:16.920" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in slightly isolated sessions,""" start="00:18:22.120" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you want to have the ability""" start="00:18:25.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""to still interact with them.""" start="00:18:29.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""For example, if they require standard input""" start="00:18:30.960" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""or something else, you want to be able to provide it.""" start="00:18:33.980" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You want to see the stderr and stdout""" start="00:18:39.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""of those long-running processes and so on.""" start="00:18:42.520" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""The second thing is tree-sitter integration""" start="00:18:46.220" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""for better syntax highlighting, code navigation,""" start="00:18:50.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and other features.""" start="00:18:53.400" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""And after that, probably we will do a full-fledged debugger""" start="00:18:56.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""so you can jump expressions one by one""" start="00:19:01.400" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and see the results and see some intermediate values""" start="00:19:06.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""during the evaluation.""" start="00:19:10.780" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And it's very possible""" start="00:19:13.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""because nREPL is a very extensible protocol""" start="00:19:14.480" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can implement""" start="00:19:17.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""whatever you want on top of it.""" start="00:19:18.200" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""FAQ - Does it support other Scheme implementations?""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""I will answer two probably very frequent questions.""" start="00:19:22.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Does it support other Scheme implementations?""" start="00:19:27.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""At the moment, it doesn't,""" start="00:19:30.500" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""but the Scheme implementation is not restricted.""" start="00:19:32.280" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You have a server which is implemented in your language""" start="00:19:36.520" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you have a client--in our case, `arei`--""" start="00:19:40.640" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""which communicates with this protocol.""" start="00:19:43.975" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""So if you implement nREPL server in a different language,""" start="00:19:48.320" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""it should work with already implemented `arei` client.""" start="00:19:52.360" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Is it possible to use it with other text editors?""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""And is it possible to use the same functionality""" start="00:19:58.380" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in other text editors, for example in VS Code,""" start="00:20:04.080" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Vim, whatever?""" start="00:20:07.000" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""Yes, it's possible and the case is similar here.""" start="00:20:08.680" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""You have already implemented nREPL server""" start="00:20:13.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and you can write your own nREPL client""" start="00:20:16.600" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""in a different text editor and it will work.""" start="00:20:19.360" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""I would like to thank the authors and maintainers""" start="00:20:22.121" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and contributors of Guile, Geiser, CIDER, Clojure,""" start="00:20:26.760" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""and Emacs, and all other people""" start="00:20:30.440" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""who are somehow related to the work on those projects""" start="00:20:33.360" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""involved in this talk.""" start="00:20:38.780" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""And I hope the Scheme programming will be enjoyable.""" start="00:20:42.080" video="mainVideo-scheme" id="subtitle"]] + +[[!template new="1" text="""Contacts""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]] + +[[!template text="""If you want to contact me,""" start="00:20:45.880" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""join #tropin IRC channel at libera.chat,""" start="00:20:47.240" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""or drop me a message via email or feediverse""" start="00:20:49.800" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""using `andrew@trop.in` handle.""" start="00:20:53.040" video="mainVideo-scheme" id="subtitle"]] +[[!template text="""I will see you in a bit in Q&A session.""" start="00:20:55.880" video="mainVideo-scheme" id="subtitle"]] + + + +Captioner: sachac + +<a name="scheme-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: I see 2 questions on the panel already.""" start="00:00:16.200" video="qanda-scheme" id="subtitle"]] +[[!template text="""Let's see, 1 asking how much Andrew uses""" start="00:00:22.660" video="qanda-scheme" id="subtitle"]] +[[!template text="""these ripples remotely or versus on their own""" start="00:00:26.320" video="qanda-scheme" id="subtitle"]] +[[!template text="""desktop. And another asking if this can be""" start="00:00:29.240" video="qanda-scheme" id="subtitle"]] +[[!template text="""integrated with EGLOT.""" start="00:00:31.160" video="qanda-scheme" id="subtitle"]] +[[!template text="""And I will note that it is very cool that""" start="00:00:34.840" video="qanda-scheme" id="subtitle"]] +[[!template text="""this year we've had so many talks on Ripples.""" start="00:00:36.580" video="qanda-scheme" id="subtitle"]] +[[!template text="""Just goes to show how powerful Emacs is and""" start="00:00:40.920" video="qanda-scheme" id="subtitle"]] +[[!template text="""just how much or how far you can push it and""" start="00:00:42.980" video="qanda-scheme" id="subtitle"]] +[[!template text="""how much you can do with it.""" start="00:00:44.040" video="qanda-scheme" id="subtitle"]] +[[!template text="""And so see someone asking on IRC,""" start="00:00:53.460" video="qanda-scheme" id="subtitle"]] +[[!template text="""if or how many people use GnuGeeks.""" start="00:00:57.780" video="qanda-scheme" id="subtitle"]] +[[!template text="""Since we are talking about Scheme,""" start="00:01:01.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""GnuGeeks is a great platform slash operating""" start="00:01:05.740" video="qanda-scheme" id="subtitle"]] +[[!template text="""system or distro for your test house,""" start="00:01:10.380" video="qanda-scheme" id="subtitle"]] +[[!template text="""but also for servers and such.""" start="00:01:11.920" video="qanda-scheme" id="subtitle"]] +[[!template text="""They do some impressive,""" start="00:01:13.320" video="qanda-scheme" id="subtitle"]] +[[!template text="""amazing work. And it's all,""" start="00:01:15.240" video="qanda-scheme" id="subtitle"]] +[[!template text="""pretty much all done in Gindugal's scheme.""" start="00:01:19.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""So very cool stuff. Bye.""" start="00:01:30.260" video="qanda-scheme" id="subtitle"]] +[[!template text="""You""" start="00:01:45.260" video="qanda-scheme" id="subtitle"]] +[[!template text="""I see another interesting question on the""" start="00:03:19.940" video="qanda-scheme" id="subtitle"]] +[[!template text="""pad. How hard is it to add support for""" start="00:03:23.440" video="qanda-scheme" id="subtitle"]] +[[!template text="""something other than Guile?""" start="00:03:24.960" video="qanda-scheme" id="subtitle"]] +[[!template text="""And if it makes sense to contribute at this""" start="00:03:28.040" video="qanda-scheme" id="subtitle"]] +[[!template text="""early stage of development?""" start="00:03:28.940" video="qanda-scheme" id="subtitle"]] +[[!template text="""They said that they've written several""" start="00:03:31.960" video="qanda-scheme" id="subtitle"]] +[[!template text="""packages for chicken skin before and they""" start="00:03:34.000" video="qanda-scheme" id="subtitle"]] +[[!template text="""would like to try this 1 as well.""" start="00:03:35.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""I guess since Andrew isn't still here,""" start="00:05:26.380" video="qanda-scheme" id="subtitle"]] +[[!template text="""and there was some chatter about GnuGeeks in""" start="00:05:29.480" video="qanda-scheme" id="subtitle"]] +[[!template text="""the chat, maybe it might be nice for me to""" start="00:05:32.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""share my screen and plug Inukis for a little""" start="00:05:35.520" video="qanda-scheme" id="subtitle"]] +[[!template text="""bit and introduce it or at least show its""" start="00:05:38.800" video="qanda-scheme" id="subtitle"]] +[[!template text="""website to folks who may not have seen it yet""" start="00:05:41.720" video="qanda-scheme" id="subtitle"]] +[[!template text="""so I'm going to try and do that now.""" start="00:05:43.380" video="qanda-scheme" id="subtitle"]] +[[!template text="""You""" start="00:05:45.260" video="qanda-scheme" id="subtitle"]] +[[!template text="""Okay, let's see if this works.""" start="00:06:19.760" video="qanda-scheme" id="subtitle"]] +[[!template text="""Okay, so this is GNU Geeks' website.""" start="00:06:33.540" video="qanda-scheme" id="subtitle"]] +[[!template text="""You can go to geeks.gnu.org.""" start="00:06:35.000" video="qanda-scheme" id="subtitle"]] +[[!template text="""And they introduced it at the top.""" start="00:06:38.820" video="qanda-scheme" id="subtitle"]] +[[!template text="""So it's a wholly free operating system or""" start="00:06:43.480" video="qanda-scheme" id="subtitle"]] +[[!template text="""distribution of GNU Linux.""" start="00:06:45.100" video="qanda-scheme" id="subtitle"]] +[[!template text="""Meaning that it only has free software""" start="00:06:48.600" video="qanda-scheme" id="subtitle"]] +[[!template text="""packaged and no non-free packages,""" start="00:06:50.840" video="qanda-scheme" id="subtitle"]] +[[!template text="""so it is endorsed by the FSF and the GNU""" start="00:06:53.560" video="qanda-scheme" id="subtitle"]] +[[!template text="""project. As someone said in the chat,""" start="00:06:56.640" video="qanda-scheme" id="subtitle"]] +[[!template text="""it's kind of like Nix,""" start="00:06:57.740" video="qanda-scheme" id="subtitle"]] +[[!template text="""but instead built on GNU Gallop scheme.""" start="00:07:01.360" video="qanda-scheme" id="subtitle"]] +[[!template text="""It has transactional upgrades and rollbacks.""" start="00:07:05.320" video="qanda-scheme" id="subtitle"]] +[[!template text="""So if you do upgrade your system and let's""" start="00:07:10.160" video="qanda-scheme" id="subtitle"]] +[[!template text="""say in the middle of it,""" start="00:07:11.180" video="qanda-scheme" id="subtitle"]] +[[!template text="""your hardware fails or your power goes out,""" start="00:07:13.200" video="qanda-scheme" id="subtitle"]] +[[!template text="""the likelihood of things being corrupted is""" start="00:07:16.560" video="qanda-scheme" id="subtitle"]] +[[!template text="""very low because the upgrade is essentially""" start="00:07:18.840" video="qanda-scheme" id="subtitle"]] +[[!template text="""prepared like in the background.""" start="00:07:21.560" video="qanda-scheme" id="subtitle"]] +[[!template text="""And then pretty much atomically,""" start="00:07:24.140" video="qanda-scheme" id="subtitle"]] +[[!template text="""the system is switched to it.""" start="00:07:26.780" video="qanda-scheme" id="subtitle"]] +[[!template text="""And also if there is some kind of,""" start="00:07:30.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""sorry, I'm losing my voice here.""" start="00:07:32.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""If there is some kind of issue that makes""" start="00:07:34.840" video="qanda-scheme" id="subtitle"]] +[[!template text="""your system unbootable,""" start="00:07:35.800" video="qanda-scheme" id="subtitle"]] +[[!template text="""you could always go back to booting the""" start="00:07:41.480" video="qanda-scheme" id="subtitle"]] +[[!template text="""previous revision of your system when you""" start="00:07:44.600" video="qanda-scheme" id="subtitle"]] +[[!template text="""restart in the Grub bootloader.""" start="00:07:46.100" video="qanda-scheme" id="subtitle"]] +[[!template text="""Yeah, so they have a nice blog where they""" start="00:07:56.740" video="qanda-scheme" id="subtitle"]] +[[!template text="""regularly post updates and what's new in the""" start="00:07:59.340" video="qanda-scheme" id="subtitle"]] +[[!template text="""project. You can go check that out.""" start="00:08:01.000" video="qanda-scheme" id="subtitle"]] +[[!template text="""We also have a packages archive where you can""" start="00:08:07.240" video="qanda-scheme" id="subtitle"]] +[[!template text="""see a list of all the software that has been""" start="00:08:09.360" video="qanda-scheme" id="subtitle"]] +[[!template text="""packaged for GNU Geeks.""" start="00:08:11.060" video="qanda-scheme" id="subtitle"]] +[[!template text="""It is an impressive list.""" start="00:08:13.620" video="qanda-scheme" id="subtitle"]] +[[!template text="""I don't know how many tens of thousands of""" start="00:08:16.440" video="qanda-scheme" id="subtitle"]] +[[!template text="""packages there are. Geeks has been growing""" start="00:08:19.720" video="qanda-scheme" id="subtitle"]] +[[!template text="""very well. And you can search the packages""" start="00:08:22.360" video="qanda-scheme" id="subtitle"]] +[[!template text="""here. And yeah, all kinds of things are""" start="00:08:29.380" video="qanda-scheme" id="subtitle"]] +[[!template text="""packaged. Of course, GNU Emacs is packaged,""" start="00:08:31.800" video="qanda-scheme" id="subtitle"]] +[[!template text="""along with many extensions or packages,""" start="00:08:37.260" video="qanda-scheme" id="subtitle"]] +[[!template text="""GNU Emacs packages that are packaged as""" start="00:08:41.039" video="qanda-scheme" id="subtitle"]] +[[!template text="""system packages for Geeks.""" start="00:08:42.840" video="qanda-scheme" id="subtitle"]] +[[!template text="""Yeah, so definitely go check it out.""" start="00:08:46.960" video="qanda-scheme" id="subtitle"]] +[[!template text="""You can use Geeks both as a standalone""" start="00:08:55.680" video="qanda-scheme" id="subtitle"]] +[[!template text="""package manager, let's say on a Debian-based""" start="00:08:59.340" video="qanda-scheme" id="subtitle"]] +[[!template text="""distribution like Triscale,""" start="00:09:00.780" video="qanda-scheme" id="subtitle"]] +[[!template text="""for example, or you could install it like as""" start="00:09:06.180" video="qanda-scheme" id="subtitle"]] +[[!template text="""a complete system distribution on its own.""" start="00:09:08.900" video="qanda-scheme" id="subtitle"]] +[[!template text="""So the former is useful if you want to maybe""" start="00:09:15.560" video="qanda-scheme" id="subtitle"]] +[[!template text="""get a taste for Geeks and try it out before""" start="00:09:18.080" video="qanda-scheme" id="subtitle"]] +[[!template text="""fully committing to it and switching to it as""" start="00:09:21.140" video="qanda-scheme" id="subtitle"]] +[[!template text="""your main distro. You can try it on top of""" start="00:09:24.620" video="qanda-scheme" id="subtitle"]] +[[!template text="""any other distro pretty much and then you can""" start="00:09:27.720" video="qanda-scheme" id="subtitle"]] +[[!template text="""of course install it on its own as well as a""" start="00:09:31.080" video="qanda-scheme" id="subtitle"]] +[[!template text="""system distribution.""" start="00:09:31.560" video="qanda-scheme" id="subtitle"]] +[[!template text="""Yeah, there are a bunch of manuals and""" start="00:09:50.940" video="qanda-scheme" id="subtitle"]] +[[!template text="""reference cards and videos that you're""" start="00:09:53.040" video="qanda-scheme" id="subtitle"]] +[[!template text="""welcome to watch. They have several mailing""" start="00:09:55.920" video="qanda-scheme" id="subtitle"]] +[[!template text="""lists. It sounds like they have a wiki now as""" start="00:09:59.240" video="qanda-scheme" id="subtitle"]] +[[!template text="""well. And the development is done on Gnu""" start="00:10:04.020" video="qanda-scheme" id="subtitle"]] +[[!template text="""Savannah. If we go to savannah.gnu.org""" start="00:10:09.680" video="qanda-scheme" id="subtitle"]] +[[!template text="""slash projects slash geeks,""" start="00:10:12.780" video="qanda-scheme" id="subtitle"]] +[[!template text="""Yeah, the project is developed here and they""" start="00:10:18.640" video="qanda-scheme" id="subtitle"]] +[[!template text="""have a bunch of repositories including the""" start="00:10:21.300" video="qanda-scheme" id="subtitle"]] +[[!template text="""main 1 which is geeks.git""" start="00:10:24.340" video="qanda-scheme" id="subtitle"]] +[[!template text="""itself. So yeah, folks are welcome to go""" start="00:10:28.200" video="qanda-scheme" id="subtitle"]] +[[!template text="""check it out. Let's see,""" start="00:10:32.380" video="qanda-scheme" id="subtitle"]] +[[!template text="""maybe we can go have a look at some package""" start="00:10:35.860" video="qanda-scheme" id="subtitle"]] +[[!template text="""definitions, although I think we're almost""" start="00:10:37.540" video="qanda-scheme" id="subtitle"]] +[[!template text="""out of time on the live stream.""" start="00:10:38.940" video="qanda-scheme" id="subtitle"]] +[[!template text="""So, yeah, just quickly.""" start="00:10:42.600" video="qanda-scheme" id="subtitle"]] +[[!template text="""Emacs to the CM has all the,""" start="00:10:45.280" video="qanda-scheme" id="subtitle"]] +[[!template text="""Emacs packages or Emacs itself.""" start="00:10:48.640" video="qanda-scheme" id="subtitle"]] +[[!template text="""And Emacs-xyz is where you'll find all the""" start="00:10:52.120" video="qanda-scheme" id="subtitle"]] +[[!template text="""Emacs like ELPA packages,""" start="00:10:54.480" video="qanda-scheme" id="subtitle"]] +[[!template text="""but package for use on GNU Geeks system or""" start="00:10:57.980" video="qanda-scheme" id="subtitle"]] +[[!template text="""with GNU Geeks. And I think that's all the""" start="00:11:01.220" video="qanda-scheme" id="subtitle"]] +[[!template text="""time that we have. So yeah,""" start="00:11:04.080" video="qanda-scheme" id="subtitle"]] +[[!template text="""thanks for tuning in, folks.""" start="00:11:06.000" video="qanda-scheme" id="subtitle"]] +[[!template text="""Please post your questions on the pad.""" start="00:11:07.800" video="qanda-scheme" id="subtitle"]] +[[!template text="""We'll pass them on to Andrew.""" start="00:11:09.280" video="qanda-scheme" id="subtitle"]] +[[!template text="""And yeah, hope you enjoy this.""" start="00:11:12.400" video="qanda-scheme" id="subtitle"]] +[[!template text="""Definitely go check out Andrew's work and Gnu""" start="00:11:15.140" video="qanda-scheme" id="subtitle"]] +[[!template text="""geeks as well. You are currently the only""" start="00:11:25.320" video="qanda-scheme" id="subtitle"]] +[[!template text="""person in this conference.""" start="00:11:26.280" video="qanda-scheme" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20scheme%3A%20Bringing%20joy%20to%20Scheme%20programming) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/scheme-before.md b/2023/info/scheme-before.md new file mode 100644 index 00000000..24969b28 --- /dev/null +++ b/2023/info/scheme-before.md @@ -0,0 +1,36 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 22-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="scheme-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="scheme-mainVideo" data=""" +00:02.120 Introduction +00:23.280 Interactive development +01:18.180 REPL: Read Eval Print Loop +02:53.720 Long-lasting loops +04:07.600 Not interruptible +05:23.160 No protocol +05:51.480 Not scalable +07:25.860 nREPL +09:01.740 Arei, Ares, and how to try +10:34.180 Demo +11:27.640 Continuations +12:32.460 Reading from stdin +13:33.420 Fancy example with continuations +15:13.160 Guix API +17:42.060 Support +17:57.020 Future steps - Multiple simultaneous evaluations in different contexts +18:46.220 Tree-sitter integration +18:56.880 Full-fledged debugger +19:22.760 FAQ - Does it support other Scheme implementations? +19:58.380 Is it possible to use it with other text editors? +20:22.121 Conclusion +20:45.880 Contacts + +"""]]<div></div>Duration: 21:01 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4moUfTEo2G8we5JuLGArWx">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/scheme-nav.md b/2023/info/scheme-nav.md new file mode 100644 index 00000000..fa791c87 --- /dev/null +++ b/2023/info/scheme-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/windows">Windows into Freedom</a> +Next by track: <a href="/2023/talks/world">GNU Emacs: A World of Possibilities</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/sharing-after.md b/2023/info/sharing-after.md new file mode 100644 index 00000000..2b5a7b58 --- /dev/null +++ b/2023/info/sharing-after.md @@ -0,0 +1,1071 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="sharing-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""Hello everyone, I'm Jacob Boxerman.""" start="00:00:00.000" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I'm a sophomore at Columbia University""" start="00:00:02.440" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""studying computer science.""" start="00:00:04.320" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I'm so excited to be here today""" start="00:00:06.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""right at the end of EmacsConf 2023.""" start="00:00:08.520" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So glad to be able to share with everyone today.""" start="00:00:11.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""EmacsConf is really the epitome for me""" start="00:00:13.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""of sharing and of learning about Emacs.""" start="00:00:16.747" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Today's talk""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""And in my closing keynote""" start="00:00:20.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""titled "Sharing Emacs is Caring Emacs,"""" start="00:00:21.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I want to drive that home,""" start="00:00:24.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and I want to make every day""" start="00:00:25.820" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a day for learning and for sharing in our community.""" start="00:00:27.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I'd like to share my own journey""" start="00:00:31.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""of sharing the joy of Emacs""" start="00:00:33.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and convince you that sharing the ways we share""" start="00:00:34.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and how we participate in our Emacs community,""" start="00:00:38.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""those are the most important things""" start="00:00:41.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to both grow our community""" start="00:00:42.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and to increase our own personal joy in Emacs.""" start="00:00:44.340" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""My history with Emacs""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""My journey of sharing begins with my journey of learning.""" start="00:00:48.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So I'll start by spending a bit of time on that.""" start="00:00:52.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I use Emacs every day for personal organization""" start="00:00:55.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and to-dos -- you know, schoolwork, projects,""" start="00:00:57.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""exams, readings. I use Org Mode for that,""" start="00:01:00.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""write essays, make presentations like this one.""" start="00:01:03.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I also write in various programming languages""" start="00:01:05.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""including Java, C, Python,""" start="00:01:08.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""locally and also remotely for projects, classes,""" start="00:01:10.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""other responsibilities.""" start="00:01:13.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I really started with Emacs during the pandemic.""" start="00:01:14.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I had tried Emacs before, but at the time""" start="00:01:17.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""all I knew it for was `M-x tetris`.""" start="00:01:20.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But then its power and its configurability even then""" start="00:01:22.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""especially spoke to me.""" start="00:01:25.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So from those little humble beginnings,""" start="00:01:27.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""trying different preconfigured distros,""" start="00:01:28.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I slowly made my way to building""" start="00:01:31.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my own 2000+ line configuration,""" start="00:01:33.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""which actually surprisingly has about 70 stars,""" start="00:01:36.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a few watchers, a few forks on GitHub.""" start="00:01:39.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Pretty straightforward.""" start="00:01:40.540" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Self-exploration vs learning from others""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""But what exactly was that learning process like?""" start="00:01:42.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Now, Emacs was such a beast to me at first.""" start="00:01:46.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I was familiar with Python,""" start="00:01:49.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""with C, Java, languages like that.""" start="00:01:51.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I was no stranger to the shell configuration,""" start="00:01:52.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""anything like that.""" start="00:01:55.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But the absolute infinity of possibility with Emacs""" start="00:01:56.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""was a bit overwhelming.""" start="00:02:01.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I find a sentiment in the community""" start="00:02:02.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that exploring on one's own""" start="00:02:04.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""was greater than exploring and learning from others.""" start="00:02:06.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And now I see why people say that and it's true in a sense,""" start="00:02:11.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but it might not be fully understood.""" start="00:02:14.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""At a certain point, we need to all create our own paths.""" start="00:02:17.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And I think that's just one of the ways Emacs is built.""" start="00:02:21.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""The minute possibilities of configurability are so vast,""" start="00:02:24.160" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""it's like a fingerprint or a snowflake --""" start="00:02:27.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""there are so many options to create""" start="00:02:29.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a totally unique Emacs experience.""" start="00:02:32.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Of course that can't be found from somebody else --""" start="00:02:35.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It has to come from you.""" start="00:02:37.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Still, building a strong foundation""" start="00:02:38.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""is much, much better when we have others.""" start="00:02:42.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Expanding on that foundation is, too, actually.""" start="00:02:45.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""My own process started""" start="00:02:48.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""with a lot of Googling, blog posts, YouTube, and Reddit.""" start="00:02:50.300" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Learning process""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""I actually found Emacs on YouTube.""" start="00:02:53.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Seeing how other people used it""" start="00:02:55.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""was what really convinced me to try it for myself.""" start="00:02:58.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""At a certain point when my confidence grew,""" start="00:03:01.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my trial and error became less error and more success.""" start="00:03:03.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I was also able to take what I saw other people do,""" start="00:03:07.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""learn from it, and expand, making it my own.""" start="00:03:09.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And through that time, I learned Emacs.""" start="00:03:13.860" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Emacs learning (not just learning Emacs)""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""But I also participated in Emacs learning.""" start="00:03:17.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""What's the difference?""" start="00:03:21.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We often discuss the former,""" start="00:03:22.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""grappling with key binds, commands.""" start="00:03:24.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But Emacs learning goes beyond these technicalities.""" start="00:03:27.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's a mindset. It thrives on collaboration.""" start="00:03:31.620" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's not a solo endeavor;""" start="00:03:35.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""it flourishes best when we do it together.""" start="00:03:37.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""This involves collaborating together,""" start="00:03:41.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""creating a collaborative mindset,""" start="00:03:44.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""sharing effective strategies,""" start="00:03:46.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""lifting each other""" start="00:03:47.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""through our collective pool of knowledge.""" start="00:03:49.076" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Together, we contribute to the growth of each member""" start="00:03:51.640" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""within our vibrant community.""" start="00:03:55.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Emacs learning is much, much harder to do alone.""" start="00:03:56.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And I wanted to help with that.""" start="00:04:00.260" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""My YouTube journey""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""So this brings me to the second part of my talk,""" start="00:04:03.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my Emacs journey, how I got started""" start="00:04:05.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and where I am today with my YouTube channel,""" start="00:04:08.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my Straightforward Emacs series with nearly 200,000 views.""" start="00:04:11.460" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Why not just read the manual?""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""The Emacs Manual is often pushed""" start="00:04:14.820" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as the best way to learn Emacs.""" start="00:04:18.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's an all-encompassing tome.""" start="00:04:20.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And as amazing as I think it is,""" start="00:04:21.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I don't think it's reasonable""" start="00:04:23.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to push the Emacs manual so hard,""" start="00:04:25.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""which is something I felt at first.""" start="00:04:27.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It can be really daunting. It's dense.""" start="00:04:29.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""There's a lot there.""" start="00:04:31.600" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's just a bit too much for a beginner,""" start="00:04:32.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""or even someone with a little bit of experience.""" start="00:04:34.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""These qualities, I feel,""" start="00:04:37.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""apply to many of the Emacs resources we can find out there.""" start="00:04:40.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""The best word for them is heavy.""" start="00:04:43.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""They look, they feel, they come across as heavy""" start="00:04:45.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""regardless of what they may actually be.""" start="00:04:48.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's not even that people are too lazy,""" start="00:04:50.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""or not capable enough (because that's never true).""" start="00:04:53.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's just a mental block that takes some getting over,""" start="00:04:56.520" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and that's okay -- so we need other things, too.""" start="00:05:00.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""For me, that was video.""" start="00:05:03.160" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I wanted someone to tell and show me""" start="00:05:04.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""what I wanted to know,""" start="00:05:07.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as well as things I didn't even know were possible.""" start="00:05:08.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I realized this once I'd progressed a little further""" start="00:05:11.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""in my Emacs journey. I wanted to do my part.""" start="00:05:15.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I care about Emacs. I started to really care about Emacs.""" start="00:05:18.020" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Why video for Emacs""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""So I wanted to share about Emacs.""" start="00:05:20.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So at that point, I refocused my work with Emacs""" start="00:05:24.320" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""beyond just myself. I wanted to help others""" start="00:05:27.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""feel the excitement that I did.""" start="00:05:30.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So where did I turn, and why?""" start="00:05:32.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's so trite, but they say that""" start="00:05:35.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a picture is worth a thousand words.""" start="00:05:37.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So how much is a video worth?""" start="00:05:40.160" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Everyone learns differently, and that's okay.""" start="00:05:41.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But it's absolutely certain to me""" start="00:05:44.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that you need to see something to believe it.""" start="00:05:46.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So for that, I turned to video.""" start="00:05:48.320" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And it turns out that seeing is believing.""" start="00:05:50.500" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Straightforward Emacs""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""I made a short video showing off Emacs Org Mode.""" start="00:05:54.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I didn't even have a voiceover.""" start="00:05:56.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""That video, less than five minutes long,""" start="00:05:58.960" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but still incorporating some of my core principles,""" start="00:06:01.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""now has over 55,000 views and counting.""" start="00:06:04.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So, something must have been right.""" start="00:06:06.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And the positive reception to that video""" start="00:06:09.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""made me want to continue.""" start="00:06:11.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I decided to continue with the videos""" start="00:06:12.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""in a series I titled "Straightforward Emacs."""" start="00:06:14.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And I'm asked: who is the target audience""" start="00:06:18.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for Straightforward Emacs? It's me.""" start="00:06:20.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""They're the videos I wish I had existed""" start="00:06:23.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""when I was figuring out""" start="00:06:27.600" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Emacs' numerous and wonderful features.""" start="00:06:28.660" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Challenges and benefits of video""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""Video does, I admit, come with its own set of challenges.""" start="00:06:32.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Complaints that video is less accessible, it's valid.""" start="00:06:36.620" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""They're more time consuming, it's valid too.""" start="00:06:40.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's harder to skim a video than a blog post,""" start="00:06:42.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and referring back can be a little annoying.""" start="00:06:45.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""To try and solve this,""" start="00:06:47.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I make video notes available as best I can though.""" start="00:06:48.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's not perfect. Despite these valid claims,""" start="00:06:50.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I believe video offers a sense of personality""" start="00:06:54.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that written content just can't.""" start="00:06:57.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And that makes it well worth it.""" start="00:06:59.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""My first two videos in the series""" start="00:07:00.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""received a combined 35,000 views.""" start="00:07:03.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I still get kind comments today""" start="00:07:06.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""from viewers thanking me, asking questions.""" start="00:07:08.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So I must have done something right,""" start="00:07:10.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to outweigh those cons of video,""" start="00:07:12.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to outweigh those common complaints.""" start="00:07:14.500" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Crafting tutorials that work""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""What was it? I covered topics that had been done before.""" start="00:07:16.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But I wanted to present them in my way.""" start="00:07:21.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""In the way that I knew people would appreciate,""" start="00:07:24.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""because it's what I would have appreciated""" start="00:07:26.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""when I started my Emacs journey.""" start="00:07:28.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""In writing, I navigated towards clarity.""" start="00:07:30.920" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Crystal clear, step-by-step instructions.""" start="00:07:34.480" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Fully scripted, recorded in multiple parts and""" start="00:07:38.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""spliced together. That allowed me""" start="00:07:40.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to achieve my second goal: no wasted time, or word,""" start="00:07:43.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""or thought. I meticulously cut my videos""" start="00:07:48.600" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to create smooth dialogue.""" start="00:07:51.820" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I cut out large blocks of typing if not explained.""" start="00:07:54.080" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Though this does vary video to video.""" start="00:07:57.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Less scripted, more personal video receives less editing.""" start="00:07:59.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Like this talk itself, it's not edited at all.""" start="00:08:03.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And though prerecorded, I wanted to present""" start="00:08:05.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my unfiltered, raw self.""" start="00:08:08.260" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""High-quality and accessible content""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""Another goal of mine is high quality and accessible content.""" start="00:08:11.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I speak carefully and I tune my volume,""" start="00:08:15.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""making it easier to listen to,""" start="00:08:18.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and improving YouTube's auto-captioning.""" start="00:08:20.680" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Something I didn't consider at first,""" start="00:08:23.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but was mentioned to me in a comment, was color scheme.""" start="00:08:24.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Now I try to select a scheme""" start="00:08:28.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""with good contrast and a readable font.""" start="00:08:29.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Content-wise, I design my tutorials""" start="00:08:33.280" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to ensure they cater to various skill levels,""" start="00:08:35.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as well as learning preferences.""" start="00:08:38.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""My videos assume basic Emacs knowledge""" start="00:08:40.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but not too much more.""" start="00:08:43.000" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Importantly, they're configuration agnostic.""" start="00:08:44.520" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""However you feel about Emacs' 'distributions',""" start="00:08:47.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Doom, Spacemacs, etc, they're out there,""" start="00:08:50.320" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and beginners often don't distinguish.""" start="00:08:53.120" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I admit it can be a bit frustrating to see a Reddit post""" start="00:08:57.920" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""asking a question about unexpected behavior,""" start="00:09:02.040" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""without mention of the fact that they have""" start="00:09:04.600" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""literally thousands of lines of non-standard configuration""" start="00:09:06.180" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""in the form of an Emacs distribution.""" start="00:09:09.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So I do my best to mention different possible keybindings""" start="00:09:12.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a viewer might be using.""" start="00:09:14.900" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Most crucial aspect of my videos""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""There was one thing, though, that turned out to be""" start="00:09:17.920" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""the most crucial part of my videos and series.""" start="00:09:19.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And it's one of the reasons itself for this talk.""" start="00:09:23.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""You may have already picked up on it.""" start="00:09:25.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's the personal aspect. Sharing myself.""" start="00:09:27.880" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Incorporating relatable examples,""" start="00:09:31.120" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""scenarios that resonate with my audience.""" start="00:09:33.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Seeing personal use cases, examples,""" start="00:09:36.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and demonstrations of real life Emacs use""" start="00:09:39.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""is really what began to build a community.""" start="00:09:41.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Because that's the stuff that can jump out of the video""" start="00:09:44.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and into the comments.""" start="00:09:47.220" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""A broadening community""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""The idea for this talk started""" start="00:09:50.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as a story of my YouTube journey.""" start="00:09:53.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I wanted to share how I began sharing Emacs""" start="00:09:55.240" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and why I like it. And I think I've done that.""" start="00:09:57.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Thanks to the EmacsConf organizers, though,""" start="00:10:00.960" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I started to see a larger vision.""" start="00:10:03.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Each video I made took a lot of effort,""" start="00:10:06.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""from research and planning to script writing,""" start="00:10:08.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""filming and editing. But those comments made it worth it --""" start="00:10:11.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""people saying that straightforward Emacs""" start="00:10:14.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""was just what they were looking for,""" start="00:10:16.840" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and that they appreciated my sharing.""" start="00:10:17.620" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""That's what made me want to continue.""" start="00:10:20.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And what made me want to continue even more""" start="00:10:22.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""was the community I was building.""" start="00:10:25.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I'd start to see repeat viewers""" start="00:10:28.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""who'd come back for my latest upload.""" start="00:10:30.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It's hard for me to find time to produce videos.""" start="00:10:32.640" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""But whether it was two weeks or four months later""" start="00:10:34.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""when I finally got around to uploading,""" start="00:10:38.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""those same commenters would be there for me.""" start="00:10:40.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""And I found real joy in actively engaging with my audience.""" start="00:10:43.280" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""It was amazing to see how my videos --""" start="00:10:47.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""me sharing useful Emacs tips,""" start="00:10:49.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""sharing the way I do things -- sparked broader discussions.""" start="00:10:51.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""On any chat form out there, there's no doubt""" start="00:10:55.120" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""you'll find some sort of cross discourse.""" start="00:10:56.980" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I'd see viewers replying to other commenters,""" start="00:10:59.720" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and my videos were no exception. Seeing how""" start="00:11:02.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""my videos sparked conversation,""" start="00:11:04.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""debate and further interest was incredible.""" start="00:11:06.100" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Sharing Emacs""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""We've had two amazing days of sharing Emacs,""" start="00:11:10.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""putting ourselves out there, and sharing in a community.""" start="00:11:14.000" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I want to emphasize how amazing""" start="00:11:17.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a strong community with the right values is,""" start="00:11:19.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and to inspire each and every one of us""" start="00:11:22.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to do our part to strengthen that community.""" start="00:11:24.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""The point of my talk isn't to tell you""" start="00:11:27.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to pick up your microphone and produce a YouTube video,""" start="00:11:30.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""though that wouldn't hurt.""" start="00:11:33.120" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We're not all interested in that, and that's okay.""" start="00:11:34.560" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""First, I want everybody to pat themselves on the back""" start="00:11:37.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for the mere fact that we are here together.""" start="00:11:41.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Then let's turn to the potential within our community.""" start="00:11:44.140" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Platforms""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""First, though, I'll briefly note""" start="00:11:48.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that everyone has their opinions about platforms,""" start="00:11:50.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and I'm not here to make judgments,""" start="00:11:52.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but freedom, equity, and accessibility are important,""" start="00:11:53.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but reach is, too.""" start="00:11:56.060" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Achieving unity""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""Regardless of the platform,""" start="00:11:57.922" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""one thing remains certain:""" start="00:12:00.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""our strength lies in unity.""" start="00:12:02.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Like any online community, this calls for unique ways""" start="00:12:05.400" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to come together and share. How can we achieve this unity?""" start="00:12:08.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""The key is finding avenues""" start="00:12:13.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""where our collective knowledge and our support can flourish,""" start="00:12:15.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""while each person can find a place for themselves,""" start="00:12:18.800" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""creating a more connected and empowered Emacs community.""" start="00:12:21.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""From uplifting others with positive contributions""" start="00:12:25.680" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to engaging on platforms like Reddit,""" start="00:12:29.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""both idealistic and concrete approaches are really valuable.""" start="00:12:31.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We can continue lively debate""" start="00:12:35.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""on community forums and discussion boards,""" start="00:12:36.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""encouraging a positive and inclusive atmosphere""" start="00:12:38.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for asking questions and seeking help.""" start="00:12:41.620" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We can leverage social media platforms to share quick tips,""" start="00:12:44.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""tricks, or interesting discoveries related to Emacs.""" start="00:12:48.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Those who enjoy writing""" start="00:12:51.480" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""can contribute to blogs and newsletters,""" start="00:12:52.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""sharing personal expertise and experiences""" start="00:12:54.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""with a larger audience.""" start="00:12:57.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Let's also not underestimate the value of online video,""" start="00:12:59.240" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as I've said, and learning platforms too.""" start="00:13:02.960" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Creating and sharing tutorials""" start="00:13:05.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""on platforms like YouTube or educational websites""" start="00:13:07.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""addresses specific aspects of Emacs and benefits learners,""" start="00:13:10.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""while contributing a personal touch.""" start="00:13:14.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Participating in or organizing Emacs-related courses""" start="00:13:17.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""also fosters a structured learning""" start="00:13:20.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""environment where there's so much room""" start="00:13:22.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for mentorship and support,""" start="00:13:24.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""which is valuable for everyone involved.""" start="00:13:26.080" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Every contribution is valuable""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""We can also call on our open source [* free software] values""" start="00:13:30.000" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and focus on collaborative projects,""" start="00:13:32.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""from coding projects where we can contribute and learn""" start="00:13:34.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to building shared documentation and guides""" start="00:13:38.240" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that compile collective knowledge on specific topics --""" start="00:13:41.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""the Emacs Wiki is a great place""" start="00:13:44.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to start and continue that work as well.""" start="00:13:46.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Especially for those who might be less willing""" start="00:13:49.600" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""to put themselves out there,""" start="00:13:51.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""it's essential to recognize that every contribution,""" start="00:13:53.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""regardless of its scale, adds value to our community.""" start="00:13:56.200" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Documentation contributions, however small,""" start="00:13:59.520" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""can go a long way. So do translations,""" start="00:14:02.120" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for those who are able to increase accessibility,""" start="00:14:04.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""as well as testing and bug reporting.""" start="00:14:07.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Reporting issues to package maintainers""" start="00:14:09.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""in their desired format -- speaking as one myself,""" start="00:14:11.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I appreciate when users give helpful feedback.""" start="00:14:14.020" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""There are options for everybody, big and small.""" start="00:14:16.820" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Remember, the strength of our community""" start="00:14:20.480" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""lies in its ability to share, collaborate,""" start="00:14:22.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and learn together. Whether through collaborative projects,""" start="00:14:25.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""sharing insights on forums, or leveraging social media,""" start="00:14:29.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""by embracing these ideas, we can build""" start="00:14:32.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""a more connected and empowered Emacs community.""" start="00:14:34.660" video="mainVideo-sharing" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]] + +[[!template text="""Now Emacs is so very personal.""" start="00:14:40.300" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Those of us who have our own""" start="00:14:43.760" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""carefully manicured configurations understand --""" start="00:14:44.940" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Emacs molds to our liking and our person.""" start="00:14:47.680" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Our configurations and use-cases""" start="00:14:50.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""are a reflection of our individuality.""" start="00:14:53.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Nonetheless, the richness of our community""" start="00:14:56.380" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""lies in collaboration, sharing, and learning together.""" start="00:14:59.320" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""There's a lot of talk in the community""" start="00:15:04.620" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""about how to ensure Emacs' longevity.""" start="00:15:06.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I agree it's important.""" start="00:15:09.560" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We care because of passion, excitement,""" start="00:15:11.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and utility. We want to share""" start="00:15:13.820" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and we want to have others love what we love.""" start="00:15:16.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We also want a stronger community""" start="00:15:19.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that fosters new innovation.""" start="00:15:21.100" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""I used to buy into complaints I'd read online""" start="00:15:23.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""that Emacs' defaults are too unapproachable.""" start="00:15:26.540" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""The default color scheme and the font is unappealing.""" start="00:15:29.500" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Fix that and people will flock.""" start="00:15:33.420" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Sounds fair, I'd think.""" start="00:15:35.700" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Turns out, it's not what we need.""" start="00:15:37.740" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Emacs is bigger than that.""" start="00:15:40.640" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""What we need is like what we've done here this weekend.""" start="00:15:42.680" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Like EmacsConf. It's the absolute epitome""" start="00:15:45.780" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""of sharing about and caring about Emacs.""" start="00:15:49.660" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We are here both working to grow our community,""" start="00:15:53.900" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and to strengthen what we already have.""" start="00:15:56.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""We're here because we find joy in Emacs,""" start="00:16:00.140" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""and that joy is amplified by sharing it""" start="00:16:02.580" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""with and among others.""" start="00:16:05.860" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""So let's continue this journey together,""" start="00:16:07.680" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""navigating Emacs with a spirit of collaboration,""" start="00:16:10.220" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""because in unity, we find not just strength""" start="00:16:13.460" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""but the enduring legacy of a tool that we hold very dear.""" start="00:16:17.260" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Thank you to everybody here""" start="00:16:22.060" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""for being part of this shared adventure.""" start="00:16:23.340" video="mainVideo-sharing" id="subtitle"]] +[[!template text="""Let's go forth and share, together.""" start="00:16:26.500" video="mainVideo-sharing" id="subtitle"]] + + + +Captioner: sachac + +<a name="sharing-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 1]: Yeah, we're live. So whoever's in the""" start="00:00:05.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""background might be able to see you live in""" start="00:00:08.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""about 10 seconds as soon as the stream""" start="00:00:09.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""catches up. Hi Jacob, how are you doing?""" start="00:00:11.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Got that? We're live. I'm doing well.""" start="00:00:12.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""How are you doing today?""" start="00:00:13.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: I am doing well and this is the very last""" start="00:00:16.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""talk of the day so I'm very excited not""" start="00:00:17.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""because it finishes but because I am tired""" start="00:00:20.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah very understandable.""" start="00:00:22.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""Well thanks for all of your hard work.""" start="00:00:23.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""We all really appreciate it and all the other""" start="00:00:26.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""organizers.""" start="00:00:26.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: and need some sleep. Well on behalf of all""" start="00:00:28.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""the organizers thank you but you know it all""" start="00:00:30.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""it makes it all worthwhile when we see the""" start="00:00:33.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""valuable contribution that every single 1 of""" start="00:00:36.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""our speakers are making,""" start="00:00:37.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""not only for recording their talks,""" start="00:00:39.559" video="qanda-sharing" id="subtitle"]] +[[!template text="""which is a tough demand on people to say,""" start="00:00:42.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""oh, if you want to go to EmacsConf,""" start="00:00:43.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""you might want to record your talk.""" start="00:00:45.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""But then almost all of you do it and you""" start="00:00:48.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""spend a lot of time with us answering""" start="00:00:50.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions. So we couldn't do it.""" start="00:00:51.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""You know, we wouldn't be spending as much""" start="00:00:53.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""energy, half as much energy,""" start="00:00:54.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""if we didn't believe that it was worth it.""" start="00:00:58.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""So now it's me thanking you on behalf of all""" start="00:01:01.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""the speakers.""" start="00:01:01.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Well thank you that's part of what I wanted""" start="00:01:03.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""to get across in my talk was that coming""" start="00:01:06.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""together and sharing ourselves and you know""" start="00:01:08.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""not just putting little little essays out""" start="00:01:11.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""there and single videos but coming together""" start="00:01:13.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""as a community you know sharing ourselves our""" start="00:01:15.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""faces our voices you know it really brings us""" start="00:01:18.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""together and makes everyone stronger.""" start="00:01:19.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Exactly, and I think it's been a recurring""" start="00:01:22.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""theme. Most of the talks we have at""" start="00:01:27.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""EmacsConf, they're usually about sharing,""" start="00:01:28.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""obviously, sharing the knowledge that they've""" start="00:01:30.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""acquired, either writing a package or""" start="00:01:32.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""learning how to use Emacs as a professor in""" start="00:01:35.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""academia or stuff like this.""" start="00:01:37.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""But what I particularly like this year about""" start="00:01:39.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""the different talks we've had is that they've""" start="00:01:41.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""really made the sharing even more obvious.""" start="00:01:44.479" video="qanda-sharing" id="subtitle"]] +[[!template text="""We've had the mentoring this afternoon and we""" start="00:01:46.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""have your talk about using videos as a""" start="00:01:49.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""different medium to get into something.""" start="00:01:51.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""And I really think in terms of accessibility""" start="00:01:54.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""to Emacs, all of you who talked about this""" start="00:01:58.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""topic are doing a wonderful job.""" start="00:01:59.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""So, thank you again for all of this.""" start="00:02:01.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you. Yeah, do we have any questions to""" start="00:02:04.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""be answering?""" start="00:02:04.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so only 1 for now and I'll invite""" start="00:02:08.199" video="qanda-sharing" id="subtitle"]] +[[!template text="""people as usual to please add their question""" start="00:02:10.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""to the pad or to join us on BBB.""" start="00:02:12.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""Now the chat is open if you want to join us""" start="00:02:15.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""on BBB and ask your questions directly.""" start="00:02:17.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""And in the meantime, I will read the first""" start="00:02:20.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""question. So, Kroting,""" start="00:02:22.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""are you using OxReveal to make your slides?""" start="00:02:25.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""If not, what are you using?""" start="00:02:26.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""They look very elegant,""" start="00:02:27.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""and I concur.""" start="00:02:28.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: That's true. I am using OxReveal.""" start="00:02:32.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""I have a whole entire video on it.""" start="00:02:35.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""So if you're interested,""" start="00:02:36.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""feel free to take a look.""" start="00:02:37.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's very simple to get started with.""" start="00:02:39.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""There are a lot of different packages to use""" start="00:02:42.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""Reveal.js and Emacs. OxReveal or OrgReveal""" start="00:02:45.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""seems to be pretty easy to use.""" start="00:02:47.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""So try that 1 out. Yeah,""" start="00:02:48.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's really nice.""" start="00:02:49.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Awesome. I'm going to give a little bit of""" start="00:02:54.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""time for the other people to finish writing""" start="00:02:55.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""their answer. In the meantime,""" start="00:02:56.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'll ask you 1 of my own.""" start="00:02:58.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""So you said you were in college,""" start="00:02:59.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""right? In com sci. Sorry,""" start="00:03:01.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah.""" start="00:03:02.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: computer science. I think it's great to find""" start="00:03:07.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""people in computer science who have,""" start="00:03:08.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""from the get-go, as soon as their bachelor,""" start="00:03:11.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""an appetite for sharing and vulgarizing a lot""" start="00:03:16.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""of knowledge. Because it feels like if you""" start="00:03:17.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""get started like this,""" start="00:03:18.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""you're gonna have a well over time as you""" start="00:03:20.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""progress with the learning.""" start="00:03:21.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""So I'm very excited to see what you do in the""" start="00:03:23.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""coming years because of this.""" start="00:03:24.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you, thank you, yeah.""" start="00:03:26.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""And Emacs has been like very central to my""" start="00:03:29.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""education as well. It's a great way to sort""" start="00:03:32.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""of organize myself and also it's a good way""" start="00:03:34.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""to share with other people with Org Mode.""" start="00:03:36.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""I can export my code, I can export notes.""" start="00:03:38.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""It makes it so simple.""" start="00:03:39.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""My peers are also impressed by my PDF""" start="00:03:42.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""documents and whatever I can produce with""" start="00:03:44.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh yeah. If only they knew how much time it""" start="00:03:48.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""takes us to get LaTeX to behave properly.""" start="00:03:49.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Emacs. Right, right. I see some more""" start="00:03:52.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions coming in I can answer.""" start="00:03:53.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure, I'll read it for you so that it's a""" start="00:03:56.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""little more interactive.""" start="00:03:57.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""So, second question. Videos can be very""" start="00:03:59.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""inspirational to learn about something by""" start="00:04:01.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""watching it used. I often find it,""" start="00:04:04.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""I often find that I need to do some research""" start="00:04:07.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""after watching a video to learn more.""" start="00:04:09.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""Do you give people links to relevant""" start="00:04:10.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""resources or etc?""" start="00:04:11.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, that's something I could definitely do""" start="00:04:15.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""more of. When I make a video I try to combine""" start="00:04:17.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""all the relevant resources and make 1 sort of""" start="00:04:20.459" video="qanda-sharing" id="subtitle"]] +[[!template text="""cohesive video. I like to think of my video""" start="00:04:23.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""as a jumping off point to the Emacs manuals""" start="00:04:26.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""because the manuals are so so full but you""" start="00:04:30.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""need to have a sort of a cursory""" start="00:04:31.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""understanding to get started with them.""" start="00:04:33.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""And then yeah, if there are other sort of""" start="00:04:35.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""GitHub links or something like that,""" start="00:04:36.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""I like to put those in the description.""" start="00:04:38.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Good question. Right. And I think it's arcing""" start="00:04:42.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""back also. I keep using the word arcing back.""" start="00:04:44.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'm sorry. It's my... Every EmacsConf I have""" start="00:04:47.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""1 word or 1 phrase that I keep saying over""" start="00:04:49.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""and over again and this 1 is not leaving but""" start="00:04:51.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""don't worry we only have about 1 more hour""" start="00:04:53.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""and then you're done with me arcing out,""" start="00:04:54.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""arcing back to stuff. I think this is""" start="00:04:59.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""reminding me of both the mentoring talk we've""" start="00:05:03.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""had today about onboarding people basically""" start="00:05:06.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""so that they can have a well of a time on""" start="00:05:08.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""their own on Emacs and I'd agree with you,""" start="00:05:11.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""you know, as much as we like to rave about""" start="00:05:13.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs as a self-documenting editor,""" start="00:05:15.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""about how complete the documentation is,""" start="00:05:17.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""As you've mentioned in your talk,""" start="00:05:18.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's not accessible directly to the people.""" start="00:05:21.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""We can yell as much as we want to people on""" start="00:05:23.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""IRC, you just need to RTFM or you just need""" start="00:05:26.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""to do Ctrl-H-V for the variable or Ctrl-H-F.""" start="00:05:29.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""What is a variable? I am not for computer""" start="00:05:32.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""science. What does it mean?""" start="00:05:33.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""It is really blocking a lot of people right""" start="00:05:36.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""from the get-go. And I think the element of""" start="00:05:40.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""interactivity, as you've mentioned in your""" start="00:05:42.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""talk, that is introduced by video just makes""" start="00:05:45.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""the hand-holding that much easier.""" start="00:05:47.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""And it's great to do it like this.""" start="00:05:50.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""All right, I think we've got another""" start="00:05:53.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions. What are your fellow codes of""" start="00:05:56.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""students using for their editors?""" start="00:05:57.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""What kinds of feedback do you get from them""" start="00:06:00.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""when they learn about you using Emacs?""" start="00:06:01.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: That's a great question.""" start="00:06:05.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""I think professors want to make things,""" start="00:06:10.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""the entry as simple as possible.""" start="00:06:12.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""So for the first computer science course and""" start="00:06:15.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""the second, at least at Columbia,""" start="00:06:16.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""They use Codeo, which is 1 of those online""" start="00:06:20.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""whole IDEs. Now in the third course,""" start="00:06:25.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""which is sort of more the weed out as they""" start="00:06:27.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""call it, the professor gives you a choice and""" start="00:06:29.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""he says you can use Emacs or you can use Vim.""" start="00:06:33.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""And everyone uses Vim.""" start="00:06:36.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""Not a single person I know is using Emacs,""" start="00:06:38.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""simply because the professor's using Vim and""" start="00:06:43.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""that's what he shows on screen and that's""" start="00:06:45.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""just what everyone else falls into.""" start="00:06:46.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""And it's also, like, they're totally in the""" start="00:06:50.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""terminal, and that can be a big barrier of""" start="00:06:52.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""entry. So I think they see Emacs as like""" start="00:06:54.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""something like Vim, but it's not sort of the""" start="00:06:59.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""same idea. It's not what everyone uses""" start="00:07:01.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""because it's not what's being shown up on""" start="00:07:03.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""screen. So if you're not following,""" start="00:07:05.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""like if you're a new learner,""" start="00:07:06.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""if you're not following with Vim,""" start="00:07:08.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""you might have a little bit of a harder time""" start="00:07:10.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""in these classes because everyone else is""" start="00:07:12.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""also using Vim.""" start="00:07:14.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. And I'm kind of reminded again,""" start="00:07:19.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""it feels like this is the last talk,""" start="00:07:21.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""so I'm reminiscing of all the different talks""" start="00:07:24.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""we've had on the general chat,""" start="00:07:25.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""at least. And you know,""" start="00:07:28.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""it feels like we had, you know,""" start="00:07:30.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""this 1 talk, I can't remember the first name""" start="00:07:34.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""at the presentation, but it was about forcing""" start="00:07:36.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""people to use Emacs and not giving them the""" start="00:07:38.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""choice to do this. And I found it to be such""" start="00:07:41.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""a powerful move to do because usually people,""" start="00:07:45.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""maybe some classes are actually forcing Vim""" start="00:07:47.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""because it's a little more palatable I guess.""" start="00:07:49.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""Do you have something to say on this?""" start="00:07:51.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah let me actually, I've remembered 1""" start="00:07:53.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""thing, I know there's another course,""" start="00:07:55.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""a fourth course you'd say in assembly and the""" start="00:07:58.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""professor suggests Emacs.""" start="00:08:00.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""However I know that's just 1 professor so I""" start="00:08:04.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""think broadly Vim is more of the standard and""" start="00:08:06.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""yeah what were you, can you repeat what you""" start="00:08:08.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""said about Vim being more sort of friendly?""" start="00:08:09.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, because it's not,""" start="00:08:12.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""okay, I'm quoting the opinions of other,""" start="00:08:14.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""you know, I would hate to insult Emacs and""" start="00:08:17.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""give myself a bad rep at Emacs comfortable""" start="00:08:19.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""things. But it feels like because modal""" start="00:08:23.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""editing is usually something that people hear""" start="00:08:26.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""from when it starts looking into how to be""" start="00:08:28.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""more efficient when they read text.""" start="00:08:30.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""It feels like the first door,""" start="00:08:32.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""the closest door to this is Vim.""" start="00:08:35.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""And so a lot of professors,""" start="00:08:36.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""because there's very little on-boarding,""" start="00:08:39.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""I mean, I'm going to say the word on-boarding""" start="00:08:41.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""and then I'm going to modulate,""" start="00:08:42.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""but there's very little on-boarding to get""" start="00:08:44.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""into modal editing. You just have your H's""" start="00:08:47.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""and your J's and your K's and your L's and""" start="00:08:50.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""everything works. You know,""" start="00:08:51.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""it does something, yes,""" start="00:08:52.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""the arrows are in weird places,""" start="00:08:53.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""but it does something that is vaguely""" start="00:08:55.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""logical. Whereas with Ctrl-Meta,""" start="00:08:58.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""Hyper, Super, J and then Ctrl-C and Meta 4""" start="00:09:03.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""for good measure, you know,""" start="00:09:04.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""It already feels a little more opaque in""" start="00:09:08.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""terms of how people are going to use this.""" start="00:09:09.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""So, I think it's also 1 good thing about the""" start="00:09:13.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""videos is that people can see you're not""" start="00:09:15.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""contorting your hands in very difficult""" start="00:09:17.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""shapes to use Emacs as the bad rep usually""" start="00:09:20.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""is. But yeah, to come back to what I was""" start="00:09:24.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""saying about Vim, I just feel like they've""" start="00:09:26.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""won the battle in terms of looking very""" start="00:09:30.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""accessible. And for us with Emacs,""" start="00:09:33.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""from the top of our ivory tower,""" start="00:09:37.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""we see the ease of getting into Vim,""" start="00:09:39.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""but we always think, but Vim script is shit,""" start="00:09:43.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""we've got Elisp for us,""" start="00:09:44.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""We can do so many things on our end.""" start="00:09:46.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""So yeah, does that evoke anything to you with""" start="00:09:51.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""regards to Vim versus Emacs in terms of""" start="00:09:52.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""apprehension?""" start="00:09:53.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I think that Emacs might be more""" start="00:09:56.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""straightforward if you just plop someone down""" start="00:09:59.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""in front of their computer because you press""" start="00:10:01.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""H, you're going to see an H on the screen,""" start="00:10:03.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""right? And Vim is a whole new modal mindset.""" start="00:10:06.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""So for a student who wants to like gain""" start="00:10:09.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""efficiency, then yes, I think that Vim is""" start="00:10:13.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""definitely like, it feels like a more""" start="00:10:15.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""friendly introduction.""" start="00:10:16.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""But I think that Emacs doesn't get enough""" start="00:10:18.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""credit around here. And I'd like to see it""" start="00:10:20.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""more often, because a lot of students,""" start="00:10:23.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""they're not looking to fix the efficiencies""" start="00:10:25.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""in their text editing.""" start="00:10:28.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""They're looking to fix the efficiencies in""" start="00:10:31.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""how they do homework or how they do their""" start="00:10:33.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""programming assignments,""" start="00:10:34.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""and they would save time if they,""" start="00:10:37.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""or at least the mentality for a student,""" start="00:10:39.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""is that if you can just get it done more""" start="00:10:42.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""quickly, like it's more,""" start="00:10:43.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""you know, you do what you're used to,""" start="00:10:45.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""and Vim is just a barrier towards you know""" start="00:10:49.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""getting your work done like how do I copy and""" start="00:10:51.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""paste something it's a whole new set of""" start="00:10:52.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""challenges to learn so I think both have""" start="00:10:55.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""their deficiencies and abilities.""" start="00:10:56.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah it's funny because I'm just 1 last thing""" start="00:11:00.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""on this it feels like modal editing because""" start="00:11:03.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""it is already weird from the get-go,""" start="00:11:05.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""perhaps it might do a better job of making""" start="00:11:08.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""people uneasy. You know how we say that""" start="00:11:10.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""constraints breeds creativity.""" start="00:11:11.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""Well, Vim constrains you from the get-go.""" start="00:11:14.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""If you do not press I,""" start="00:11:16.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""nothing is going to show up in the buffer""" start="00:11:18.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""that you're currently editing.""" start="00:11:19.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""Whereas Emacs give you this full sense of""" start="00:11:21.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""security by when you press J,""" start="00:11:24.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, true.""" start="00:11:27.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: it actually inputs J. All right,""" start="00:11:29.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""moving on to another question.""" start="00:11:30.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""And by the way, we've got some time.""" start="00:11:32.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""We have technically about 6 more minutes,""" start="00:11:34.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""but I see Sasha on the other track is already""" start="00:11:38.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""answering questions that I'm in about""" start="00:11:40.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""EmacsConf. So we can go a little longer,""" start="00:11:42.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""as long as I let the organizers know.""" start="00:11:44.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""So we've got about, let's say,""" start="00:11:46.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""6 minutes for now. And we'll see if more""" start="00:11:48.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions crop up. All right,""" start="00:11:50.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""moving on to the next question.""" start="00:11:51.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""Did you start those university classes using""" start="00:11:53.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs, I suppose, in your first year?""" start="00:11:55.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, yeah, I did. I started with Emacs 2""" start="00:12:01.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""years before entering college,""" start="00:12:02.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""so my junior year of high school.""" start="00:12:04.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""And I've basically over time built up a""" start="00:12:09.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""workflow of how I will take my notes,""" start="00:12:11.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""how I will organize my classes.""" start="00:12:12.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""And now that I'm taking programming classes""" start="00:12:16.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""where Emacs might be more acceptable.""" start="00:12:18.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's even enhanced my workflow.""" start="00:12:21.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""Taking notes in Ouro for program assists,""" start="00:12:24.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""everyone talks about it,""" start="00:12:27.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""but from the source, It doesn't get better""" start="00:12:30.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""than that, being able to write with""" start="00:12:32.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""highlighting, with syntax highlighting,""" start="00:12:34.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""with easy exports, running inline code""" start="00:12:38.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""blocks. And a lot of these programming""" start="00:12:40.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""classes, they make you code on a server.""" start="00:12:42.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""And they just say, oh,""" start="00:12:45.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""SSH, and you can use Vim.""" start="00:12:46.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""I can use Tramp, and I can use Emacs,""" start="00:12:48.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""and I'm perfectly at home.""" start="00:12:50.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's just such a seamless transition.""" start="00:12:52.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's a really amazing way to do school.""" start="00:12:55.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""Professors, you know, all they want is a PDF""" start="00:12:58.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""at the end of the day.""" start="00:12:59.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""They just want the paper on their desk.""" start="00:13:00.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""They're not so picky about how you get it""" start="00:13:03.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""there. They just want it in their hands.""" start="00:13:04.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""So, so Emacs is, it's very usable.""" start="00:13:07.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's very doable.""" start="00:13:08.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. I've got a little anecdote on this""" start="00:13:11.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""because you're speaking about the topic of""" start="00:13:13.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs at university from the perspective of""" start="00:13:16.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""someone who is in computer science.""" start="00:13:17.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""But for me, in the humanities,""" start="00:13:19.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""I just remember those professors who just""" start="00:13:22.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""required you not to use your laptop.""" start="00:13:24.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""And I started with Emacs roughly at the same""" start="00:13:28.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""age as you did. And I was just using it for""" start="00:13:32.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""absolutely everything,""" start="00:13:33.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""for my organization, for producing papers.""" start="00:13:35.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""And to be told that I could not use Emacs for""" start="00:13:37.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""a class for my note-taking,""" start="00:13:38.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""I felt utterly naked in the face of what I""" start="00:13:43.660" video="qanda-sharing" id="subtitle"]] +[[!template text="""needed to do. And yeah,""" start="00:13:46.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's great to see those different""" start="00:13:47.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""experiences. And it just,""" start="00:13:49.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""you're always going to be weird.""" start="00:13:50.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""Like I was the weird guy using Emacs in the""" start="00:13:53.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""humanities, but I would have been weird using""" start="00:13:54.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""Vim or any kind of computers with fancy""" start="00:13:58.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""editing.""" start="00:13:59.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh yeah, yeah. And I'm in humanities classes""" start="00:14:02.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""as well, I'm not in a strictly engineering,""" start="00:14:03.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""so people will see me writing an essay about,""" start="00:14:06.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""you know, a philosophy essay,""" start="00:14:07.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""I was working on an essay about Plato and""" start="00:14:09.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""Aristotle, and they say,""" start="00:14:11.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""what are you coding, why are you coding your""" start="00:14:13.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""essay? And I say, well it's just the font""" start="00:14:16.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""looks a little bit different.""" start="00:14:17.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""Everything else is the same words,""" start="00:14:19.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""just the font looks a little different.""" start="00:14:20.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""This is how I like to do it.""" start="00:14:22.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, those pesky monospace fonts are making us""" start="00:14:25.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""pass as hackers. But for everyone who is""" start="00:14:27.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""behind us, looking at our monitors.""" start="00:14:29.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Exactly.""" start="00:14:30.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. A little bit of a remark,""" start="00:14:33.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""I guess, towards me and what I said about""" start="00:14:35.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""Vim. So, quoting, before NeoVim,""" start="00:14:37.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""you had to do as much or more configuration""" start="00:14:39.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""to get basic editing done than in Emacs.""" start="00:14:41.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's also slower with modal editing compared""" start="00:14:43.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""to Emacs key bindings because you have to""" start="00:14:45.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""press escape and 2 keys to get things done.""" start="00:14:47.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""While in Emacs, you only have to press Ctrl""" start="00:14:49.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""or Meta something to move or search or""" start="00:14:52.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""whatever, and then write.""" start="00:14:53.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""And I tend to agree, I'm not familiar with""" start="00:14:55.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""the ages before NeoVim,""" start="00:14:59.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""But I think we are mostly talking in terms of""" start="00:15:03.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""reputation and communication,""" start="00:15:04.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""like how is Vim considered nowadays or for""" start="00:15:08.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""the last 10 years in the mindset of people""" start="00:15:10.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""choosing or about to choose an editor.""" start="00:15:13.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""And, You know, I keep spitting the fact about""" start="00:15:17.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""VimScript being bad, but I'm going to be""" start="00:15:19.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""honest, I've never actually written any""" start="00:15:20.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""VimScript. I'm just parroting whatever the""" start="00:15:24.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""giants with shoulders I'm standing have been""" start="00:15:26.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""saying to me. And it's not very intelligent,""" start="00:15:28.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""I know, but We also have a very limited pool""" start="00:15:31.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""of time, and I also think that this is a""" start="00:15:34.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""point that your talk addresses in a way.""" start="00:15:36.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""Yes, we could be starting the massive quest""" start="00:15:40.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""of reading the Emacs manual or the ELISP""" start="00:15:42.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""introductory guide or the ELISP complete""" start="00:15:45.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""guide. A lot of people are trying,""" start="00:15:47.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""very highly motivated,""" start="00:15:48.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'm going to get started on Emacs and I'm""" start="00:15:51.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""going to do things right.""" start="00:15:51.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""But the fact of the matter is,""" start="00:15:53.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's not necessarily a good use of your time""" start="00:15:56.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""to get started like this,""" start="00:15:57.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""because there are so many things you're not""" start="00:16:00.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""going to understand, it kind of goes back,""" start="00:16:03.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""didn't say iBug this time,""" start="00:16:04.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""I stopped myself, it kind of goes back to""" start="00:16:07.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""this I plus 1 Vigoski proximals on""" start="00:16:11.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""development stuff that I was talking about""" start="00:16:12.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""before. The manual is I plus 999.""" start="00:16:16.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""Your video might be I plus 3 or I plus 2 and""" start="00:16:20.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""the hand-holding really does wonders for""" start="00:16:23.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""people to eventually get closer to reading""" start="00:16:26.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""the manuals and stuff like this.""" start="00:16:27.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah it's a great way just something about""" start="00:16:31.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""giving someone those practical""" start="00:16:33.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""demonstrations, that's something I really""" start="00:16:35.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""appreciate. A lot of these really nice""" start="00:16:36.860" video="qanda-sharing" id="subtitle"]] +[[!template text="""presentations we've had today and yesterday""" start="00:16:38.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""show real life use cases and we get to see""" start="00:16:41.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""people typing and they're working how they""" start="00:16:44.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""would normally work. And that's a great way""" start="00:16:46.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""to begin to understand how you can apply a""" start="00:16:49.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""tool to yourself because at the end of the""" start="00:16:50.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""day Emacs is a tool for us.""" start="00:16:52.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""You know we might take joy in it,""" start="00:16:53.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""it helps us be more productive,""" start="00:16:54.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's fun but we're using it for a certain end""" start="00:16:58.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""and you know if we how we can understand to""" start="00:17:00.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""get to those ends and what those ends might""" start="00:17:03.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""even be. It's just great to see other people""" start="00:17:05.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""bring that forth for you.""" start="00:17:07.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, great. Well, I don't see any more""" start="00:17:12.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions in the chat currently,""" start="00:17:13.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""and I don't see anyone who's joined us on the""" start="00:17:17.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""blue button. We are near the time that I said""" start="00:17:19.599" video="qanda-sharing" id="subtitle"]] +[[!template text="""we've got about 40 seconds to go until we""" start="00:17:22.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""were due to end. Jacob,""" start="00:17:24.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""I kind of want to give you the microphone for""" start="00:17:26.099" video="qanda-sharing" id="subtitle"]] +[[!template text="""the end. Do you have anything to say?""" start="00:17:27.339" video="qanda-sharing" id="subtitle"]] +[[!template text="""Like you've talked about your YouTube""" start="00:17:28.359" video="qanda-sharing" id="subtitle"]] +[[!template text="""channel, we've already ensured that the links""" start="00:17:30.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""will be everywhere on the talk page,""" start="00:17:31.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""in the pad, on IRC. But is there anything""" start="00:17:34.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""else you'd like to add?""" start="00:17:35.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""Because you're the last speaker of EmacsCon,""" start="00:17:37.120" video="qanda-sharing" id="subtitle"]] +[[!template text="""and you've got the tough responsibility of""" start="00:17:39.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""finishing it.""" start="00:17:42.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, well, that's not tough at all when we've""" start="00:17:45.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""had 2 days. I mean, so many people,""" start="00:17:47.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""so many presenters coming together and like I""" start="00:17:51.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""said right at the beginning to Leo,""" start="00:17:52.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""putting your face out there,""" start="00:17:54.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""putting your voice out there,""" start="00:17:56.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""putting yourself out there,""" start="00:17:57.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""it's such a great way to come together""" start="00:18:00.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""because Emacs is not the standard.""" start="00:18:02.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""You know, I've tried to teach my friends""" start="00:18:04.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs, I've tried to show it to them.""" start="00:18:06.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""You know, some people you get it or you""" start="00:18:08.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""don't. And the people who get it,""" start="00:18:10.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""we're not all in the same place.""" start="00:18:11.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""And it's great.""" start="00:18:13.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm interrupting you for a second because I""" start="00:18:15.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""think we were supposed to kill the the cron""" start="00:18:17.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""which starts the next meeting and it hasn't.""" start="00:18:20.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""Let me try to fix it. I'll talk to production""" start="00:18:22.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Do I wait or keep going?""" start="00:18:25.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: in a second. Just wait a bit.""" start="00:18:27.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'm very sorry. I've given you the mic and""" start="00:18:29.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""then it just... Okay let me just check your""" start="00:18:35.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""production.""" start="00:18:35.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""What? All right, Jason.""" start="00:18:59.660" video="qanda-sharing" id="subtitle"]] +[[!template text="""All right, Jacob, I'm going to put us""" start="00:19:00.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""manually back on track.""" start="00:19:02.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""So give me just a second.""" start="00:19:03.080" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Right.""" start="00:19:04.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm going to manually type the URL,""" start="00:19:09.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""because it's a janky setup that we've got""" start="00:19:12.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""right now, when whenever it's not working.""" start="00:19:13.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""All right. So tps slash slash bbb emacs first""" start="00:19:20.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""dot org html. No, that's not the 1.""" start="00:19:23.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""Let me try to type it.""" start="00:19:27.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""Probably. Bbbemaxfirst.""" start="00:19:27.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""L5H, R5D, BH0 Okay, we're getting back Okay,""" start="00:19:42.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""sorry folks about this We are,""" start="00:19:44.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""Jacob, We're back online.""" start="00:19:45.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'm really sorry about this.""" start="00:19:46.800" video="qanda-sharing" id="subtitle"]] +[[!template text="""It's just that Sasha's script kicked in.""" start="00:19:49.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""I did tell you we were supposed to finish at""" start="00:19:51.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""30. And because Sasha is busy presenting in""" start="00:19:53.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""the other room, sadly,""" start="00:19:54.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""we got yanked again. So Jacob,""" start="00:19:57.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'm very sorry for the interruption.""" start="00:19:58.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""And you were retelling people about something""" start="00:20:01.220" video="qanda-sharing" id="subtitle"]] +[[!template text="""you told me during the check-ins.""" start="00:20:02.320" video="qanda-sharing" id="subtitle"]] +[[!template text="""Do you mind restarting this?""" start="00:20:04.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, sure. Well, you said I have the no""" start="00:20:09.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""small task of making the last words from""" start="00:20:12.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""presenters and not the organizers at""" start="00:20:14.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""EmacsConf. And I said,""" start="00:20:16.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""well, that's not hard at all.""" start="00:20:17.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""How many speakers have we had?""" start="00:20:20.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""30? And it's so incredible these past,""" start="00:20:24.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""you know, today and yesterday to have all""" start="00:20:26.880" video="qanda-sharing" id="subtitle"]] +[[!template text="""been able to come together and not just share""" start="00:20:29.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""our ideas and our code and how we do things,""" start="00:20:33.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""but to share our faces and our voices and our""" start="00:20:38.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""lives, you know a little bit of our lives.""" start="00:20:39.780" video="qanda-sharing" id="subtitle"]] +[[!template text="""You know to have the passion to even spend""" start="00:20:42.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""the time to on your weekend to watch this""" start="00:20:44.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""means that you have some sort of care about""" start="00:20:47.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs and it adds to your life.""" start="00:20:49.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""And you know those Emacs people aren't""" start="00:20:51.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""everywhere. I've tried to bring my friends""" start="00:20:53.620" video="qanda-sharing" id="subtitle"]] +[[!template text="""onto Emacs and it seems like you know you're""" start="00:20:56.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""an Emacs person or you're not really an Emacs""" start="00:20:58.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""person. And those Emacs people can be really""" start="00:21:02.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""spread out. So it's great that we're able to""" start="00:21:04.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""come together and share a little bit of""" start="00:21:07.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""ourselves, a little bit of how we do things.""" start="00:21:09.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""And like I said in my talk,""" start="00:21:12.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""just increase our own joy in Emacs by coming""" start="00:21:15.660" video="qanda-sharing" id="subtitle"]] +[[!template text="""together and being able to share our joy in""" start="00:21:19.360" video="qanda-sharing" id="subtitle"]] +[[!template text="""Emacs. And of course, thank you to all the""" start="00:21:21.760" video="qanda-sharing" id="subtitle"]] +[[!template text="""organizers and everyone who's contributed in""" start="00:21:25.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""any way. It means a lot to even the smallest""" start="00:21:27.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""member, the biggest member of our community.""" start="00:21:29.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""We're all really glad to be able to come""" start="00:21:33.480" video="qanda-sharing" id="subtitle"]] +[[!template text="""together like this and share and meet each""" start="00:21:36.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""other and give nice talks.""" start="00:21:37.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, thank you so much,""" start="00:21:40.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""Jacob. And perhaps to reassure people,""" start="00:21:42.340" video="qanda-sharing" id="subtitle"]] +[[!template text="""because yes, right now it feels like we are""" start="00:21:44.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""legions, all of us here in the same room""" start="00:21:47.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""watching the same thing.""" start="00:21:47.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""We are the Emacs' and that's a very good""" start="00:21:50.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""feeling to have. But you know,""" start="00:21:52.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""first, there's 1 thing that is certain,""" start="00:21:54.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""almost 99% certain, it's the fact that next""" start="00:21:58.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""year there'll probably be another EmacsConf""" start="00:22:00.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""and there will be more Emacs versions,""" start="00:22:02.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""there will be more augmented versions,""" start="00:22:04.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""there will be more people doing cool stuff on""" start="00:22:07.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""Melpa, on ELPA, etc. So it is still a vibrant""" start="00:22:11.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""community. But in case you're craving this""" start="00:22:14.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""little extra in-person stuff,""" start="00:22:17.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""Sash and myself, we are maintaining a list of""" start="00:22:20.280" video="qanda-sharing" id="subtitle"]] +[[!template text="""all the Emacs user group.""" start="00:22:21.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""This is on the Emacs wiki.""" start="00:22:22.680" video="qanda-sharing" id="subtitle"]] +[[!template text="""This is what I'm sharing on my screen""" start="00:22:24.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""currently. And we try to organize them by""" start="00:22:27.500" video="qanda-sharing" id="subtitle"]] +[[!template text="""regional region, sorry,""" start="00:22:30.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""parts of the world like North America,""" start="00:22:31.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""South America, Europe,""" start="00:22:32.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""Africa, Asia. And we have a list of upcoming""" start="00:22:36.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""events and a lot of them are still online.""" start="00:22:39.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""Ever since we had the entire pandemic stuff,""" start="00:22:41.420" video="qanda-sharing" id="subtitle"]] +[[!template text="""a lot of the workshops moved online and,""" start="00:22:46.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""sorry, I had someone whispering in my ear.""" start="00:22:49.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""A lot of them moved online and they are still""" start="00:22:53.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""online now because they've realized it's a""" start="00:22:54.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""very great way to get more people in the same""" start="00:22:57.100" video="qanda-sharing" id="subtitle"]] +[[!template text="""place. And whilst it's great to have""" start="00:22:59.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""in-person meetings, We do this with Emacs""" start="00:23:01.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""Paris. Emacs Paris actually is happening is""" start="00:23:05.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""it? I think, oh I'm going to need to tell""" start="00:23:07.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""Sasha that apparently yes we do not have the""" start="00:23:10.200" video="qanda-sharing" id="subtitle"]] +[[!template text="""next event for Emacs Paris which is next""" start="00:23:12.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""Tuesday and it is in person but for everyone""" start="00:23:14.700" video="qanda-sharing" id="subtitle"]] +[[!template text="""and including you Jacob if you find a""" start="00:23:18.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""workshop in North America that is working for""" start="00:23:20.460" video="qanda-sharing" id="subtitle"]] +[[!template text="""you, I'm thinking about Emacs SF,""" start="00:23:22.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""which I've attended multiple times,""" start="00:23:24.660" video="qanda-sharing" id="subtitle"]] +[[!template text="""and Emacs Austin as well,""" start="00:23:27.980" video="qanda-sharing" id="subtitle"]] +[[!template text="""that I've been to once,""" start="00:23:29.060" video="qanda-sharing" id="subtitle"]] +[[!template text="""I think, It would be a lovely experience and""" start="00:23:31.640" video="qanda-sharing" id="subtitle"]] +[[!template text="""a way to, most of them are every month,""" start="00:23:34.160" video="qanda-sharing" id="subtitle"]] +[[!template text="""it would be a good way for you to stay in""" start="00:23:36.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""touch and to continue this sense of""" start="00:23:39.240" video="qanda-sharing" id="subtitle"]] +[[!template text="""in-person-ness about Emacs.""" start="00:23:40.580" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Wonderful. All right, thank you so much.""" start="00:23:46.560" video="qanda-sharing" id="subtitle"]] +[[!template text="""Should I drop off of our call now and let you""" start="00:23:48.900" video="qanda-sharing" id="subtitle"]] +[[!template text="""close things up?""" start="00:23:50.000" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, we're probably gonna close thing up.""" start="00:23:52.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""Let me just check on Sasha.""" start="00:23:53.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""Sasha is obviously answering many many""" start="00:23:55.380" video="qanda-sharing" id="subtitle"]] +[[!template text="""questions about how we are organizing""" start="00:23:57.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""EmacsConf. So Jacob, I'm gonna let you go.""" start="00:23:59.540" video="qanda-sharing" id="subtitle"]] +[[!template text="""Thank you so much for your presentation and""" start="00:24:01.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""your answers. And maybe we'll see you next""" start="00:24:03.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""year. Or maybe a workshop.""" start="00:24:05.020" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: Who knows? I'm so lucky I got you as my Q&A.""" start="00:24:06.820" video="qanda-sharing" id="subtitle"]] +[[!template text="""When I saw you at my first Emacs Conf 2 years""" start="00:24:10.440" video="qanda-sharing" id="subtitle"]] +[[!template text="""ago, I thought, maybe this guy will do mine.""" start="00:24:12.740" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Very nice. Thank you. I'm glad I was able to""" start="00:24:18.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""generate such a feeling.""" start="00:24:19.920" video="qanda-sharing" id="subtitle"]] +[[!template text="""All right, I'll get going now.""" start="00:24:21.600" video="qanda-sharing" id="subtitle"]] +[[!template text="""Jacob, have a wonderful evening.""" start="00:24:23.260" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 0]: And here you are. You too,""" start="00:24:23.940" video="qanda-sharing" id="subtitle"]] +[[!template text="""see you later.""" start="00:24:24.400" video="qanda-sharing" id="subtitle"]] +[[!template text="""[Speaker 1]: Bye-bye. And folks, what are we going to do""" start="00:24:28.140" video="qanda-sharing" id="subtitle"]] +[[!template text="""right now? I'm going to set everything up so""" start="00:24:30.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""that we can get Sasha finished on the talk.""" start="00:24:32.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""If you're watching, squinting with both""" start="00:24:34.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""streams, you can go to Sasha's room,""" start="00:24:37.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""I mean, the development track,""" start="00:24:39.520" video="qanda-sharing" id="subtitle"]] +[[!template text="""to maybe catch some of the answers by Sasha.""" start="00:24:42.180" video="qanda-sharing" id="subtitle"]] +[[!template text="""Otherwise, we'll be back in roughly 5 to 10""" start="00:24:45.040" video="qanda-sharing" id="subtitle"]] +[[!template text="""minutes to do the closing remarks on this""" start="00:24:46.960" video="qanda-sharing" id="subtitle"]] +[[!template text="""channel. In the meantime,""" start="00:24:47.720" video="qanda-sharing" id="subtitle"]] +[[!template text="""I'll put on some music.""" start="00:24:48.840" video="qanda-sharing" id="subtitle"]] +[[!template text="""So bear with us and I'll see you shortly.""" start="00:24:51.300" video="qanda-sharing" id="subtitle"]] +[[!template text="""And closing here. This BBB recording.""" start="00:25:15.660" video="qanda-sharing" id="subtitle"]] +[[!template text="""Yay!""" start="00:25:16.360" video="qanda-sharing" id="subtitle"]] + +Questions or comments? Please e-mail [jakebox0@protonmail.com](mailto:jakebox0@protonmail.com?subject=Comment%20for%20EmacsConf%202023%20sharing%3A%20Sharing%20Emacs%20is%20Caring%20Emacs%3A%20Emacs%20education%20and%20why%20I%20embraced%20video) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/sharing-before.md b/2023/info/sharing-before.md new file mode 100644 index 00000000..ae63e36c --- /dev/null +++ b/2023/info/sharing-before.md @@ -0,0 +1,28 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 17-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="sharing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="sharing-mainVideo" data=""" +00:00.000 Introduction +00:49.000 My journey of learning +04:03.400 Straightforward Emacs +05:32.120 Videos +07:16.400 Clarity +08:10.360 High-quality and accessible content +09:15.920 The personal aspect +11:48.120 Unity + +"""]]<div></div>Duration: 16:34 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li><li><a href="https://toobnix.org/w/3b5XfkceUaRjJuN5Pumgee">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="sharing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="sharing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus"></audio></div><div></div>Duration: 25:19 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/sharing-nav.md b/2023/info/sharing-nav.md new file mode 100644 index 00000000..2d903a48 --- /dev/null +++ b/2023/info/sharing-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/web">Emacs saves the Web (maybe)</a> +Next by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/solo-after.md b/2023/info/solo-after.md new file mode 100644 index 00000000..f99447c9 --- /dev/null +++ b/2023/info/solo-after.md @@ -0,0 +1,761 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="solo-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""Hi there, I'm Howard Abrams. You may remember me""" start="00:00:00.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""from past conference talks""" start="00:00:05.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""as "Literate DevOps and the Temple of Doom"""" start="00:00:07.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and "Using Eshell for Fun and Profit".""" start="00:00:10.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I'm here to talk to you about my latest Emacs project:""" start="00:00:13.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""playing games, solo role-playing games.""" start="00:00:16.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I started playing RPGs when I got my first copy""" start="00:00:19.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""of Dungeons & Dragons when I was 12.""" start="00:00:23.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Yes, my original copy burned""" start="00:00:25.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""in the Great Satanic Panic of the 1980s,""" start="00:00:28.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but that's another story.""" start="00:00:30.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I started playing other RPGs like GURPS.""" start="00:00:32.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""These are some of my notes.""" start="00:00:37.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Back then, I was typing them in Emacs,""" start="00:00:40.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but I formatted them with LaTeX.""" start="00:00:42.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Later, when I was introducing my kids""" start="00:00:46.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to role-playing games,""" start="00:00:49.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I actually typed them up still in Emacs,""" start="00:00:50.840" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but now formatted them for a tablet.""" start="00:00:53.581" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I wrote a little JavaScript code""" start="00:00:57.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""that allowed me to click on it, and it would roll dice,""" start="00:00:59.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""generate random events, keep track of turn order,""" start="00:01:03.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""you know, everything,""" start="00:01:06.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so I didn't have to slow down the action of the game.""" start="00:01:07.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Well, when my kids got older,""" start="00:01:10.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I still managed to sneak in a game of D&D""" start="00:01:13.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""once a week at lunch.""" start="00:01:15.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""This pastime came to a screeching halt with the pandemic.""" start="00:01:17.320" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Solo RPGs""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""I turned to playing role-playing games by myself""" start="00:01:20.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to get my fix. Playing these silly elf games in solo mode""" start="00:01:23.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""has been part of the game for many years,""" start="00:01:28.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but with so many of us stuck at home,""" start="00:01:29.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""solo role-playing games really expanded,""" start="00:01:32.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""creative people releasing some amazing ideas.""" start="00:01:35.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""What's a solo RPG like? Well, it's somewhere in the middle""" start="00:01:40.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""of writing your own story, where anything's possible,""" start="00:01:44.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but you've got to do all the imaginative work;""" start="00:01:47.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""or reading a choose-your-own-adventure book,""" start="00:01:50.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""where the text is given to you,""" start="00:01:53.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and you have free, a few predetermined paths;""" start="00:01:55.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and tactical battle games,""" start="00:01:59.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""where dice determines everything.""" start="00:02:01.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""It kind of fits in the sweet spot between those.""" start="00:02:03.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""While I started removing the Game Master""" start="00:02:05.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""using the Mythic GM Emulator,""" start="00:02:08.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Ironsworn really captivated me.""" start="00:02:12.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I began with dice, pencils, notebooks, you know,""" start="00:02:15.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""just like when I was a kid. But taking notes on paper?""" start="00:02:19.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Yeah, you know me. That's not my jam. Org mode is.""" start="00:02:23.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And, you know, notes have to be in Org,""" start="00:02:28.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""well, why not write a little dice roller in Lisp?""" start="00:02:31.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Well, when Shawn Tomkin released his Ironsworn""" start="00:02:35.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""under the Creative Commons, well,""" start="00:02:38.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I could just download the entire text.""" start="00:02:41.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I figured I could just render the entire game in Emacs.""" start="00:02:43.920" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""All right, enough talk. Let's get some Emacs action here,""" start="00:02:47.440" video="mainVideo-solo" id="subtitle"]] +[[!template text="""while I show you a bit of my game.""" start="00:02:51.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""When playing a solo RPG,""" start="00:02:55.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I jot down the story notes in an Org file.""" start="00:02:57.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I mean, did you expect anything less from me?""" start="00:02:59.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I alternate between lengthy prose and short notes.""" start="00:03:02.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""As I'm both the writer and the audience,""" start="00:03:07.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the goal is just enjoyment.""" start="00:03:10.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, this document is both a record log of my game sessions,""" start="00:03:12.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""as well as my character's character sheet.""" start="00:03:17.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""In most RPGs, a player's focus is a character sheet""" start="00:03:20.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""that lists all the attributes, the stats, equipment,""" start="00:03:24.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""powers, you know, that sort of thing.""" start="00:03:27.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""For my game, I wanted the focus to be the prose,""" start="00:03:28.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""or at least the notes.""" start="00:03:32.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, I put down all the stats as Org mode properties.""" start="00:03:34.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Now, I can collapse a property drawer""" start="00:03:38.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and have functions""" start="00:03:40.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""that just grab values from these properties.""" start="00:03:42.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""All right, let's play. While not important to my talk,""" start="00:03:45.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I'm in the middle of a game. My character, Tegan,""" start="00:03:50.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""promised to help a village by tracking down""" start="00:03:52.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the son of a village chief. A less-than-stellar roll""" start="00:03:54.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""meant I didn't catch him before he entered""" start="00:03:59.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the mysterious underground structure""" start="00:04:01.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""of a relic of an ancient people.""" start="00:04:03.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I just finished playing out the journey,""" start="00:04:06.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and he's about to enter into the Catacombs of Svala's Blood.""" start="00:04:08.400" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Randomization""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""Why that name? Well, that was actually what came up""" start="00:04:11.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""from an extensive random number generator that I wrote.""" start="00:04:15.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""As I wrote more and more functions""" start="00:04:19.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to help me play this game,""" start="00:04:21.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and since I don't play all the time,""" start="00:04:23.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I created hydra. I can roll dice,""" start="00:04:25.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I can roll dice challenges against the character stats,""" start="00:04:30.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I can adjust stats. Lots of random generators""" start="00:04:34.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""come from this oracle section.""" start="00:04:38.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""For instance, are footprints going through the door?""" start="00:04:39.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I press `c`, and I'm prompted with how likely.""" start="00:04:43.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Since the villagers gave Tegan vague directions,""" start="00:04:46.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and he didn't see any signs the contrary,""" start="00:04:51.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I chose "likely". And, well, it originally said yes,""" start="00:04:53.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and that's why I jotted this information down.""" start="00:04:58.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Now, this is different than my character's ability""" start="00:05:01.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to notice the prints. This is about generating the story,""" start="00:05:03.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""something that the game master would do""" start="00:05:07.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""in a typical role-playing game.""" start="00:05:10.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Now, if I wanted to name something,""" start="00:05:12.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""or even the current weather,""" start="00:05:14.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I have random tables with the `C` keystroke.""" start="00:05:16.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Hmm, weather. Oh, it's summer, so hey,""" start="00:05:20.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""it's nice and clear. All right, let's play.""" start="00:05:27.280" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Moves""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""The action in Ironsworn,""" start="00:05:31.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""like other Powered by the Apocalypse games,""" start="00:05:34.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is driven by moves. So, I hit the `m` key,""" start="00:05:37.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and all the moves show up.""" start="00:05:44.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Now, I don't think I need to espouse""" start="00:05:46.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the virtues of completing-read enhancements like Ivy.""" start="00:05:49.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Here, I'm using orderless with vertico""" start="00:05:52.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to help me find my choices.""" start="00:05:55.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Since I've discovered a site, let's play that move.""" start="00:05:57.720" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Reference""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""I seldom remember the details for the moves,""" start="00:06:03.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so I figured, why not put the text of the book""" start="00:06:06.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""in an Org file and show it in a side window?""" start="00:06:09.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""The prompt at the bottom, asking for a name,""" start="00:06:11.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is driven by the content in the displayed Org file.""" start="00:06:15.440" video="mainVideo-solo" id="subtitle"]] +[[!template text="""This allows me to enhance my game without""" start="00:06:18.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""changing the original code. So, let's call this story arc,""" start="00:06:21.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Exploring the Catacombs of Svala's Blood.""" start="00:06:25.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Ooh, sounds epic.""" start="00:06:31.840" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Story arcs""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""Ironsworn tracks the beats of a narrative,""" start="00:06:34.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so major plot points take up more room in the fiction""" start="00:06:37.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""than minor plot points.""" start="00:06:40.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Similar games like Blades in the Dark""" start="00:06:42.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""use numbers to track these, so you can say something like,""" start="00:06:45.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""we're three quarters of the way through this story arc.""" start="00:06:48.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Ironsworn just uses labels,""" start="00:06:51.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and while I want this particular story arc""" start="00:06:53.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to be significant, I really just want to get in,""" start="00:06:55.840" video="mainVideo-solo" id="subtitle"]] +[[!template text="""find this person, and get out.""" start="00:06:59.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, I'm going to call this "short".""" start="00:07:00.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Next, it's asking about an Org mode header placement.""" start="00:07:04.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""While I originally wanted my Org files""" start="00:07:09.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to be completely flexible,""" start="00:07:12.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""one thing I noticed in playing""" start="00:07:13.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is that a pattern always emerged.""" start="00:07:15.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""The story became a tree. You see, story arcs""" start="00:07:18.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""were just a series of montages or scenes,""" start="00:07:22.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and each of those were made of a series of events""" start="00:07:25.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and challenges to overcome.""" start="00:07:27.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, each Org mode header has a track,""" start="00:07:29.120" video="mainVideo-solo" id="subtitle"]] +[[!template text="""which often becomes the number of subheadings.""" start="00:07:32.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""At any point, I can see how much track is being made.""" start="00:07:35.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, for instance, this one seems to be""" start="00:07:40.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""about a third of the way through.""" start="00:07:47.240" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Using different stats""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""So, let's dive into this ancient place.""" start="00:07:48.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Since I've been walking through a misty forest,""" start="00:07:52.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I can imagine vines hiding an immense door""" start="00:07:55.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and a humid, earthy smell as I peer inside.""" start="00:07:59.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""But I don't have to write that stuff down,""" start="00:08:01.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""or if I want to practice my writing, I can.""" start="00:08:04.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I can imagine the place is dark,""" start="00:08:06.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so Tegan lights a torch""" start="00:08:09.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""before peering into this obscure world.""" start="00:08:10.840" video="mainVideo-solo" id="subtitle"]] +[[!template text="""As this move mentions,""" start="00:08:13.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the next move to make is called Delve the Depths.""" start="00:08:15.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""As soon as I select this move,""" start="00:08:20.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""it shows up on the side window, and explains that,""" start="00:08:26.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""depending on how you're moving through""" start="00:08:31.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""this ancient catacombs,""" start="00:08:34.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is what kind of stat I roll against,""" start="00:08:36.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and those stats show up at the bottom.""" start="00:08:38.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""You know, if I'm sneaking around, you roll against "shadow".""" start="00:08:41.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""If you're trying to go as fast as you can, it's "edge".""" start="00:08:45.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""But I kind of imagine that he's thinking through,""" start="00:08:47.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""being very careful about it.""" start="00:08:51.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, I'm going to select "wits".""" start="00:08:53.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And I don't have any modifiers.""" start="00:08:55.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Just about every one of my stats prompts me""" start="00:08:57.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""if I want to add or subtract any values.""" start="00:08:59.560" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Dice rolls""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""A miss. I should explain how the dice roll in this game.""" start="00:09:02.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""The downside to Ironsworn is that""" start="00:09:09.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the dice mechanics are more cumbersome than other games.""" start="00:09:13.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""You roll a 6-sided die, add to it your relevant stat,""" start="00:09:16.840" video="mainVideo-solo" id="subtitle"]] +[[!template text="""plus any modifiers. Next, you roll two 10-sided die""" start="00:09:20.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and see how it compares.""" start="00:09:24.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Of course, I programmed this in Lisp,""" start="00:09:25.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but when I displayed it, I wanted to see all the dice.""" start="00:09:28.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And I also just wanted to see the end results.""" start="00:09:31.600" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Dangers""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""So I colored it. I rolled a miss,""" start="00:09:34.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""which means I need to reveal a danger.""" start="00:09:37.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Sure, I could imagine all sorts of dangers,""" start="00:09:39.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but this is a game.""" start="00:09:43.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I've already made a random generator for dangers.""" start="00:09:44.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""In fact, I've made a random generator""" start="00:09:48.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""for dangers in an ancient underkeep.""" start="00:09:51.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Discovery undermines or complicates the quest.""" start="00:09:55.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Hmm, a complication for finding the chief's son?""" start="00:10:00.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""What about a labyrinth full of hallways and levels""" start="00:10:09.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""with lots of choices and almost no way of finding them?""" start="00:10:13.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Yeah, that sounds like it fits pretty well.""" start="00:10:16.600" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""A strong success""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""Time for another move. This time, we're going to""" start="00:10:19.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""gather information,""" start="00:10:26.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""see if we can figure out which way to go.""" start="00:10:28.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""A strong hit. Excellent.""" start="00:10:32.280" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I imagine Tegan noticing footprints in the dust""" start="00:10:34.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and knowing where to go.""" start="00:10:38.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""The game suggests that when you get a strong success,""" start="00:10:40.440" video="mainVideo-solo" id="subtitle"]] +[[!template text="""you can increase your momentum.""" start="00:10:44.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""These game mechanics""" start="00:10:45.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""come into play later, but this function here""" start="00:10:48.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""allows me to adjust that stat +2.""" start="00:10:51.755" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I don't even have to scroll to the top of the buffer""" start="00:10:57.881" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and edit that value in my properties.""" start="00:11:01.461" video="mainVideo-solo" id="subtitle"]] +[[!template text="""At any point, I can take a look at those stats""" start="00:11:04.821" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and see how they measure up.""" start="00:11:08.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Again, I don't have to scroll up""" start="00:11:10.440" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and take a look at my properties""" start="00:11:13.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""at the top of the Org mode file.""" start="00:11:14.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""That's how I play the game.""" start="00:11:16.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""It's just a recursive loop of playing a move,""" start="00:11:19.240" video="mainVideo-solo" id="subtitle"]] +[[!template text="""rolling some dice to see how it works,""" start="00:11:24.640" video="mainVideo-solo" id="subtitle"]] +[[!template text="""trying to answer the question""" start="00:11:27.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""based on your own imagination or random tables,""" start="00:11:30.160" video="mainVideo-solo" id="subtitle"]] +[[!template text="""which the game calls oracles,""" start="00:11:33.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and play creatively until you decide to take a break""" start="00:11:35.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and pick it up another time.""" start="00:11:41.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I think you get the gist of how I play""" start="00:11:42.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""this dice and pencil game in Org Mode.""" start="00:11:47.000" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Other solo RPGs""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""However, I found more solo RPGs to play.""" start="00:11:49.680" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And of course, I want to render them in Emacs too.""" start="00:11:54.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""This code for Ironsworn was a bit too specific,""" start="00:11:57.320" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so I decided to create a role-playing game toolkit.""" start="00:12:00.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""This project is still in the early stages,""" start="00:12:04.760" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but I've created some functions""" start="00:12:09.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""for mimicking rolling dice, including a mini-DSL for""" start="00:12:12.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""making dice mechanics""" start="00:12:16.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""typical of many role-playing game systems.""" start="00:12:19.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I've also ported over the random table system.""" start="00:12:22.840" video="mainVideo-solo" id="subtitle"]] +[[!template text="""A text file can just list entries to be displayed at random.""" start="00:12:26.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""I love that I can put dice expression""" start="00:12:30.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and word choices in the entries.""" start="00:12:33.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""One type of random table allows you""" start="00:12:35.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to essentially copy and paste a table""" start="00:12:39.440" video="mainVideo-solo" id="subtitle"]] +[[!template text="""from a published game into a text file.""" start="00:12:41.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""A frequency table is what I'm calling""" start="00:12:43.800" video="mainVideo-solo" id="subtitle"]] +[[!template text="""a list of random entries where some entries show up""" start="00:12:47.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""more often than others. I'm working on generalizing""" start="00:12:50.880" video="mainVideo-solo" id="subtitle"]] +[[!template text="""the character sheet attributes as Org properties,""" start="00:12:55.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""so if you're interested, check out the project at Codeberg.""" start="00:12:59.960" video="mainVideo-solo" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]] + +[[!template text="""The point of my presentation is not to show off Ironsworn,""" start="00:13:04.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""how I programmed it, or even this new toolkit.""" start="00:13:10.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""You see, most engineers,""" start="00:13:14.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""when they get an idea for a game like mine,""" start="00:13:17.560" video="mainVideo-solo" id="subtitle"]] +[[!template text="""would make a web app. Nothing wrong with it.""" start="00:13:20.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""More people can play it,""" start="00:13:24.080" video="mainVideo-solo" id="subtitle"]] +[[!template text="""but web apps suffer from text entry.""" start="00:13:25.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And don't tell me you prefer the keyboard interface""" start="00:13:28.200" video="mainVideo-solo" id="subtitle"]] +[[!template text="""to Google Docs. Oh, and the JavaScript framework du jour?""" start="00:13:30.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Oh, I mean, that's a huge barrier of entry""" start="00:13:35.960" video="mainVideo-solo" id="subtitle"]] +[[!template text="""when all you want to do""" start="00:13:40.400" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is have a bit of fun prototyping a game.""" start="00:13:42.040" video="mainVideo-solo" id="subtitle"]] +[[!template text="""What I'd like to impress upon you""" start="00:13:44.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""is that hacking Emacs to make personal games is a trip.""" start="00:13:48.480" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Learning Lisp is, it's easy.""" start="00:13:54.000" video="mainVideo-solo" id="subtitle"]] +[[!template text="""And more, Emacs Lisp has some, well sure,""" start="00:13:57.360" video="mainVideo-solo" id="subtitle"]] +[[!template text="""it has some cruft. But really, some of those features""" start="00:14:00.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""that I would hate at a distributed system at work,""" start="00:14:04.520" video="mainVideo-solo" id="subtitle"]] +[[!template text="""like global variables, makes hacking easier""" start="00:14:07.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""when you just want to have some fun in your own system.""" start="00:14:10.920" video="mainVideo-solo" id="subtitle"]] +[[!template text="""So, grab your laptop, sink into your comfy chair,""" start="00:14:14.720" video="mainVideo-solo" id="subtitle"]] +[[!template text="""pour yourself a glass of scotch,""" start="00:14:19.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""and craft yourself an enjoyable evening.""" start="00:14:21.600" video="mainVideo-solo" id="subtitle"]] +[[!template text="""Happy hacking, my friends.""" start="00:14:24.720" video="mainVideo-solo" id="subtitle"]] + + + +Captioner: sachac + +<a name="solo-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Right. Okay, so hi everyone.""" start="00:00:02.899" video="qanda-solo" id="subtitle"]] +[[!template text="""We are now live. Hi Howard,""" start="00:00:04.540" video="qanda-solo" id="subtitle"]] +[[!template text="""how are you doing? Great.""" start="00:00:06.339" video="qanda-solo" id="subtitle"]] +[[!template text="""Lovely to hear. As usual,""" start="00:00:09.960" video="qanda-solo" id="subtitle"]] +[[!template text="""it's always a pleasure to see your""" start="00:00:11.980" video="qanda-solo" id="subtitle"]] +[[!template text="""presentation and the amount of time and""" start="00:00:14.440" video="qanda-solo" id="subtitle"]] +[[!template text="""energy you put into it.""" start="00:00:15.360" video="qanda-solo" id="subtitle"]] +[[!template text="""Slightly sorry about the shoppiness of the""" start="00:00:17.680" video="qanda-solo" id="subtitle"]] +[[!template text="""broadcast. Do not worry,""" start="00:00:18.680" video="qanda-solo" id="subtitle"]] +[[!template text="""the talk will be in its full 30 fps quality""" start="00:00:22.700" video="qanda-solo" id="subtitle"]] +[[!template text="""on the website after the conference.""" start="00:00:24.779" video="qanda-solo" id="subtitle"]] +[[!template text="""Actually, right now. It's available right""" start="00:00:26.759" video="qanda-solo" id="subtitle"]] +[[!template text="""now. As usual, feel free to ask your""" start="00:00:30.099" video="qanda-solo" id="subtitle"]] +[[!template text="""questions in the in the pad.""" start="00:00:31.560" video="qanda-solo" id="subtitle"]] +[[!template text="""We've linked it both on the talk page and on""" start="00:00:34.200" video="qanda-solo" id="subtitle"]] +[[!template text="""IRC. I think I am on the right 1,""" start="00:00:38.400" video="qanda-solo" id="subtitle"]] +[[!template text="""right? This is a solo.""" start="00:00:40.080" video="qanda-solo" id="subtitle"]] +[[!template text="""Guys, questions, where are they?""" start="00:00:42.660" video="qanda-solo" id="subtitle"]] +[[!template text="""Oh, we do have questions,""" start="00:00:45.060" video="qanda-solo" id="subtitle"]] +[[!template text="""it's just that they're not in the right part.""" start="00:00:46.920" video="qanda-solo" id="subtitle"]] +[[!template text="""Okay, so I'm going to start,""" start="00:00:47.960" video="qanda-solo" id="subtitle"]] +[[!template text="""I'm going to read the questions to Howard and""" start="00:00:49.739" video="qanda-solo" id="subtitle"]] +[[!template text="""Howard will be answering them.""" start="00:00:50.860" video="qanda-solo" id="subtitle"]] +[[!template text="""And if you are interested in asking questions""" start="00:00:52.960" video="qanda-solo" id="subtitle"]] +[[!template text="""directly to Howard, I see a lot of people""" start="00:00:54.620" video="qanda-solo" id="subtitle"]] +[[!template text="""have joined us on BBB,""" start="00:00:55.640" video="qanda-solo" id="subtitle"]] +[[!template text="""so we'll first go through the questions on""" start="00:00:58.540" video="qanda-solo" id="subtitle"]] +[[!template text="""the pad and then we'll move on to the people""" start="00:01:00.800" video="qanda-solo" id="subtitle"]] +[[!template text="""on BBB. So Howard, starting with the first""" start="00:01:03.340" video="qanda-solo" id="subtitle"]] +[[!template text="""question, does table data allow for""" start="00:01:06.300" video="qanda-solo" id="subtitle"]] +[[!template text="""recursion, e.g. The result that returns they""" start="00:01:08.640" video="qanda-solo" id="subtitle"]] +[[!template text="""are random monster haunting the cavern""" start="00:01:10.600" video="qanda-solo" id="subtitle"]] +[[!template text="""entrance and we roll on random monster and""" start="00:01:14.060" video="qanda-solo" id="subtitle"]] +[[!template text="""inject them, inject into the result?""" start="00:01:16.420" video="qanda-solo" id="subtitle"]] +[[!template text="""Sorry a little bit of a complicated question.""" start="00:01:17.920" video="qanda-solo" id="subtitle"]] +[[!template text="""Do you want me to read it again,""" start="00:01:21.900" video="qanda-solo" id="subtitle"]] +[[!template text="""perhaps? Yeah, I think so.""" start="00:01:23.620" video="qanda-solo" id="subtitle"]] +[[!template text="""I didn't quite catch that.""" start="00:01:25.240" video="qanda-solo" id="subtitle"]] +[[!template text="""Okay, so does the table data allow for""" start="00:01:28.860" video="qanda-solo" id="subtitle"]] +[[!template text="""recursion? So I think...""" start="00:01:30.180" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, yeah, yeah, yeah, yeah.""" start="00:01:31.560" video="qanda-solo" id="subtitle"]] +[[!template text="""No, it does. I put a little,""" start="00:01:33.960" video="qanda-solo" id="subtitle"]] +[[!template text="""you know, there's some code that could,""" start="00:01:35.440" video="qanda-solo" id="subtitle"]] +[[!template text="""so you could, yeah, you get a random value""" start="00:01:38.660" video="qanda-solo" id="subtitle"]] +[[!template text="""that gets inserted and that random value""" start="00:01:41.040" video="qanda-solo" id="subtitle"]] +[[!template text="""could refer to another table and it can keep""" start="00:01:43.280" video="qanda-solo" id="subtitle"]] +[[!template text="""on going. I have not pushed that that hard""" start="00:01:46.000" video="qanda-solo" id="subtitle"]] +[[!template text="""because obviously it's,""" start="00:01:48.320" video="qanda-solo" id="subtitle"]] +[[!template text="""it might be a little on the heavyweight side.""" start="00:01:50.880" video="qanda-solo" id="subtitle"]] +[[!template text="""I can't imagine it to go too deep,""" start="00:01:52.540" video="qanda-solo" id="subtitle"]] +[[!template text="""though.""" start="00:01:52.760" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm pretty sure Emacs would be complaining if""" start="00:01:56.820" video="qanda-solo" id="subtitle"]] +[[!template text="""you go a little too deep.""" start="00:01:57.940" video="qanda-solo" id="subtitle"]] +[[!template text="""We have something as Mike's list recursion,""" start="00:01:59.979" video="qanda-solo" id="subtitle"]] +[[!template text="""and stuff like this. So don't worry.""" start="00:02:01.420" video="qanda-solo" id="subtitle"]] +[[!template text="""Go willy nilly with your recursions.""" start="00:02:03.440" video="qanda-solo" id="subtitle"]] +[[!template text="""We've got comments about the fact that it's a""" start="00:02:07.120" video="qanda-solo" id="subtitle"]] +[[!template text="""really cool project and I feel like everyone""" start="00:02:09.180" video="qanda-solo" id="subtitle"]] +[[!template text="""watching would be agreeing.""" start="00:02:10.680" video="qanda-solo" id="subtitle"]] +[[!template text="""You've got a question about where you can get""" start="00:02:14.100" video="qanda-solo" id="subtitle"]] +[[!template text="""this. Do you have a github repository with""" start="00:02:16.620" video="qanda-solo" id="subtitle"]] +[[!template text="""all of this?""" start="00:02:17.080" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, and at the well at the end of the""" start="00:02:20.440" video="qanda-solo" id="subtitle"]] +[[!template text="""presentation I kind of display that and I""" start="00:02:22.840" video="qanda-solo" id="subtitle"]] +[[!template text="""think I put it at the top of the the pad""" start="00:02:25.920" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, there's a""" start="00:02:35.220" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes. I don't go Gone please.""" start="00:02:36.760" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Nothing there. There's a lot of stuff that""" start="00:02:38.680" video="qanda-solo" id="subtitle"]] +[[!template text="""needs to be reformatted.""" start="00:02:40.080" video="qanda-solo" id="subtitle"]] +[[!template text="""This is all Aflacode, so obviously it's a""" start="00:02:46.820" video="qanda-solo" id="subtitle"]] +[[!template text="""personal hack. So people should just steal""" start="00:02:49.180" video="qanda-solo" id="subtitle"]] +[[!template text="""the code as opposed to looking at a real""" start="00:02:51.880" video="qanda-solo" id="subtitle"]] +[[!template text="""project to use.""" start="00:02:52.760" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, lovely. So this game plus CRDT should""" start="00:03:00.420" video="qanda-solo" id="subtitle"]] +[[!template text="""be great for non-solid plays.""" start="00:03:01.960" video="qanda-solo" id="subtitle"]] +[[!template text="""Are you familiar with CRDT?""" start="00:03:03.640" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, so I used to use Flubits once upon a""" start="00:03:08.160" video="qanda-solo" id="subtitle"]] +[[!template text="""time and after seeing the previous talk on""" start="00:03:11.880" video="qanda-solo" id="subtitle"]] +[[!template text="""CRDT it's like, oh, I like that,""" start="00:03:14.060" video="qanda-solo" id="subtitle"]] +[[!template text="""and yes, I think that would be a fun idea.""" start="00:03:16.000" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: I think I remember, so I did something much""" start="00:03:19.860" video="qanda-solo" id="subtitle"]] +[[!template text="""more humble than you did.""" start="00:03:21.040" video="qanda-solo" id="subtitle"]] +[[!template text="""I did a little bit, a little package in Org""" start="00:03:24.660" video="qanda-solo" id="subtitle"]] +[[!template text="""Mode for rolling dice and you had like a""" start="00:03:27.940" video="qanda-solo" id="subtitle"]] +[[!template text="""little formula like you could write 60 20 and""" start="00:03:31.560" video="qanda-solo" id="subtitle"]] +[[!template text="""it would throw 6 dice with 20 faces,""" start="00:03:34.740" video="qanda-solo" id="subtitle"]] +[[!template text="""60 sorry, 6 die, Frenchmen here in the room,""" start="00:03:39.060" video="qanda-solo" id="subtitle"]] +[[!template text="""20 faces and it would average them out or""" start="00:03:43.660" video="qanda-solo" id="subtitle"]] +[[!template text="""provide you any kind of stats needed.""" start="00:03:45.140" video="qanda-solo" id="subtitle"]] +[[!template text="""And this type of stuff works really well over""" start="00:03:48.800" video="qanda-solo" id="subtitle"]] +[[!template text="""CRDT because it's 1 edit inside of a file.""" start="00:03:52.540" video="qanda-solo" id="subtitle"]] +[[!template text="""If you start making edits in different parts""" start="00:03:55.900" video="qanda-solo" id="subtitle"]] +[[!template text="""of your file, it starts becoming a little""" start="00:03:58.780" video="qanda-solo" id="subtitle"]] +[[!template text="""more complicated because CRDT struggles when""" start="00:04:02.060" video="qanda-solo" id="subtitle"]] +[[!template text="""you're making many discrete changes inside of""" start="00:04:04.480" video="qanda-solo" id="subtitle"]] +[[!template text="""the same file. Does that make sense?""" start="00:04:05.640" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: It does, it does. Interesting.""" start="00:04:07.640" video="qanda-solo" id="subtitle"]] +[[!template text="""Okay, yeah, no, I have not played with it""" start="00:04:10.120" video="qanda-solo" id="subtitle"]] +[[!template text="""yet.""" start="00:04:10.280" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, feel free to play with it and if you've""" start="00:04:14.280" video="qanda-solo" id="subtitle"]] +[[!template text="""got any kind of... If it works,""" start="00:04:16.320" video="qanda-solo" id="subtitle"]] +[[!template text="""it works and it's amazing,""" start="00:04:17.720" video="qanda-solo" id="subtitle"]] +[[!template text="""but if it doesn't, feel free to send us""" start="00:04:20.200" video="qanda-solo" id="subtitle"]] +[[!template text="""messages because Shantan,""" start="00:04:21.180" video="qanda-solo" id="subtitle"]] +[[!template text="""who's the maintainer of CRDT,""" start="00:04:23.240" video="qanda-solo" id="subtitle"]] +[[!template text="""we've been looking into options to make it a""" start="00:04:25.840" video="qanda-solo" id="subtitle"]] +[[!template text="""little more resilient and work elsewhere for""" start="00:04:28.380" video="qanda-solo" id="subtitle"]] +[[!template text="""securely. Excellent. All right,""" start="00:04:31.360" video="qanda-solo" id="subtitle"]] +[[!template text="""Great. I'm going back to the previous""" start="00:04:34.600" video="qanda-solo" id="subtitle"]] +[[!template text="""question. So does the current version also""" start="00:04:37.160" video="qanda-solo" id="subtitle"]] +[[!template text="""have some utilities for doing multiplayer,""" start="00:04:39.020" video="qanda-solo" id="subtitle"]] +[[!template text="""like either physically or digitally,""" start="00:04:41.140" video="qanda-solo" id="subtitle"]] +[[!template text="""like we've done with CRUT?""" start="00:04:42.520" video="qanda-solo" id="subtitle"]] +[[!template text="""The question is because you mentioned you""" start="00:04:45.060" video="qanda-solo" id="subtitle"]] +[[!template text="""previously did multiplayer session as well?""" start="00:04:47.360" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I mean, I was using the table,""" start="00:04:51.180" video="qanda-solo" id="subtitle"]] +[[!template text="""the random table at a random entry kind of""" start="00:04:55.940" video="qanda-solo" id="subtitle"]] +[[!template text="""thing. I was using that at my table.""" start="00:04:58.460" video="qanda-solo" id="subtitle"]] +[[!template text="""So, I'm an eternal DM.""" start="00:05:00.780" video="qanda-solo" id="subtitle"]] +[[!template text="""So I would always use that.""" start="00:05:02.920" video="qanda-solo" id="subtitle"]] +[[!template text="""Like somebody says, what's the name of that""" start="00:05:05.020" video="qanda-solo" id="subtitle"]] +[[!template text="""shopkeep? And I could just hit a key,""" start="00:05:07.160" video="qanda-solo" id="subtitle"]] +[[!template text="""and it'd come up with the name,""" start="00:05:08.440" video="qanda-solo" id="subtitle"]] +[[!template text="""and I'd just read it off.""" start="00:05:10.120" video="qanda-solo" id="subtitle"]] +[[!template text="""But it was still me generating it.""" start="00:05:14.440" video="qanda-solo" id="subtitle"]] +[[!template text="""So it wasn't something that people would see""" start="00:05:17.120" video="qanda-solo" id="subtitle"]] +[[!template text="""necessarily, but I would keep notes in it and""" start="00:05:19.540" video="qanda-solo" id="subtitle"]] +[[!template text="""then publish those notes.""" start="00:05:20.520" video="qanda-solo" id="subtitle"]] +[[!template text="""But yes, I don't know.""" start="00:05:24.240" video="qanda-solo" id="subtitle"]] +[[!template text="""This sounds all kind of,""" start="00:05:25.440" video="qanda-solo" id="subtitle"]] +[[!template text="""this sounds all intriguing.""" start="00:05:27.260" video="qanda-solo" id="subtitle"]] +[[!template text="""I think this would be fun.""" start="00:05:28.840" video="qanda-solo" id="subtitle"]] +[[!template text="""I think I need to get a group of like-minded""" start="00:05:32.220" video="qanda-solo" id="subtitle"]] +[[!template text="""Emacs people who want to play online.""" start="00:05:35.880" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: I'm sure you've got plenty of people not only""" start="00:05:39.860" video="qanda-solo" id="subtitle"]] +[[!template text="""watching but also here in BBB.""" start="00:05:41.580" video="qanda-solo" id="subtitle"]] +[[!template text="""So we only have about 14 minutes until we go""" start="00:05:44.660" video="qanda-solo" id="subtitle"]] +[[!template text="""to the next talk and it might be a little""" start="00:05:46.120" video="qanda-solo" id="subtitle"]] +[[!template text="""short for a campaign, but we might just...""" start="00:05:48.200" video="qanda-solo" id="subtitle"]] +[[!template text="""Moving on to the next question,""" start="00:05:53.220" video="qanda-solo" id="subtitle"]] +[[!template text="""how does 1 become super awesome like Howard""" start="00:05:56.480" video="qanda-solo" id="subtitle"]] +[[!template text="""Abrams? And I very much agree.""" start="00:05:58.200" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Sure, yes. That's kind,""" start="00:05:58.700" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: That's not a secret, You're not giving your""" start="00:06:04.460" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: too kind, too kind. There's no trade secrets.""" start="00:06:09.360" video="qanda-solo" id="subtitle"]] +[[!template text="""Just follow your passions.""" start="00:06:10.580" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: trade secrets. I can only conquer.""" start="00:06:14.540" video="qanda-solo" id="subtitle"]] +[[!template text="""All right, moving on to the next question.""" start="00:06:16.160" video="qanda-solo" id="subtitle"]] +[[!template text="""Please talk a little about how you produced""" start="00:06:18.740" video="qanda-solo" id="subtitle"]] +[[!template text="""such a slick presentation video.""" start="00:06:20.460" video="qanda-solo" id="subtitle"]] +[[!template text="""Everything looked completely professional,""" start="00:06:22.800" video="qanda-solo" id="subtitle"]] +[[!template text="""and I'd agree. So tell us more.""" start="00:06:25.120" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: OK, so as you've seen my previous""" start="00:06:29.260" video="qanda-solo" id="subtitle"]] +[[!template text="""presentations, It's all just Emacs screen.""" start="00:06:32.680" video="qanda-solo" id="subtitle"]] +[[!template text="""I just felt like, oh, what I really want to""" start="00:06:35.920" video="qanda-solo" id="subtitle"]] +[[!template text="""talk about is how much fun I'm having and the""" start="00:06:39.360" video="qanda-solo" id="subtitle"]] +[[!template text="""little introduction. So my son actually is a""" start="00:06:43.680" video="qanda-solo" id="subtitle"]] +[[!template text="""YouTuber. So I asked him,""" start="00:06:44.980" video="qanda-solo" id="subtitle"]] +[[!template text="""and it's like, oh, I'll take care of your""" start="00:06:47.200" video="qanda-solo" id="subtitle"]] +[[!template text="""dad. And so he's the 1 that kind of prompted""" start="00:06:49.940" video="qanda-solo" id="subtitle"]] +[[!template text="""me. So I had a director.""" start="00:06:51.280" video="qanda-solo" id="subtitle"]] +[[!template text="""Don't know if that translates,""" start="00:06:53.720" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: I mean, that translates amazingly.""" start="00:06:58.940" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: though, but. Very good.""" start="00:07:02.560" video="qanda-solo" id="subtitle"]] +[[!template text="""You know, very over the top.""" start="00:07:06.900" video="qanda-solo" id="subtitle"]] +[[!template text="""I've never done something like this before.""" start="00:07:09.440" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: I mean, the results at the end is No,""" start="00:07:10.460" video="qanda-solo" id="subtitle"]] +[[!template text="""but it fits you so well.""" start="00:07:11.680" video="qanda-solo" id="subtitle"]] +[[!template text="""I think this over the top-ness combined with""" start="00:07:14.820" video="qanda-solo" id="subtitle"]] +[[!template text="""the editing, it just...""" start="00:07:15.800" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: I might have to keep doing it because it was""" start="00:07:18.900" video="qanda-solo" id="subtitle"]] +[[!template text="""fun. It was fun to do.""" start="00:07:20.600" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: You've set a standard that you'll need to""" start="00:07:23.160" video="qanda-solo" id="subtitle"]] +[[!template text="""meet for following Emax.""" start="00:07:24.520" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: I'll have to keep paying them then.""" start="00:07:28.360" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh no! Alright, Yes! Alright,""" start="00:07:30.820" video="qanda-solo" id="subtitle"]] +[[!template text="""moving on to the next question.""" start="00:07:32.360" video="qanda-solo" id="subtitle"]] +[[!template text="""Does table data, no sorry that's the 1 we did""" start="00:07:35.380" video="qanda-solo" id="subtitle"]] +[[!template text="""on recursion and we're not going to struggle""" start="00:07:37.360" video="qanda-solo" id="subtitle"]] +[[!template text="""through the reading of it again.""" start="00:07:38.900" video="qanda-solo" id="subtitle"]] +[[!template text="""Alright so with your toolkits,""" start="00:07:41.280" video="qanda-solo" id="subtitle"]] +[[!template text="""a list of good books would be nice to be""" start="00:07:43.940" video="qanda-solo" id="subtitle"]] +[[!template text="""included, example D&D,""" start="00:07:45.300" video="qanda-solo" id="subtitle"]] +[[!template text="""space, steampunk, cyberpunk settings.""" start="00:07:48.400" video="qanda-solo" id="subtitle"]] +[[!template text="""Do you have such a plan?""" start="00:07:49.800" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: 00I mean, I could definitely publish a""" start="00:07:56.120" video="qanda-solo" id="subtitle"]] +[[!template text="""bibliography of things I'm using and reading,""" start="00:07:59.640" video="qanda-solo" id="subtitle"]] +[[!template text="""But I don't know if I'd be writing anything.""" start="00:08:03.640" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh come on, don't tell yourself short.""" start="00:08:07.420" video="qanda-solo" id="subtitle"]] +[[!template text="""You've already proven you were amazing in""" start="00:08:09.000" video="qanda-solo" id="subtitle"]] +[[!template text="""very different, very varied topics.""" start="00:08:10.640" video="qanda-solo" id="subtitle"]] +[[!template text="""I'm sure you should give it 1 more try.""" start="00:08:12.840" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: I don't know. I've got a sabbatical coming""" start="00:08:15.460" video="qanda-solo" id="subtitle"]] +[[!template text="""up. I'm toying with writing something,""" start="00:08:17.580" video="qanda-solo" id="subtitle"]] +[[!template text="""but I don't know if it'd ever leave the Emacs""" start="00:08:19.860" video="qanda-solo" id="subtitle"]] +[[!template text="""buffer.""" start="00:08:20.440" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, I like this.""" start="00:08:23.680" video="qanda-solo" id="subtitle"]] +[[!template text="""Next question. Hi Howard and thanks for an""" start="00:08:28.140" video="qanda-solo" id="subtitle"]] +[[!template text="""outstanding presentation.""" start="00:08:28.860" video="qanda-solo" id="subtitle"]] +[[!template text="""What did you use to create the graphics in""" start="00:08:31.640" video="qanda-solo" id="subtitle"]] +[[!template text="""your presentation? Didn't we cover this 1""" start="00:08:34.280" video="qanda-solo" id="subtitle"]] +[[!template text="""already? I can't remember.""" start="00:08:35.059" video="qanda-solo" id="subtitle"]] +[[!template text="""No, that was""" start="00:08:35.740" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: a good 1. So the graphics actually were just""" start="00:08:41.980" video="qanda-solo" id="subtitle"]] +[[!template text="""kind of hacked together.""" start="00:08:43.179" video="qanda-solo" id="subtitle"]] +[[!template text="""But then I just gave them to my son.""" start="00:08:45.020" video="qanda-solo" id="subtitle"]] +[[!template text="""And it's like, can you put the graphic right""" start="00:08:47.200" video="qanda-solo" id="subtitle"]] +[[!template text="""here and he goes no problem there it is like""" start="00:08:50.140" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: okay great so 1 more 1 more reason to keep""" start="00:08:56.280" video="qanda-solo" id="subtitle"]] +[[!template text="""paying your son""" start="00:08:57.060" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: perfect yeah yeah exactly so if you can get""" start="00:08:59.820" video="qanda-solo" id="subtitle"]] +[[!template text="""get yourself a YouTuber who knows how to use""" start="00:09:02.760" video="qanda-solo" id="subtitle"]] +[[!template text="""all the tools. I think he was using DaVinci,""" start="00:09:05.800" video="qanda-solo" id="subtitle"]] +[[!template text="""but he's got quite a few going.""" start="00:09:08.860" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. Alright, moving on to the next""" start="00:09:12.700" video="qanda-solo" id="subtitle"]] +[[!template text="""question. Any plans to borrow tables from""" start="00:09:15.040" video="qanda-solo" id="subtitle"]] +[[!template text="""Dungeon World or Iron Sword Starforge and""" start="00:09:17.980" video="qanda-solo" id="subtitle"]] +[[!template text="""publish in a TK repository?""" start="00:09:20.460" video="qanda-solo" id="subtitle"]] +[[!template text="""Not sure what TK is.""" start="00:09:22.360" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, yeah, okay. So yeah,""" start="00:09:25.380" video="qanda-solo" id="subtitle"]] +[[!template text="""so that would be fun and I'd love that.""" start="00:09:30.320" video="qanda-solo" id="subtitle"]] +[[!template text="""And I was just reading a way to render PDFs""" start="00:09:33.840" video="qanda-solo" id="subtitle"]] +[[!template text="""that you might own into Markdown format.""" start="00:09:38.080" video="qanda-solo" id="subtitle"]] +[[!template text="""And if it's in Markdown,""" start="00:09:39.140" video="qanda-solo" id="subtitle"]] +[[!template text="""it'd be easy to pull into Org Mode.""" start="00:09:41.440" video="qanda-solo" id="subtitle"]] +[[!template text="""So all of the Iron Sworn,""" start="00:09:43.680" video="qanda-solo" id="subtitle"]] +[[!template text="""that role-playing game,""" start="00:09:45.280" video="qanda-solo" id="subtitle"]] +[[!template text="""Since it's all under the Creative License,""" start="00:09:48.780" video="qanda-solo" id="subtitle"]] +[[!template text="""I think even the Star Forge is.""" start="00:09:51.380" video="qanda-solo" id="subtitle"]] +[[!template text="""So I think I could grab the Star Forge 1.""" start="00:09:53.940" video="qanda-solo" id="subtitle"]] +[[!template text="""I don't know about Dungeon World and their""" start="00:09:56.820" video="qanda-solo" id="subtitle"]] +[[!template text="""tables. But yeah, a lot of people are""" start="00:09:59.220" video="qanda-solo" id="subtitle"]] +[[!template text="""starting to publish those kind of tables.""" start="00:10:01.060" video="qanda-solo" id="subtitle"]] +[[!template text="""So yeah, that'd be fun.""" start="00:10:03.760" video="qanda-solo" id="subtitle"]] +[[!template text="""I'd like to render all those in text files""" start="00:10:07.160" video="qanda-solo" id="subtitle"]] +[[!template text="""that I could pull up like that.""" start="00:10:08.560" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Lovely. I think that's all for the questions""" start="00:10:13.180" video="qanda-solo" id="subtitle"]] +[[!template text="""we had in the pad. We still have 9 minutes.""" start="00:10:15.820" video="qanda-solo" id="subtitle"]] +[[!template text="""I see plenty of people have joined us,""" start="00:10:18.280" video="qanda-solo" id="subtitle"]] +[[!template text="""including 1 person with a microphone on BBB.""" start="00:10:21.060" video="qanda-solo" id="subtitle"]] +[[!template text="""PlasmaStrike, do you have a question?""" start="00:10:23.160" video="qanda-solo" id="subtitle"]] +[[!template text="""And would you like to unmute yourself and ask""" start="00:10:24.920" video="qanda-solo" id="subtitle"]] +[[!template text="""it? I'm also going to check the chat.""" start="00:10:28.440" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, yeah. StarsWithoutNumber is another great""" start="00:10:31.640" video="qanda-solo" id="subtitle"]] +[[!template text="""1 that's got some great tables in it.""" start="00:10:33.640" video="qanda-solo" id="subtitle"]] +[[!template text="""Sorry, I'm just looking at the questions that""" start="00:10:37.720" video="qanda-solo" id="subtitle"]] +[[!template text="""are popping up here, too.""" start="00:10:38.940" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure. So I don't see anyone unmuting""" start="00:10:42.740" video="qanda-solo" id="subtitle"]] +[[!template text="""themselves. I see people typing away""" start="00:10:44.540" video="qanda-solo" id="subtitle"]] +[[!template text="""questions. By the way,""" start="00:10:45.220" video="qanda-solo" id="subtitle"]] +[[!template text="""if you're going to type questions,""" start="00:10:46.120" video="qanda-solo" id="subtitle"]] +[[!template text="""perhaps do not put them on BBB,""" start="00:10:48.240" video="qanda-solo" id="subtitle"]] +[[!template text="""put them in the pad. It's a little easier for""" start="00:10:50.460" video="qanda-solo" id="subtitle"]] +[[!template text="""us to archive them afterwards.""" start="00:10:52.380" video="qanda-solo" id="subtitle"]] +[[!template text="""I'm going to give a little bit of time.""" start="00:10:56.160" video="qanda-solo" id="subtitle"]] +[[!template text="""I feel bad about going on break when I have""" start="00:10:58.360" video="qanda-solo" id="subtitle"]] +[[!template text="""you available and ready to answer more""" start="00:11:00.940" video="qanda-solo" id="subtitle"]] +[[!template text="""questions. Oh, you're too kind.""" start="00:11:02.680" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: How have you, as this changed,""" start="00:11:07.360" video="qanda-solo" id="subtitle"]] +[[!template text="""how's your visualization of the books,""" start="00:11:09.520" video="qanda-solo" id="subtitle"]] +[[!template text="""or of your games at all?""" start="00:11:11.260" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Sorry, can you ask that 1 more time?""" start="00:11:15.180" video="qanda-solo" id="subtitle"]] +[[!template text="""I didn't catch the first part.""" start="00:11:16.700" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: How has this impacted,""" start="00:11:20.140" video="qanda-solo" id="subtitle"]] +[[!template text="""like, your imagination on the scenes and""" start="00:11:23.080" video="qanda-solo" id="subtitle"]] +[[!template text="""stuff like that because it's partly open and""" start="00:11:28.240" video="qanda-solo" id="subtitle"]] +[[!template text="""closed because you had that chart where you""" start="00:11:30.720" video="qanda-solo" id="subtitle"]] +[[!template text="""had that where you put it in the center of""" start="00:11:32.880" video="qanda-solo" id="subtitle"]] +[[!template text="""constrained by algorithms to enhance your""" start="00:11:37.240" video="qanda-solo" id="subtitle"]] +[[!template text="""creativity, you write it but it's not all""" start="00:11:39.780" video="qanda-solo" id="subtitle"]] +[[!template text="""freeform to where you have writer's block as""" start="00:11:42.700" video="qanda-solo" id="subtitle"]] +[[!template text="""much.""" start="00:11:42.900" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: You hit the, You hit it on the head.""" start="00:11:46.800" video="qanda-solo" id="subtitle"]] +[[!template text="""That's exactly it. That's why I've been doing""" start="00:11:49.640" video="qanda-solo" id="subtitle"]] +[[!template text="""this. Creativity is a hard thing to foster.""" start="00:11:53.940" video="qanda-solo" id="subtitle"]] +[[!template text="""And having little prompts that you have to""" start="00:11:57.520" video="qanda-solo" id="subtitle"]] +[[!template text="""kind of work together,""" start="00:11:58.340" video="qanda-solo" id="subtitle"]] +[[!template text="""like twisty language, what does that mean?""" start="00:12:03.660" video="qanda-solo" id="subtitle"]] +[[!template text="""Oh, you have to kind of work with that.""" start="00:12:06.560" video="qanda-solo" id="subtitle"]] +[[!template text="""So yeah, that's 1 of the reasons why I got""" start="00:12:08.800" video="qanda-solo" id="subtitle"]] +[[!template text="""into doing the solo version of it,""" start="00:12:11.800" video="qanda-solo" id="subtitle"]] +[[!template text="""just because you kind of,""" start="00:12:14.120" video="qanda-solo" id="subtitle"]] +[[!template text="""it does really foster the creativity.""" start="00:12:15.980" video="qanda-solo" id="subtitle"]] +[[!template text="""Did that answer the question?""" start="00:12:23.540" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah well has it kind of has it improved over""" start="00:12:28.520" video="qanda-solo" id="subtitle"]] +[[!template text="""time though of using it like""" start="00:12:30.060" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: oh yeah oh yeah I would definitely say so""" start="00:12:33.200" video="qanda-solo" id="subtitle"]] +[[!template text="""While I'm still not ready to publish my files""" start="00:12:36.420" video="qanda-solo" id="subtitle"]] +[[!template text="""at all, but the first ones were much worse.""" start="00:12:40.240" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: That was an example like after you play for""" start="00:12:46.160" video="qanda-solo" id="subtitle"]] +[[!template text="""like 2 months or something like that,""" start="00:12:47.800" video="qanda-solo" id="subtitle"]] +[[!template text="""like, could you close your eyes and see the""" start="00:12:50.320" video="qanda-solo" id="subtitle"]] +[[!template text="""rooms a lot better versus...""" start="00:12:51.420" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think so. I think so.""" start="00:12:54.720" video="qanda-solo" id="subtitle"]] +[[!template text="""And, you know, there's 1 solo game called A""" start="00:13:02.150" video="qanda-solo" id="subtitle"]] +[[!template text="""Thousand-Year-Old Vampire.""" start="00:13:03.340" video="qanda-solo" id="subtitle"]] +[[!template text="""I don't know if you've seen that 1 or not,""" start="00:13:05.740" video="qanda-solo" id="subtitle"]] +[[!template text="""but it's quite creative.""" start="00:13:08.440" video="qanda-solo" id="subtitle"]] +[[!template text="""It's very interesting.""" start="00:13:09.720" video="qanda-solo" id="subtitle"]] +[[!template text="""It's got a great setup to use.""" start="00:13:13.180" video="qanda-solo" id="subtitle"]] +[[!template text="""And When I was looking through it,""" start="00:13:17.200" video="qanda-solo" id="subtitle"]] +[[!template text="""it's like, I'm thinking of a typical vampire""" start="00:13:19.320" video="qanda-solo" id="subtitle"]] +[[!template text="""and this sort of thing.""" start="00:13:20.720" video="qanda-solo" id="subtitle"]] +[[!template text="""But then there's this YouTuber named Seth""" start="00:13:25.760" video="qanda-solo" id="subtitle"]] +[[!template text="""Skalkarski, if I can pronounce his name""" start="00:13:27.880" video="qanda-solo" id="subtitle"]] +[[!template text="""right. He was describing it.""" start="00:13:30.020" video="qanda-solo" id="subtitle"]] +[[!template text="""And he came up with a completely different""" start="00:13:32.040" video="qanda-solo" id="subtitle"]] +[[!template text="""vampire scene. And it's like,""" start="00:13:34.540" video="qanda-solo" id="subtitle"]] +[[!template text="""oh, I could see how people can kind of start""" start="00:13:37.560" video="qanda-solo" id="subtitle"]] +[[!template text="""working on these things and really see things""" start="00:13:40.600" video="qanda-solo" id="subtitle"]] +[[!template text="""differently. And the creativity and all that""" start="00:13:43.080" video="qanda-solo" id="subtitle"]] +[[!template text="""sort of stuff just really blossoms.""" start="00:13:44.340" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: And then I guess as an extension of that,""" start="00:13:48.040" video="qanda-solo" id="subtitle"]] +[[!template text="""how has the stories changed after using this""" start="00:13:53.680" video="qanda-solo" id="subtitle"]] +[[!template text="""toolkit or the solo games for 2 months?""" start="00:13:58.140" video="qanda-solo" id="subtitle"]] +[[!template text="""Like the scenes, like how you,""" start="00:14:00.200" video="qanda-solo" id="subtitle"]] +[[!template text="""like the stories that you'd start generating?""" start="00:14:02.440" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, yeah, yeah. Yeah,""" start="00:14:05.980" video="qanda-solo" id="subtitle"]] +[[!template text="""I mean, a lot depends on just how much you're""" start="00:14:09.000" video="qanda-solo" id="subtitle"]] +[[!template text="""willing to put into it.""" start="00:14:10.140" video="qanda-solo" id="subtitle"]] +[[!template text="""But yeah, I've definitely had a lot of fun.""" start="00:14:13.980" video="qanda-solo" id="subtitle"]] +[[!template text="""And it's just been a lot more enjoyable and""" start="00:14:16.360" video="qanda-solo" id="subtitle"]] +[[!template text="""just more interesting.""" start="00:14:17.680" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: Well I mean like has the types and quality of""" start="00:14:21.960" video="qanda-solo" id="subtitle"]] +[[!template text="""the stories changed a lot?""" start="00:14:23.940" video="qanda-solo" id="subtitle"]] +[[!template text="""Or more than that?""" start="00:14:25.240" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: I think so, you know, but obviously the proof""" start="00:14:30.280" video="qanda-solo" id="subtitle"]] +[[!template text="""is if somebody else is doing the evaluation""" start="00:14:34.000" video="qanda-solo" id="subtitle"]] +[[!template text="""and I'm not letting that out But I think so,""" start="00:14:39.060" video="qanda-solo" id="subtitle"]] +[[!template text="""but I think so so but I think your mileage""" start="00:14:42.040" video="qanda-solo" id="subtitle"]] +[[!template text="""may vary. So yeah, try it out""" start="00:14:44.340" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: Have you seen the game Dwarf Fortress?""" start="00:14:47.360" video="qanda-solo" id="subtitle"]] +[[!template text="""Because it's supposed to be a video game""" start="00:14:50.880" video="qanda-solo" id="subtitle"]] +[[!template text="""that's in a similar spirit to that,""" start="00:14:53.040" video="qanda-solo" id="subtitle"]] +[[!template text="""where it helps you generate stories.""" start="00:14:55.080" video="qanda-solo" id="subtitle"]] +[[!template text="""Dwarf Fortress, RimWorld,""" start="00:14:56.820" video="qanda-solo" id="subtitle"]] +[[!template text="""Kenshi is another 1.""" start="00:15:00.420" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, no, I've looked at the Dwarf Fortress,""" start="00:15:03.400" video="qanda-solo" id="subtitle"]] +[[!template text="""but I haven't played it.""" start="00:15:04.640" video="qanda-solo" id="subtitle"]] +[[!template text="""But that 1 seems a little bit more""" start="00:15:08.160" video="qanda-solo" id="subtitle"]] +[[!template text="""structured, but still could be a lot of fun""" start="00:15:10.640" video="qanda-solo" id="subtitle"]] +[[!template text="""too. And then others, it's like,""" start="00:15:13.700" video="qanda-solo" id="subtitle"]] +[[!template text="""how far do you want to take it?""" start="00:15:15.240" video="qanda-solo" id="subtitle"]] +[[!template text="""Like I just picked up this 1 called Broken""" start="00:15:18.280" video="qanda-solo" id="subtitle"]] +[[!template text="""Cask. There it is, where you generate a""" start="00:15:21.820" video="qanda-solo" id="subtitle"]] +[[!template text="""little bar tavern, and then you start rolling""" start="00:15:25.240" video="qanda-solo" id="subtitle"]] +[[!template text="""events. Now, it gives a lot more stuff coming""" start="00:15:29.180" video="qanda-solo" id="subtitle"]] +[[!template text="""out of it. It's like, oh,""" start="00:15:30.780" video="qanda-solo" id="subtitle"]] +[[!template text="""this person's showing up and this is what's""" start="00:15:32.700" video="qanda-solo" id="subtitle"]] +[[!template text="""happening, but you can elaborate on it as""" start="00:15:34.700" video="qanda-solo" id="subtitle"]] +[[!template text="""much as you want. And that's what I'm""" start="00:15:36.660" video="qanda-solo" id="subtitle"]] +[[!template text="""thinking I might do. Hi,""" start="00:15:39.600" video="qanda-solo" id="subtitle"]] +[[!template text="""Mike, you got a question?""" start="00:15:40.600" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 3]: Hi, Howard. Yeah, I do have a question.""" start="00:15:47.680" video="qanda-solo" id="subtitle"]] +[[!template text="""I'm a big fan of your work on literate DevOps""" start="00:15:50.940" video="qanda-solo" id="subtitle"]] +[[!template text="""and your essay and video on that topic.""" start="00:15:53.120" video="qanda-solo" id="subtitle"]] +[[!template text="""I'm just wondering if you still use that""" start="00:15:56.040" video="qanda-solo" id="subtitle"]] +[[!template text="""workflow at work and have you changed how""" start="00:15:59.640" video="qanda-solo" id="subtitle"]] +[[!template text="""that process works or has it evolved over""" start="00:16:02.160" video="qanda-solo" id="subtitle"]] +[[!template text="""time since that video and essay were written?""" start="00:16:04.720" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: That's a good question.""" start="00:16:06.840" video="qanda-solo" id="subtitle"]] +[[!template text="""Yes, I still do it. It varies depending on""" start="00:16:12.440" video="qanda-solo" id="subtitle"]] +[[!template text="""the project and whatnot.""" start="00:16:13.500" video="qanda-solo" id="subtitle"]] +[[!template text="""But I still am using it.""" start="00:16:16.400" video="qanda-solo" id="subtitle"]] +[[!template text="""Yeah, yeah. In fact, I'm doing it with a lot""" start="00:16:20.280" video="qanda-solo" id="subtitle"]] +[[!template text="""of other things. Like all my configuration""" start="00:16:22.760" video="qanda-solo" id="subtitle"]] +[[!template text="""files are all in a literate style for Emacs.""" start="00:16:27.660" video="qanda-solo" id="subtitle"]] +[[!template text="""And even all the code that's in Ironsworn,""" start="00:16:31.160" video="qanda-solo" id="subtitle"]] +[[!template text="""the repo, if you go to the repo,""" start="00:16:35.060" video="qanda-solo" id="subtitle"]] +[[!template text="""it's the readme file. And yeah,""" start="00:16:37.440" video="qanda-solo" id="subtitle"]] +[[!template text="""that's just being rendered out to the Emacs""" start="00:16:39.720" video="qanda-solo" id="subtitle"]] +[[!template text="""file. So it is still all literate.""" start="00:16:41.660" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 3]: Very cool.""" start="00:16:43.440" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, because I don't know.""" start="00:16:46.500" video="qanda-solo" id="subtitle"]] +[[!template text="""Some things are just a little too complicated""" start="00:16:48.120" video="qanda-solo" id="subtitle"]] +[[!template text="""to just type up.""" start="00:16:49.320" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: All right, sorry to be the bearer of bad""" start="00:16:56.040" video="qanda-solo" id="subtitle"]] +[[!template text="""news, but we have only about 3 more minutes""" start="00:16:58.220" video="qanda-solo" id="subtitle"]] +[[!template text="""of lifetime. By the way,""" start="00:16:59.840" video="qanda-solo" id="subtitle"]] +[[!template text="""feel free to stay and discuss any of the""" start="00:17:02.920" video="qanda-solo" id="subtitle"]] +[[!template text="""topic of today's session after we go off air""" start="00:17:07.540" video="qanda-solo" id="subtitle"]] +[[!template text="""and we'll be able to keep all of the nice""" start="00:17:10.579" video="qanda-solo" id="subtitle"]] +[[!template text="""discussion and put them on the talks page""" start="00:17:12.260" video="qanda-solo" id="subtitle"]] +[[!template text="""afterwards. Great. Howard,""" start="00:17:16.560" video="qanda-solo" id="subtitle"]] +[[!template text="""I would like to ask you if you have any last""" start="00:17:20.020" video="qanda-solo" id="subtitle"]] +[[!template text="""words regarding the presentation or the""" start="00:17:21.760" video="qanda-solo" id="subtitle"]] +[[!template text="""questions you've had. Well,""" start="00:17:23.040" video="qanda-solo" id="subtitle"]] +[[!template text="""the last question we had,""" start="00:17:24.520" video="qanda-solo" id="subtitle"]] +[[!template text="""actually, we had Mike come and ask it live.""" start="00:17:27.500" video="qanda-solo" id="subtitle"]] +[[!template text="""But do you have any parting words before we""" start="00:17:29.440" video="qanda-solo" id="subtitle"]] +[[!template text="""leave you? Okay.""" start="00:17:31.720" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: I think the last thing is go and hack""" start="00:17:37.560" video="qanda-solo" id="subtitle"]] +[[!template text="""something. I mean, this Lisp stuff is a lot""" start="00:17:41.420" video="qanda-solo" id="subtitle"]] +[[!template text="""of fun. And I hope that came across.""" start="00:17:43.860" video="qanda-solo" id="subtitle"]] +[[!template text="""It's like, the project I made is just a""" start="00:17:47.240" video="qanda-solo" id="subtitle"]] +[[!template text="""personal thing and it was fun for me to make,""" start="00:17:50.220" video="qanda-solo" id="subtitle"]] +[[!template text="""but everybody's probably got some fun thing""" start="00:17:53.100" video="qanda-solo" id="subtitle"]] +[[!template text="""they could make as well.""" start="00:17:54.320" video="qanda-solo" id="subtitle"]] +[[!template text="""And just, I don't know,""" start="00:17:56.200" video="qanda-solo" id="subtitle"]] +[[!template text="""hack it yourself because all the,""" start="00:17:58.460" video="qanda-solo" id="subtitle"]] +[[!template text="""you know, think about adding multi-threading""" start="00:18:01.920" video="qanda-solo" id="subtitle"]] +[[!template text="""to Emacs. Maybe we don't want that,""" start="00:18:04.480" video="qanda-solo" id="subtitle"]] +[[!template text="""because that'll just complicate things.""" start="00:18:06.000" video="qanda-solo" id="subtitle"]] +[[!template text="""This is your own personal hacking sandbox,""" start="00:18:08.200" video="qanda-solo" id="subtitle"]] +[[!template text="""so go have fun.""" start="00:18:09.520" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Great. I was just going to say we were""" start="00:18:14.220" video="qanda-solo" id="subtitle"]] +[[!template text="""talking about Dwarf Fortress.""" start="00:18:15.060" video="qanda-solo" id="subtitle"]] +[[!template text="""In Dwarf Fortress, it's a very CPU intensive""" start="00:18:18.680" video="qanda-solo" id="subtitle"]] +[[!template text="""game because it needs to compute every single""" start="00:18:21.020" video="qanda-solo" id="subtitle"]] +[[!template text="""thing in the world and there's such a thing""" start="00:18:23.480" video="qanda-solo" id="subtitle"]] +[[!template text="""as the CPU death of the world where basically""" start="00:18:27.700" video="qanda-solo" id="subtitle"]] +[[!template text="""you've got too many cats that are just""" start="00:18:29.340" video="qanda-solo" id="subtitle"]] +[[!template text="""breeding constantly with 1 another and it""" start="00:18:31.320" video="qanda-solo" id="subtitle"]] +[[!template text="""creates so many entities that it just""" start="00:18:33.760" video="qanda-solo" id="subtitle"]] +[[!template text="""crashes, and the time it takes for the day to""" start="00:18:36.760" video="qanda-solo" id="subtitle"]] +[[!template text="""finish it, it just never finish.""" start="00:18:38.440" video="qanda-solo" id="subtitle"]] +[[!template text="""So I was going to say maybe multi-threading""" start="00:18:40.680" video="qanda-solo" id="subtitle"]] +[[!template text="""might be useful in this case for Emacs.""" start="00:18:43.180" video="qanda-solo" id="subtitle"]] +[[!template text="""So, wanting to foray into the future.""" start="00:18:46.100" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 1]: All right. Thank you.""" start="00:18:48.800" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: And thank you so much,""" start="00:18:50.900" video="qanda-solo" id="subtitle"]] +[[!template text="""Howard, and thank you Plasma Strike for your""" start="00:18:52.360" video="qanda-solo" id="subtitle"]] +[[!template text="""question, as well as Mike,""" start="00:18:53.320" video="qanda-solo" id="subtitle"]] +[[!template text="""who joined us. We're going to go live with""" start="00:18:55.760" video="qanda-solo" id="subtitle"]] +[[!template text="""the next talk in about 1 minute,""" start="00:18:57.440" video="qanda-solo" id="subtitle"]] +[[!template text="""and until then, well, I'm not going to put""" start="00:19:00.400" video="qanda-solo" id="subtitle"]] +[[!template text="""music, You can wait 50 seconds without music,""" start="00:19:02.040" video="qanda-solo" id="subtitle"]] +[[!template text="""you Zoomers. We'll be back in a bit.""" start="00:19:03.960" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 2]: Bye-bye.""" start="00:19:05.280" video="qanda-solo" id="subtitle"]] +[[!template text="""[Speaker 0]: Bye, Howard. All right,""" start="00:19:09.620" video="qanda-solo" id="subtitle"]] +[[!template text="""we are off. Thank you so much,""" start="00:19:11.120" video="qanda-solo" id="subtitle"]] +[[!template text="""Howard. I need to dash.""" start="00:19:11.980" video="qanda-solo" id="subtitle"]] +[[!template text="""And oh, I think he's already gone.""" start="00:19:13.940" video="qanda-solo" id="subtitle"]] +[[!template text="""So Bye everyone, I'll see you later.""" start="00:19:16.360" video="qanda-solo" id="subtitle"]] + +Questions or comments? Please e-mail [howard@howardabrams.com](mailto:howard@howardabrams.com?subject=Comment%20for%20EmacsConf%202023%20solo%3A%20How%20I%20play%20TTRPGs%20in%20Emacs) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/solo-before.md b/2023/info/solo-before.md new file mode 100644 index 00000000..4151f8a3 --- /dev/null +++ b/2023/info/solo-before.md @@ -0,0 +1,33 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 15-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="solo-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="solo-mainVideo" data=""" +00:00.000 Introduction +01:20.680 Solo RPGs +02:47.440 Demo +04:11.760 Randomization +05:31.960 Moves +06:03.640 Reference +06:34.680 Story arcs +07:48.680 Using different stats +09:02.960 Dice rolls +09:34.800 Dangers +10:19.680 A strong success +11:49.680 Other solo RPGs +13:04.720 Conclusion + +"""]]<div></div>Duration: 14:36 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/oNkcCHdWCKXRv6KnUTAeEC">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="solo-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="solo-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus"></audio></div><div></div>Duration: 19:20 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/solo-nav.md b/2023/info/solo-nav.md new file mode 100644 index 00000000..741f4f35 --- /dev/null +++ b/2023/info/solo-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a> +Next by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/steno-after.md b/2023/info/steno-after.md new file mode 100644 index 00000000..486a8207 --- /dev/null +++ b/2023/info/steno-after.md @@ -0,0 +1,359 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="steno-mainVideo-transcript"></a> +# Transcript + +[[!template text="""Stenotypy is a system of typing""" start="00:00:00.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""where you press multiple keys at the same time,""" start="00:00:03.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""letting you send more than one letter at a time.""" start="00:00:07.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This is a video from the 1920s.""" start="00:00:13.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The man is holding a stenotype, a device used for stenotypy.""" start="00:00:16.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This particular one is called Grandjean.""" start="00:00:23.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's made for the French language.""" start="00:00:26.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In this demonstration,""" start="00:00:30.068" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the man is going to be dictating a passage,""" start="00:00:31.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""first, slowly and then quickly.""" start="00:00:34.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The lady on the left doesn't have trouble keeping up.""" start="00:00:38.760" video="mainVideo-steno" id="subtitle"]] +[[!template text="""She's using stenotypy.""" start="00:00:42.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The lady on the right is a good typist,""" start="00:00:44.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but she can't keep up when the dictation gets faster.""" start="00:00:48.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I'm nowhere near as fast as this lady.""" start="00:01:13.300" video="mainVideo-steno" id="subtitle"]] +[[!template text="""She's extremely skilled.""" start="00:01:16.020" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I'm not even a tenth of what she is.""" start="00:01:18.780" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I don't use Grandjean, I use Melani,""" start="00:01:24.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which is a system for Castilian and Italian.""" start="00:01:28.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I want to make the word solo, I press S, O, L,""" start="00:01:33.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which is made by two keys, and O.""" start="00:01:39.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here's what that looks like.""" start="00:01:43.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The hyphen between S and O means that""" start="00:01:45.600" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the S is on the left side,""" start="00:01:50.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and the rest of the letters are on the right side.""" start="00:01:52.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I want to write the word sólo,""" start="00:01:57.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which is just like the previous word,""" start="00:02:00.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but with the first O accented,""" start="00:02:02.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I would press the asterisk key.""" start="00:02:05.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In Melani, the asterisk is used""" start="00:02:08.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to put an accent on a letter.""" start="00:02:11.960" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If you speak English,""" start="00:02:20.300" video="mainVideo-steno" id="subtitle"]] +[[!template text="""then you would likely use the Ireland system.""" start="00:02:22.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""S-E-T makes the word set.""" start="00:02:25.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In Ireland, you can make a long vowel sound""" start="00:02:28.780" video="mainVideo-steno" id="subtitle"]] +[[!template text="""by pressing the two thumb keys""" start="00:02:32.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""on the other side of the vowel you want to make long.""" start="00:02:34.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""S-long-E-T makes the word seat.""" start="00:02:41.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This is me programming.""" start="00:02:50.200" video="mainVideo-steno" id="subtitle"]] +[[!template text="""After a few lines, I'll explain what's going on.""" start="00:02:52.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In GNU Emacs, you can create abbreviations""" start="00:03:19.580" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that expand to strings.""" start="00:03:23.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""For example, you can create an abbrev, like btwx,""" start="00:03:25.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that will expand to "by the way"""" start="00:03:31.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""when you succeed btwx with a space or some punctuation.""" start="00:03:33.980" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here that's what I'm doing.""" start="00:03:40.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I type d and then emacs, which expands to this.""" start="00:03:42.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""But this is a different kind of expansion""" start="00:03:48.140" video="mainVideo-steno" id="subtitle"]] +[[!template text="""from a simple string like by the way.""" start="00:03:50.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This one has structure.""" start="00:03:54.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It has interesting points that I can jump to.""" start="00:03:56.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's called a skeleton.""" start="00:04:00.680" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This is the skeleton.""" start="00:04:03.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The part that I want you to focus on is the @ symbols.""" start="00:04:05.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Those are the interesting points that I jump to.""" start="00:04:10.560" video="mainVideo-steno" id="subtitle"]] +[[!template text="""So, at one interesting point,""" start="00:04:15.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I can write the name of the function,""" start="00:04:18.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""at another interesting point, the arguments""" start="00:04:20.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""if the function will need them, the doc string,""" start="00:04:24.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and finally the body.""" start="00:04:28.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I get to the body, I use stenotypy""" start="00:04:31.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to write the words of the functions I'm looking for.""" start="00:04:34.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Then I call a completion framework""" start="00:04:39.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to choose from a list of candidates.""" start="00:04:41.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This completion framework doesn't care""" start="00:04:45.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""what order the words are in or how many words I use.""" start="00:04:47.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This completion framework is called Corfu,""" start="00:04:52.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which stands for COmpletion in Region FUnction.""" start="00:04:56.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And I'm using a package called Orderless""" start="00:05:00.460" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to make it stronger.""" start="00:05:03.280" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here, I use another skeleton, the same one as before.""" start="00:05:51.460" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This time, it has an argument.""" start="00:05:57.200" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Then, when I get to the body, I write another skeleton,""" start="00:06:00.880" video="mainVideo-steno" id="subtitle"]] +[[!template text="""one that has an interesting point between the quotes""" start="00:06:07.240" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and creates a new line""" start="00:06:12.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""right underneath it.""" start="00:06:14.920" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I typed i and then emacs,""" start="00:06:17.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and I got the interactive skeleton.""" start="00:06:20.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Now, I use another skeleton,""" start="00:07:16.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but these ones differ""" start="00:07:18.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""because it prompts me for a string,""" start="00:07:20.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and I can make the skeleton as long as I want.""" start="00:07:23.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I keep entering text in the prompt,""" start="00:07:27.300" video="mainVideo-steno" id="subtitle"]] +[[!template text="""then Emacs will keep making the skeleton bigger.""" start="00:07:29.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I enter an empty string, it knows to stop asking,""" start="00:07:33.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and it sends me to the point""" start="00:07:38.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I've designated to go to when a skeleton is created.""" start="00:07:40.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""That's what the underscore means.""" start="00:07:44.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I type c and then Emacs, and I get the condition skeleton.""" start="00:07:48.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And then I use Corfu and Orderless to program.""" start="00:07:54.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""On two functions, I use a dabbrev.""" start="00:08:00.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""A dabbrev is a dynamic abbreviation.""" start="00:08:03.820" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here's how it works.""" start="00:08:09.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I have three strings""" start="00:08:11.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that begin with S-T, string, strawberry, and stop,""" start="00:08:12.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I can write S-T and then call dabbrev expand.""" start="00:08:17.820" video="mainVideo-steno" id="subtitle"]] +[[!template text="""First, this will give me stop""" start="00:08:22.180" video="mainVideo-steno" id="subtitle"]] +[[!template text="""because I'm nearest to the word stop.""" start="00:08:24.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Then when I call it again, I'll get strawberry.""" start="00:08:27.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And if I call it a third time, I'll get string.""" start="00:08:30.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I start off with S-T-R, then I'll get strawberry first""" start="00:08:35.460" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and then string.""" start="00:08:40.140" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I used dabbrev twice in this function.""" start="00:08:42.280" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If you read the top of the screen,""" start="00:08:46.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""you can see which commands I use and how I invoke them.""" start="00:08:48.080" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Finally, I use one last skeleton""" start="00:09:00.240" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to map the function I just wrote to a hotkey.""" start="00:09:03.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In this case, C-o.""" start="00:09:07.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here we can see what the function I just wrote does.""" start="00:09:15.580" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It opens a line with the line below indented""" start="00:09:19.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""if it isn't blank.""" start="00:09:22.240" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I've kept the old behavior with an argument of zero""" start="00:09:23.801" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and done something for when I use a negative argument.""" start="00:09:29.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""You can see the interesting points.""" start="00:09:33.600" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I could jump to any of them or cycle through them.""" start="00:09:36.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I normally use a 9-to-16 setup.""" start="00:09:50.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""To me, Emacs, and computing in general,""" start="00:09:54.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""is much more pleasant to use that way.""" start="00:09:58.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I stenotype a word,""" start="00:10:07.680" video="mainVideo-steno" id="subtitle"]] +[[!template text="""a space is sent immediately afterwards.""" start="00:10:10.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Orderless treats spaces as delimiters.""" start="00:10:14.180" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This is very helpful""" start="00:10:17.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""because I can enter commands with stenotypy,""" start="00:10:19.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""without having to worry about""" start="00:10:23.460" video="mainVideo-steno" id="subtitle"]] +[[!template text="""whether words are in the right order.""" start="00:10:25.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Lem, spelled L-E-M, is another Emacs.""" start="00:10:29.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's extremely powerful.""" start="00:10:34.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""But Lem doesn't have skeletons, not yet at least.""" start="00:10:35.901" video="mainVideo-steno" id="subtitle"]] +[[!template text="""So I'm going to program the traditional way.""" start="00:10:40.061" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Nothing fancy, just left-to-right programming.""" start="00:10:43.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""With Plover, you have dictionaries.""" start="00:11:38.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I added Fibonacci to my dictionary.""" start="00:11:41.521" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I made my own dictionary from scratch.""" start="00:11:44.861" video="mainVideo-steno" id="subtitle"]] +[[!template text="""But if you don't want to do that,""" start="00:11:47.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""there are free dictionaries available""" start="00:11:49.781" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that have many words already in them,""" start="00:11:52.261" video="mainVideo-steno" id="subtitle"]] +[[!template text="""saving you lots of time.""" start="00:11:55.121" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The reason I made my dictionary from scratch""" start="00:11:56.721" video="mainVideo-steno" id="subtitle"]] +[[!template text="""is because I wanted to know my system inside and out.""" start="00:12:00.280" video="mainVideo-steno" id="subtitle"]] +[[!template text="""On one stroke, I typed T.""" start="00:12:03.560" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And, on the next stroke, I stenotyped coalton.""" start="00:12:07.961" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And then I got (coalton-toplevel and a new line.""" start="00:12:12.741" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's similar to what I did in GNU Emacs""" start="00:12:16.461" video="mainVideo-steno" id="subtitle"]] +[[!template text="""when I expanded a skeleton.""" start="00:12:19.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This is actually not stenotypy,""" start="00:12:22.580" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but a different kind of steno, known as serial steno.""" start="00:12:25.180" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Plover is capable of this as well.""" start="00:12:29.821" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here are some things that Plover can do.""" start="00:12:32.941" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Plover can glue words,""" start="00:12:36.841" video="mainVideo-steno" id="subtitle"]] +[[!template text="""like if you need to make a compound word.""" start="00:12:38.921" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It can break a compound word.""" start="00:12:41.461" video="mainVideo-steno" id="subtitle"]] +[[!template text="""You can press keys to turn off Plover""" start="00:12:44.361" video="mainVideo-steno" id="subtitle"]] +[[!template text="""or to turn it back on.""" start="00:12:48.061" video="mainVideo-steno" id="subtitle"]] +[[!template text="""You can case words the way you want,""" start="00:12:50.121" video="mainVideo-steno" id="subtitle"]] +[[!template text="""uppercase, lowercase, capitalize.""" start="00:12:52.721" video="mainVideo-steno" id="subtitle"]] +[[!template text="""You can change your stenotype layout,""" start="00:12:55.761" video="mainVideo-steno" id="subtitle"]] +[[!template text="""like, say, if you want to use Grandjean for French,""" start="00:12:58.821" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Melani for Castilian, and Ireland for English.""" start="00:13:02.381" video="mainVideo-steno" id="subtitle"]] +[[!template text="""All of that's possible.""" start="00:13:06.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here I should note that I'm using a Plover plugin""" start="00:13:10.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""called Full Keyboard Steno.""" start="00:13:14.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It makes my entire keyboard into a stenotype.""" start="00:13:17.521" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Lem also has a completion feature built in.""" start="00:13:26.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""But I didn't need it for the code that I wrote.""" start="00:13:30.701" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's quite good.""" start="00:13:35.101" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In summary, if you add in the symbols""" start="00:13:38.720" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that you're going to need when you're programming,""" start="00:13:42.281" video="mainVideo-steno" id="subtitle"]] +[[!template text="""you'll be fine.""" start="00:13:45.121" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Even without skeletons,""" start="00:13:46.441" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Plover is nice to use for programming.""" start="00:13:48.621" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The search tool is the primary way of navigating in Emacs.""" start="00:14:00.920" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Every Emacser can be measured""" start="00:14:05.621" video="mainVideo-steno" id="subtitle"]] +[[!template text="""by their skill with the search tool.""" start="00:14:08.041" video="mainVideo-steno" id="subtitle"]] +[[!template text="""C-s begins a forward search.""" start="00:14:11.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The s stands for search.""" start="00:14:14.821" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I'm reading Aesop's Fables,""" start="00:14:18.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and I want to look for the word fox.""" start="00:14:20.741" video="mainVideo-steno" id="subtitle"]] +[[!template text="""So I press C-s and type fox.""" start="00:14:23.641" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I want to go back to the beginning of the word fox,""" start="00:14:28.201" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I press C-r, which stands for reverse search.""" start="00:14:31.600" video="mainVideo-steno" id="subtitle"]] +[[!template text="""With Stenotypy, spaces are added to the end of words,""" start="00:14:37.501" video="mainVideo-steno" id="subtitle"]] +[[!template text="""so sometimes that causes problems.""" start="00:14:42.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""We can remedy that by changing the way""" start="00:14:49.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Emacs interprets our whitespace.""" start="00:14:52.121" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I press C-M-s [alt control s],""" start="00:14:55.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""whitespace is interpreted as a wildcard.""" start="00:14:57.961" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's a function I made myself.""" start="00:15:01.301" video="mainVideo-steno" id="subtitle"]] +[[!template text="""fox mask will take me to the fox and the mask.""" start="00:15:04.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The whitespace is a wildcard.""" start="00:15:09.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""For me, Ctrl-s makes the whitespace literal.""" start="00:15:12.181" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I like having both options available to me:""" start="00:15:16.761" video="mainVideo-steno" id="subtitle"]] +[[!template text="""literal whitespace and wildcard whitespace.""" start="00:15:20.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Say I want to find the cat and the fox,""" start="00:15:29.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""one of my favorite fables.""" start="00:15:32.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I write cat fox, but I don't get what I want.""" start="00:15:34.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I've written a function that reverses""" start="00:15:39.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the order of my search query.""" start="00:15:42.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Now I get what I want.""" start="00:15:45.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Searching like this is very convenient.""" start="00:15:47.880" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In Lem, we can do something similar.""" start="00:15:55.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I want to read The Fox and the Lion.""" start="00:15:58.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I search for Lion Fox. Notice those words are capitalized.""" start="00:16:01.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Now I'm going to transform the last two words""" start="00:16:08.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""into a regular expression""" start="00:16:11.781" video="mainVideo-steno" id="subtitle"]] +[[!template text="""so that the order doesn't matter.""" start="00:16:14.300" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And now I can find the fable I'm looking for.""" start="00:16:18.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I did this with a plugin called Retro Stringop,""" start="00:16:27.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""op meaning operation.""" start="00:16:31.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I can perform any operation on the last n words.""" start="00:16:34.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Let's look at that.""" start="00:16:40.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The 2 means that I want to do something""" start="00:16:42.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to the last two words.""" start="00:16:44.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The operation I'm performing is Python code.""" start="00:16:46.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""To be honest, I don't know any Python,""" start="00:16:50.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but string manipulation is easy to understand.""" start="00:16:54.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If you do know Python, then you can make your own plugins""" start="00:16:57.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and even help with the development of Plover.""" start="00:17:01.701" video="mainVideo-steno" id="subtitle"]] +[[!template text="""A feature I like in Lem is that""" start="00:17:07.820" video="mainVideo-steno" id="subtitle"]] +[[!template text="""when you gracefully exit search with Enter or C-m,""" start="00:17:09.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""what you searched for is highlighted.""" start="00:17:15.780" video="mainVideo-steno" id="subtitle"]] +[[!template text="""You can cycle through the results, the highlights,""" start="00:17:18.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and you can toggle the highlights on or off.""" start="00:17:23.241" video="mainVideo-steno" id="subtitle"]] +[[!template text="""1978, John Kulp designs a keyboard""" start="00:17:30.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""known as the Space Cadet Keyboard.""" start="00:17:34.481" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This keyboard has many distinctive qualities,""" start="00:17:37.180" video="mainVideo-steno" id="subtitle"]] +[[!template text="""one being the modifiers, numbering seven in total:""" start="00:17:40.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Shift, Control, Meta, Super, Hyper, Greek, and Top.""" start="00:17:44.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This keyboard influences the development of Emacs.""" start="00:17:51.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""2000, designer Kiyoshi Kimura and programmer Yoji Hagia""" start="00:17:56.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""release SandS, a program that lets you turn your spacebar""" start="00:18:02.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""into a dual-function key,""" start="00:18:07.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""sending space on tap""" start="00:18:09.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and acting as the Shift modifier on hold.""" start="00:18:11.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""This idea, the dual-function key,""" start="00:18:16.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""later revolutionizes typing.""" start="00:18:18.501" video="mainVideo-steno" id="subtitle"]] +[[!template text="""These two concepts, the space cadet modifiers""" start="00:18:22.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and the dual-function key, can be combined.""" start="00:18:25.641" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I use a program called Kanata""" start="00:18:29.580" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to put all the modifiers on my homerow.""" start="00:18:32.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I tap the letter a, I get an a.""" start="00:18:36.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I hold it down for longer than 200 milliseconds,""" start="00:18:40.100" video="mainVideo-steno" id="subtitle"]] +[[!template text="""it acts as the Meta modifier,""" start="00:18:43.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and really I can add""" start="00:18:46.740" video="mainVideo-steno" id="subtitle"]] +[[!template text="""as many layers to my keyboard as I want.""" start="00:18:48.060" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I don't use a little stenotype.""" start="00:18:52.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Thanks to Full Keyboard Steno, the Plover plugin,""" start="00:18:55.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I use my whole keyboard.""" start="00:18:59.140" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I have an alternative keyboard layout on it,""" start="00:19:02.020" video="mainVideo-steno" id="subtitle"]] +[[!template text="""so, even when I'm typing in the traditional way,""" start="00:19:05.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""it feels amazing.""" start="00:19:08.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""My layout is called Kuron, and I lay it over Melani""" start="00:19:10.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""so that I have both available to me at all times.""" start="00:19:15.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I don't get them confused because I set them off""" start="00:19:19.620" video="mainVideo-steno" id="subtitle"]] +[[!template text="""with the way I press keys.""" start="00:19:24.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I press one key at a time,""" start="00:19:26.940" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I'm using Kuron, my keyboard layout.""" start="00:19:29.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I press multiple keys at the same time""" start="00:19:32.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and let them go quickly,""" start="00:19:35.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""then I'm using stenotypy, in my case Melani.""" start="00:19:37.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""And if I hold one key longer than 200 milliseconds,""" start="00:19:41.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""then I'm activating it as a modifier key or a layer key.""" start="00:19:45.241" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I always know what state I'm in by the way I press my keys.""" start="00:19:51.340" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's impossible for me to get confused.""" start="00:19:56.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Holding multiple modifiers is not a problem""" start="00:20:03.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""because the keycaps used for stenotypy are flat and square.""" start="00:20:07.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Pressing two or more keys at once""" start="00:20:13.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""with the same finger is easy.""" start="00:20:15.980" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Notice how close they are to each other.""" start="00:20:18.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In stenotypy, the homerow is the border""" start="00:20:21.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""between the two rows of keys.""" start="00:20:25.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It took me a while to get used to it,""" start="00:20:28.560" video="mainVideo-steno" id="subtitle"]] +[[!template text="""but now that I am used to it, I quite like it.""" start="00:20:31.260" video="mainVideo-steno" id="subtitle"]] +[[!template text="""So if I have to press a hotkey""" start="00:20:35.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""with all six modifiers, Shift, Control, Meta,""" start="00:20:38.220" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Alt, Hyper, Super, it's easy.""" start="00:20:43.980" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Thanks to Kanata, I have a Greek layer on my board.""" start="00:20:50.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Additionally, I have alpha, beta, and gamma layers""" start="00:20:54.660" video="mainVideo-steno" id="subtitle"]] +[[!template text="""that send sequences of keys that I can use as hotkeys""" start="00:20:58.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""in both GNU Emacs and Lem.""" start="00:21:03.320" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Maybe you noticed a few while I was programming.""" start="00:21:06.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Now it's possible to bring the Space Cadet""" start="00:21:10.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""to any keyboard and to build on its wonderful ideas.""" start="00:21:12.960" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Here I'll note that another Emacser, Excalamus,""" start="00:21:20.920" video="mainVideo-steno" id="subtitle"]] +[[!template text="""has made a page called Plover with Emacs,""" start="00:21:24.460" video="mainVideo-steno" id="subtitle"]] +[[!template text="""with information on how to use Emacs""" start="00:21:27.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""with the standard stenotype,""" start="00:21:30.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the one that has two rows,""" start="00:21:32.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the one I call a little stenotype.""" start="00:21:34.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""While I use my full keyboard,""" start="00:21:37.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I understand how a small board can be useful.""" start="00:21:39.600" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Finger movement is greatly reduced,""" start="00:21:43.200" video="mainVideo-steno" id="subtitle"]] +[[!template text="""leading to a very ergonomic typing experience.""" start="00:21:46.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In fact, all of the speed records""" start="00:21:49.440" video="mainVideo-steno" id="subtitle"]] +[[!template text="""are set with this stenotype, the standard stenotype.""" start="00:21:53.240" video="mainVideo-steno" id="subtitle"]] +[[!template text="""There are many great ideas on this page.""" start="00:21:58.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Thank you, Excalamus.""" start="00:22:01.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Special thanks to Richard Stallman,""" start="00:22:06.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the creator of GNU Emacs and the Free Software Foundation,""" start="00:22:09.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Sasaki Ryosuke, first name Ryosuke,""" start="00:22:13.420" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the creator and lead developer of Lem,""" start="00:22:16.920" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Mirabai Knight, the creator of the Open Steno Project,""" start="00:22:20.120" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which oversees the development of Plover,""" start="00:22:24.280" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and jtroo, the creator and lead developer of Kanata.""" start="00:22:26.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The views expressed in this talk are solely my own.""" start="00:22:32.700" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I have no connection to any of the parties mentioned herein""" start="00:22:37.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and therefore cannot be seen""" start="00:22:41.160" video="mainVideo-steno" id="subtitle"]] +[[!template text="""as representing them in any capacity.""" start="00:22:43.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""What I've said cannot be taken as medical advice.""" start="00:22:45.360" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I used the TranSide theme for GNU Emacs in this talk.""" start="00:22:50.860" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's beautiful and functional.""" start="00:22:54.760" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I love how the code looks, and I can read the comments.""" start="00:22:57.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""In Lem, I used Gruber.""" start="00:23:03.560" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Again, the comments are readable, and the code looks nice.""" start="00:23:05.760" video="mainVideo-steno" id="subtitle"]] +[[!template text="""When I first started using Emacs,""" start="00:23:11.200" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I used the Wheatgrass theme.""" start="00:23:13.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Another theme that I love is os1.""" start="00:23:19.980" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's a light, warm, modern theme for Emacs""" start="00:23:24.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""inspired by film palettes.""" start="00:23:28.240" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Regarding typography, for programming,""" start="00:23:35.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I used JuliaMono, which was designed by Cormullion.""" start="00:23:38.500" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It's extensive, and it's beautiful.""" start="00:23:43.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""For graphics, I used PromptFont,""" start="00:23:48.000" video="mainVideo-steno" id="subtitle"]] +[[!template text="""which was made by Yukari Hafner.""" start="00:23:51.380" video="mainVideo-steno" id="subtitle"]] +[[!template text="""She's very talented.""" start="00:23:54.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I really like her work, including this font.""" start="00:23:56.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""There are so many packages that I love in Emacs.""" start="00:24:01.180" video="mainVideo-steno" id="subtitle"]] +[[!template text="""If I talked about all of them,""" start="00:24:05.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""my talk would last for days,""" start="00:24:07.640" video="mainVideo-steno" id="subtitle"]] +[[!template text="""so I'm only going to mention three.""" start="00:24:09.800" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Keycast.""" start="00:24:12.580" video="mainVideo-steno" id="subtitle"]] +[[!template text="""At the top of the screen,""" start="00:24:14.400" video="mainVideo-steno" id="subtitle"]] +[[!template text="""you can see the commands I'm executing""" start="00:24:15.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""and how I'm invoking those commands.""" start="00:24:18.040" video="mainVideo-steno" id="subtitle"]] +[[!template text="""That's Keycast.""" start="00:24:20.560" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Rainbow Delimiters is another one I like.""" start="00:24:21.920" video="mainVideo-steno" id="subtitle"]] +[[!template text="""It lets me know visually""" start="00:24:25.540" video="mainVideo-steno" id="subtitle"]] +[[!template text="""when my parentheses are out of balance.""" start="00:24:27.520" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Very helpful when I'm programming in Lisp.""" start="00:24:30.480" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Moodline is another.""" start="00:24:35.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""The modeline is where I can see relevant information""" start="00:24:37.880" video="mainVideo-steno" id="subtitle"]] +[[!template text="""about the file I'm working on.""" start="00:24:42.900" video="mainVideo-steno" id="subtitle"]] +[[!template text="""Moodline only gives me the information I want.""" start="00:24:46.840" video="mainVideo-steno" id="subtitle"]] +[[!template text="""I'm not really worried about too many things, just""" start="00:24:50.760" video="mainVideo-steno" id="subtitle"]] +[[!template text="""the file name, the mode I'm in, and where I am in the file.""" start="00:24:55.461" video="mainVideo-steno" id="subtitle"]] + + + +Captioner: daniel + +Questions or comments? Please e-mail [z111.513.321@gmail.com](mailto:z111.513.321@gmail.com?subject=Comment%20for%20EmacsConf%202023%20steno%3A%20Programming%20with%20steno) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/steno-before.md b/2023/info/steno-before.md new file mode 100644 index 00000000..4eced50a --- /dev/null +++ b/2023/info/steno-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 26-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="steno-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:03 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/1xodScC6DPkfbnqG5FmbB3">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/steno-nav.md b/2023/info/steno-nav.md new file mode 100644 index 00000000..27ac4e5d --- /dev/null +++ b/2023/info/steno-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/emms">Emacs MultiMedia System (EMMS)</a> +Next by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/sun-close-after.md b/2023/info/sun-close-after.md new file mode 100644 index 00000000..aebbe6f8 --- /dev/null +++ b/2023/info/sun-close-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-close%3A%20Sunday%20closing%20remarks) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/sun-close-before.md b/2023/info/sun-close-before.md new file mode 100644 index 00000000..6f7c587b --- /dev/null +++ b/2023/info/sun-close-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 121-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="sun-close-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 2:00:43 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p/nMXCCJ25wxKUtbuQiwkakA">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/sun-close-nav.md b/2023/info/sun-close-nav.md new file mode 100644 index 00000000..92d58f1d --- /dev/null +++ b/2023/info/sun-close-nav.md @@ -0,0 +1,6 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/sun-open-after.md b/2023/info/sun-open-after.md new file mode 100644 index 00000000..66d2e6fb --- /dev/null +++ b/2023/info/sun-open-after.md @@ -0,0 +1,129 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="sun-open-mainVideo-transcript"></a> +# Transcript + +[[!template text="""Welcome to the second day of EmacsConf 2023.""" start="00:00:00.000" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""There's a General track and a Development track,""" start="00:00:04.520" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""but really, you'll probably find""" start="00:00:06.859" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""interesting things on both tracks""" start="00:00:08.438" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""no matter what your level of experience is,""" start="00:00:10.157" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so don't feel limited to one or the other.""" start="00:00:12.696" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Please note that the hyperdrive talk""" start="00:00:15.355" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""(titled "hyperdrive.el: Peer-to-peer filesystem in Emacs")""" start="00:00:17.094" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on the Development track in the afternoon""" start="00:00:21.173" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""is actually a general-audience talk,""" start="00:00:23.492" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""I just didn't have space elsewhere in the schedule.""" start="00:00:25.232" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The best parts of EmacsConf are the conversations.""" start="00:00:28.092" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The wiki has a page on how to watch and participate,""" start="00:00:31.331" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and I'll give you a quick overview as well.""" start="00:00:34.090" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can watch both streams at live.emacsconf.org""" start="00:00:36.869" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""using free and open source software.""" start="00:00:40.348" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Using a streaming media player like mpv""" start="00:00:43.227" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""seems to be the best way to watch in terms of performance""" start="00:00:45.646" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""but there are also web-based players""" start="00:00:49.045" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""just in case that's all you've got.""" start="00:00:50.644" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The schedule shows the General track on top""" start="00:00:53.123" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and the Development track on the bottom,""" start="00:00:55.122" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so you can see what else is going on.""" start="00:00:56.801" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""As you're watching the talks,""" start="00:00:59.420" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""you can refer to the schedule in another window.""" start="00:01:00.619" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Hover over the boxes to see the times and titles,""" start="00:01:03.518" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and click on the boxes in the schedule""" start="00:01:06.537" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""to jump to the talk's page for more details.""" start="00:01:08.436" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can also get the schedule as an iCalendar file""" start="00:01:11.215" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or as an Org file in different time zones.""" start="00:01:13.754" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Many talks will be followed by""" start="00:01:16.013" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""live Q&A web conferences with the speaker,""" start="00:01:17.512" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""which will be done in BigBlueButton or BBB.""" start="00:01:20.171" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""These are indicated with a solid border on the schedule""" start="00:01:23.250" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and by Q&A: BBB on the schedule page.""" start="00:01:26.249" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can join the web conference room""" start="00:01:29.408" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""by clicking on the BBB link""" start="00:01:31.107" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on the schedule page or the talk's webpage.""" start="00:01:32.726" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Then you can ask your questions yourself when the Q&A starts.""" start="00:01:35.665" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""To improve performance, please keep your webcam off""" start="00:01:38.584" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and stay muted until it's your turn to talk.""" start="00:01:41.043" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""This year we're experimenting with automatically switching""" start="00:01:43.782" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""between talks and Q&A sessions,""" start="00:01:46.401" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so the transitions on the stream might be a little sudden,""" start="00:01:48.760" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""but people in the BigBlueButton room""" start="00:01:51.959" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""can continue the conversation""" start="00:01:53.718" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""even after the talk moves off-stream.""" start="00:01:55.397" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Other talks will have Q&A via Etherpad or IRC,""" start="00:01:58.236" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""depending on what the speakers prefer.""" start="00:02:01.595" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""This is indicated in the schedule with a dashed border""" start="00:02:03.914" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and on the schedule page as well.""" start="00:02:06.933" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Please ask your questions in the recommended places""" start="00:02:09.652" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so that the speakers can easily see them.""" start="00:02:12.091" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Some talks will have the Q&A after the event,""" start="00:02:14.610" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so you can add your questions to their Etherpad.""" start="00:02:17.329" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We'll e-mail the speakers afterwards""" start="00:02:20.188" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and update the talk pages when they answer.""" start="00:02:21.920" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The schedule pages and track pages have quick shortcuts""" start="00:02:25.186" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so that you can find out more about talks, open the Etherpads,""" start="00:02:28.325" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and join the Q&A sessions. The watch page has more tips""" start="00:02:31.804" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on how to make the most of Q&A.""" start="00:02:35.363" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you can, please add notes and ask questions""" start="00:02:38.062" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""in the Etherpad for the talk. That makes it easier""" start="00:02:40.841" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for everyone to share their notes,""" start="00:02:43.840" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and speakers and hosts can read the questions from there.""" start="00:02:45.659" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We'll copy the notes to the talk pages afterwards.""" start="00:02:48.598" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We have one pad for each talk,""" start="00:02:52.617" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""so you can follow the links to get to the next one""" start="00:02:54.676" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or go back to the schedule and get the link from there.""" start="00:02:56.795" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you have general feedback about""" start="00:02:59.954" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""the conference itself, please put it in""" start="00:03:01.593" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""pad.emacsconf.org/2023 , which is linked on each pad.""" start="00:03:03.752" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can also use this as a general community message board""" start="00:03:09.211" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for things like Help Wanted.""" start="00:03:11.870" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Internet Relay Chat or IRC can be another great way""" start="00:03:15.009" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""to be part of lots of conversations.""" start="00:03:18.260" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can use chat.emacsconf.org to join the IRC channels""" start="00:03:20.787" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""through your web browser. The tabs on the left can help you""" start="00:03:24.506" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""switch between the different channels.""" start="00:03:27.345" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""There's #emacsconf-gen for the General track""" start="00:03:29.904" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and #emacsconf-dev for the Development track.""" start="00:03:32.960" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you need to reach us, you can join #emacsconf-org""" start="00:03:36.522" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""or e-mail emacsconf-org-private@gnu.org.""" start="00:03:40.241" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""You can use #emacsconf for hallway conversations.""" start="00:03:45.220" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Of course, you can join any of these channels""" start="00:03:48.499" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""with your favourite IRC client.""" start="00:03:50.618" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""We're on the libera.chat network.""" start="00:03:52.760" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Once again, we're going to be streaming with open captions""" start="00:03:56.736" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""for most of the talks this year, thanks to our speakers and""" start="00:03:59.375" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""captioning volunteers. The captioned talks are indicated""" start="00:04:02.454" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""on the schedule, and with any luck, we'll be posting""" start="00:04:05.813" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""transcripts on talk pages shortly after the talks start.""" start="00:04:08.532" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you need additional accommodations,""" start="00:04:12.031" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""please let us know in #emacsconf-org""" start="00:04:13.850" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and we'll see if we can make things happen.""" start="00:04:16.610" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If something goes down, we'll update status.emacsconf.org.""" start="00:04:18.509" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If it doesn't look like we've noticed yet,""" start="00:04:22.748" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""please let us know in the #emacsconf-org IRC channel,""" start="00:04:24.607" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""where we will be quietly panicking.""" start="00:04:28.046" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""In all of these conversations, please keep in mind""" start="00:04:30.205" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""our guidelines for conduct. You can find them on the wiki,""" start="00:04:32.904" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""They basically boil down to: please be nice.""" start="00:04:35.903" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If all goes well, the prerecorded talks and transcripts""" start="00:04:39.383" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""should be available from the talk pages""" start="00:04:41.822" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""shortly after they start playing,""" start="00:04:43.821" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and we'll post the recordings of live talks""" start="00:04:45.560" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and Q&A sessions within the next month or so.""" start="00:04:47.459" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""If you'd like to get an update, you can subscribe to""" start="00:04:50.578" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""the emacsconf-discuss mailing list.""" start="00:04:53.097" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""All right, let's get going.""" start="00:04:56.396" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Leo Vivier is hosting the general track,""" start="00:04:57.955" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and Amin Bandali hosting the development track.""" start="00:05:00.355" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""The other volunteers and I will run around mostly backstage,""" start="00:05:03.474" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""and you'll probably meet us in the closing remarks.""" start="00:05:06.193" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""That's also where we get to thank""" start="00:05:08.272" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""all the people and organizations""" start="00:05:09.911" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""who make EmacsConf even possible.""" start="00:05:11.550" video="mainVideo-sun-open" id="subtitle"]] +[[!template text="""Thanks for coming to EmacsConf 2023.""" start="00:05:14.589" video="mainVideo-sun-open" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20sun-open%3A%20Sunday%20opening%20remarks) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/sun-open-before.md b/2023/info/sun-open-before.md new file mode 100644 index 00000000..4c6c13d5 --- /dev/null +++ b/2023/info/sun-open-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 6-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="sun-open-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 05:17 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/9zjMPEZz1nYokiY7rk4wYv">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/sun-open-nav.md b/2023/info/sun-open-nav.md new file mode 100644 index 00000000..f84ed342 --- /dev/null +++ b/2023/info/sun-open-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/sat-close">Saturday closing remarks</a> +Next by track: <a href="/2023/talks/sun-close">Sunday closing remarks</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/table-after.md b/2023/info/table-after.md new file mode 100644 index 00000000..a0027610 --- /dev/null +++ b/2023/info/table-after.md @@ -0,0 +1,252 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="table-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Welcome everybody. My name is Daniel Molina""" start="00:00:01.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""and I'm going to give this talk""" start="00:00:03.080" video="mainVideo-table" id="subtitle"]] +[[!template text=""""Who needs Excel? Managing your students' qualifications""" start="00:00:05.061" video="mainVideo-table" id="subtitle"]] +[[!template text="""with Org-table".""" start="00:00:08.064" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm a professor. I work every day.""" start="00:00:08.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""I have to qualify my students.""" start="00:00:10.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""While most would consider normal in this situation,""" start="00:00:12.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""would be to use Excel or LibreOffice""" start="00:00:15.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""for doing that.""" start="00:00:17.720" video="mainVideo-table" id="subtitle"]] +[[!template text="""However, I think that approaching it from Emacs""" start="00:00:18.600" video="mainVideo-table" id="subtitle"]] +[[!template text="""has several interesting advantages.""" start="00:00:21.180" video="mainVideo-table" id="subtitle"]] +[[!template text="""First, I would like to write the qualification""" start="00:00:24.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""next to the justification, next to the student error,""" start="00:00:27.660" video="mainVideo-table" id="subtitle"]] +[[!template text="""and in the Excel format, it's not comfortable to do that.""" start="00:00:33.600" video="mainVideo-table" id="subtitle"]] +[[!template text="""Actually, I always prefer to write in Emacs""" start="00:00:36.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""for many reasons, as many of you.""" start="00:00:38.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""Also, I love text format because I can compare versions""" start="00:00:42.720" video="mainVideo-table" id="subtitle"]] +[[!template text="""using a control version system like Git and easily change.""" start="00:00:46.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""This is very useful for the revision period""" start="00:00:50.280" video="mainVideo-table" id="subtitle"]] +[[!template text="""in which a student visits me""" start="00:00:52.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""and maybe I can change the qualification for any reason.""" start="00:00:55.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""I also can export the results directly to PDF""" start="00:01:01.040" video="mainVideo-table" id="subtitle"]] +[[!template text="""to publish them in my online campus for the student.""" start="00:01:03.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""I have many tools for doing that.""" start="00:01:08.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""I already knew about Org-table formula.""" start="00:01:11.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""I thought it was very cool and useful""" start="00:01:13.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""to use Emacs for that,""" start="00:01:15.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""and I have actually found a package `orgtbl-aggregate`""" start="00:01:16.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""that seemed adequate for doing that.""" start="00:01:19.240" video="mainVideo-table" id="subtitle"]] +[[!template text="""Unfortunately, I didn't see a lot of information""" start="00:01:22.860" video="mainVideo-table" id="subtitle"]] +[[!template text="""about how to do that in a painless way.""" start="00:01:26.320" video="mainVideo-table" id="subtitle"]] +[[!template text="""So, I have to learn, training and testing,""" start="00:01:29.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""and then prepare these tools to solve that problem""" start="00:01:31.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""and to help other teachers.""" start="00:01:35.000" video="mainVideo-table" id="subtitle"]] +[[!template text="""Anyway, it could be used not only for teaching""" start="00:01:36.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""but for more contexts.""" start="00:01:39.960" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Demonstration""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Well, let's start.""" start="00:01:41.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""First, I have two sections,""" start="00:01:44.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""the comments and the section of the table, or results.""" start="00:01:46.460" video="mainVideo-table" id="subtitle"]] +[[!template text="""I have... The comment for each student""" start="00:01:53.400" video="mainVideo-table" id="subtitle"]] +[[!template text="""is in a different headline.""" start="00:01:56.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""It's very useful to check with a note.""" start="00:01:57.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""I can go directly using your helm or ivy""" start="00:02:05.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""or consult to go directly to the section.""" start="00:02:10.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""So it's very nice.""" start="00:02:13.000" video="mainVideo-table" id="subtitle"]] +[[!template text="""Then I put the comment, right, completely wrong,""" start="00:02:14.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""it answers other questions.""" start="00:02:22.880" video="mainVideo-table" id="subtitle"]] +[[!template text="""I put other comments here that I could send to the student,""" start="00:02:30.600" video="mainVideo-table" id="subtitle"]] +[[!template text="""you can imagine, and then""" start="00:02:35.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""I can put the qualification, the score for each student.""" start="00:02:37.481" video="mainVideo-table" id="subtitle"]] +[[!template text="""The thing with that is, initially,""" start="00:02:40.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""when I started doing that, I put, I don't know,""" start="00:02:43.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""the exception and a qualification with that.""" start="00:02:46.220" video="mainVideo-table" id="subtitle"]] +[[!template text="""Okay, that's one point, this a three,""" start="00:02:50.720" video="mainVideo-table" id="subtitle"]] +[[!template text="""and use a column total with something like that.""" start="00:02:55.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""Okay, that's nice.""" start="00:03:06.680" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Range""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]] + +[[!template text="""But then, when I started getting more and more parts,""" start="00:03:08.320" video="mainVideo-table" id="subtitle"]] +[[!template text="""I considered it more useful to use,""" start="00:03:11.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""to put for each part,""" start="00:03:17.082" video="mainVideo-table" id="subtitle"]] +[[!template text="""which is the maximum qualification,""" start="00:03:20.700" video="mainVideo-table" id="subtitle"]] +[[!template text="""on the range of the qualification.""" start="00:03:20.300" video="mainVideo-table" id="subtitle"]] +[[!template text="""In that case, I'm going to put,""" start="00:03:22.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""the first one is two scores, the second three points,""" start="00:03:25.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""the third one is one point, and the last one, four points.""" start="00:03:28.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""And instead of putting that in that way,""" start="00:03:35.000" video="mainVideo-table" id="subtitle"]] +[[!template text="""I like to put one is completely right,""" start="00:03:37.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""zero is completely wrong, or maybe some intermediate values for that.""" start="00:03:41.028" video="mainVideo-table" id="subtitle"]] +[[!template text="""Of course, I have to change the qualification,""" start="00:03:47.320" video="mainVideo-table" id="subtitle"]] +[[!template text="""the formula, so it's very simple.""" start="00:03:51.000" video="mainVideo-table" id="subtitle"]] +[[!template text="""I only have to put,""" start="00:03:54.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""multiply the values of the second line with that.""" start="00:03:56.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""So, it's very useful for doing that.""" start="00:04:08.300" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""More qualifications""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Okay, that's the first part, so I can put the comment,""" start="00:04:11.900" video="mainVideo-table" id="subtitle"]] +[[!template text="""I can go to the section, I can create...""" start="00:04:16.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put more qualifications.""" start="00:04:19.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""Now I'm going to put the table.""" start="00:04:24.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""First I'm going to change, rename the column name,""" start="00:04:27.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""because it's easier when there is only one word.""" start="00:04:30.460" video="mainVideo-table" id="subtitle"]] +[[!template text="""And it's very simple to use. You only have to put""" start="00:04:39.040" video="mainVideo-table" id="subtitle"]] +[[!template text="""the name, aggregate, the name of the table,""" start="00:04:47.160" video="mainVideo-table" id="subtitle"]] +[[!template text="""in that case group A,""" start="00:04:51.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""and in another string, the columns.""" start="00:04:54.660" video="mainVideo-table" id="subtitle"]] +[[!template text="""For instance, name, surname, total.""" start="00:04:57.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""And you can see that you can get a lesson list""" start="00:05:03.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""with all the students,""" start="00:05:07.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""but only with the final score to publish them.""" start="00:05:09.120" video="mainVideo-table" id="subtitle"]] +[[!template text="""Okay?""" start="00:05:16.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""Even you can update the name of the column,""" start="00:05:17.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""not in the original table,""" start="00:05:20.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""but in the lesson table using that format.""" start="00:05:21.801" video="mainVideo-table" id="subtitle"]] +[[!template text="""Okay?""" start="00:05:29.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""That is a good option.""" start="00:05:32.100" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Subsets""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Now we are going to see how can we use that""" start="00:05:34.240" video="mainVideo-table" id="subtitle"]] +[[!template text="""to make a subset of the students.""" start="00:05:38.500" video="mainVideo-table" id="subtitle"]] +[[!template text="""For instance, imagine, this is me,""" start="00:05:44.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put the bad, I change, now I can update,""" start="00:05:47.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""you can see this, but also I'm going to put a list""" start="00:05:54.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""with the students that have failed the exam.""" start="00:06:02.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""It's simple, because this package has the option `:cond`.""" start="00:06:10.961" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put first to see it better,""" start="00:06:21.260" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put a condition""" start="00:06:26.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""in which we aggregate less than a half, 5,""" start="00:06:28.600" video="mainVideo-table" id="subtitle"]] +[[!template text="""and I have to use a `string-to-number` total.""" start="00:06:37.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""In that way, I can see that this is the student""" start="00:06:44.180" video="mainVideo-table" id="subtitle"]] +[[!template text="""that has failed the exam,""" start="00:06:47.260" video="mainVideo-table" id="subtitle"]] +[[!template text="""I could use that to make another table,""" start="00:06:48.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""this is the people that passed the exam.""" start="00:06:54.080" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Sorting""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Another interesting feature is that""" start="00:07:08.300" video="mainVideo-table" id="subtitle"]] +[[!template text="""I can... the lesson table can be sorted automatically.""" start="00:07:10.981" video="mainVideo-table" id="subtitle"]] +[[!template text="""It's simple. You only have to put this symbol (`^`),""" start="00:07:15.621" video="mainVideo-table" id="subtitle"]] +[[!template text="""and you can put next to the column you want""" start="00:07:20.101" video="mainVideo-table" id="subtitle"]] +[[!template text="""to use for the sort, and then you can put""" start="00:07:23.361" video="mainVideo-table" id="subtitle"]] +[[!template text="""`a` if you want to sort alphabetically,""" start="00:07:27.000" video="mainVideo-table" id="subtitle"]] +[[!template text="""in uppercase if you want to reverse the sort,""" start="00:07:30.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""and `n` if you want to sort numerically.""" start="00:07:33.880" video="mainVideo-table" id="subtitle"]] +[[!template text="""For instance, I can put that""" start="00:07:38.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""from the lesser score to the best score,""" start="00:07:40.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""or here from the best score to the lesser score.""" start="00:07:43.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""And this sort is completely independent""" start="00:07:46.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""to the sort of the original table.""" start="00:07:48.961" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""New table""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Now I'm going to do another different thing,""" start="00:07:51.641" video="mainVideo-table" id="subtitle"]] +[[!template text="""we are going to put a new table,""" start="00:07:54.521" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put a new table""" start="00:08:02.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""in which I'm going to put""" start="00:08:07.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""the number of passed students, failed students""" start="00:08:09.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""and the ratio of students. It's simple.""" start="00:08:14.320" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put the pass, in that case, as column,""" start="00:08:16.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""I can put the count, of course, I can put the count,""" start="00:08:26.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""the number of students""" start="00:08:32.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""that have passed, so I'm going to put in that way, ok?""" start="00:08:35.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put pass, count, failed, ratio.""" start="00:08:42.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""You can see, ok?""" start="00:08:58.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""But this only the count,""" start="00:08:59.740" video="mainVideo-table" id="subtitle"]] +[[!template text="""you are going to put the number wrong.""" start="00:09:01.860" video="mainVideo-table" id="subtitle"]] +[[!template text="""So, it's true, but you can actually put formula here.""" start="00:09:04.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""For instance, you can say,""" start="00:09:08.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""I know that I have 3 students,""" start="00:09:10.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""so the number of failed is 3 minus the passed student.""" start="00:09:12.400" video="mainVideo-table" id="subtitle"]] +[[!template text="""And also, I can put the formula, is the people,""" start="00:09:18.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""the students that passed,""" start="00:09:24.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""divide into the number total of students, ok?""" start="00:09:27.720" video="mainVideo-table" id="subtitle"]] +[[!template text="""Let's go to put that in that way,""" start="00:09:36.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""is the people that passed, it is better in that way,""" start="00:09:41.380" video="mainVideo-table" id="subtitle"]] +[[!template text="""and also I can put directly the number of,""" start="00:09:44.400" video="mainVideo-table" id="subtitle"]] +[[!template text="""the ratio of students.""" start="00:09:48.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""So, in that way, I can have a table""" start="00:09:50.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""with the students that passed,""" start="00:09:55.740" video="mainVideo-table" id="subtitle"]] +[[!template text="""the students that failed""" start="00:09:57.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""and the ratio of people that passed.""" start="00:09:58.560" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Statistics""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Sometimes this type of qualification will be useful for me,""" start="00:10:01.280" video="mainVideo-table" id="subtitle"]] +[[!template text="""to see how much has been the sound,""" start="00:10:04.820" video="mainVideo-table" id="subtitle"]] +[[!template text="""how much good has been the exercise.""" start="00:10:08.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""Now, I'm going to put a new table.""" start="00:10:12.240" video="mainVideo-table" id="subtitle"]] +[[!template text="""This new table is going to go some statistics,""" start="00:10:14.880" video="mainVideo-table" id="subtitle"]] +[[!template text="""`statistics_score`, `begin: aggregate :table "final"`.""" start="00:10:22.422" video="mainVideo-table" id="subtitle"]] +[[!template text="""In this case, I'm going to use not the original table,""" start="00:10:32.380" video="mainVideo-table" id="subtitle"]] +[[!template text="""but a final, I'm going to put `final_group`,""" start="00:10:43.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""`final_p1`, `final_p2`, ok?""" start="00:10:54.020" video="mainVideo-table" id="subtitle"]] +[[!template text="""And as `:cols`, I'm going to put directly""" start="00:11:01.400" video="mainVideo-table" id="subtitle"]] +[[!template text="""how many results I have, I put number,""" start="00:11:06.120" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put also the mean.""" start="00:11:13.580" video="mainVideo-table" id="subtitle"]] +[[!template text="""You can see that mean total is not working""" start="00:11:19.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""because I'm using this table and I renamed,""" start="00:11:21.401" video="mainVideo-table" id="subtitle"]] +[[!template text="""the column name was renamed,""" start="00:11:24.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""so it's `mean(Score)`, mean,""" start="00:11:26.080" video="mainVideo-table" id="subtitle"]] +[[!template text="""and then the score. You can obtain `stdiv` -- `sdev`,""" start="00:11:36.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""sorry, there was an error about that,""" start="00:12:05.920" video="mainVideo-table" id="subtitle"]] +[[!template text="""and two decimal,""" start="00:12:08.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""and that is another interesting score.""" start="00:12:12.640" video="mainVideo-table" id="subtitle"]] + +[[!template new="1" text="""Combining""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]] + +[[!template text="""Now, I'm going to finish showing how we can use.""" start="00:12:17.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""To finish it, we are going to see""" start="00:12:23.240" video="mainVideo-table" id="subtitle"]] +[[!template text="""how we can combine several tables""" start="00:12:25.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""or even an aggregated table in a new table.""" start="00:12:28.300" video="mainVideo-table" id="subtitle"]] +[[!template text="""For instance, you can have a table for the practice 1,""" start="00:12:32.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""you can have a table for the practice 2,""" start="00:12:36.260" video="mainVideo-table" id="subtitle"]] +[[!template text="""so I'm going to do that.""" start="00:12:38.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to move this table. You can copy or remove,""" start="00:12:40.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""doesn't matter the order,""" start="00:12:48.181" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put this to identify the result of practice 2,""" start="00:12:49.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""Org create an ID (`org-id-get-create`),""" start="00:12:59.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""then we have a previous result,""" start="00:13:03.322" video="mainVideo-table" id="subtitle"]] +[[!template text="""and I have a final table.""" start="00:13:07.480" video="mainVideo-table" id="subtitle"]] +[[!template text="""The final table could be complicated,""" start="00:13:10.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""but it's not so much complicated, it's only that,""" start="00:13:11.840" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put something that the formula wants.""" start="00:13:17.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""The formula is to make""" start="00:13:21.960" video="mainVideo-table" id="subtitle"]] +[[!template text="""an `org-lookup-first` of the second name,""" start="00:13:26.589" video="mainVideo-table" id="subtitle"]] +[[!template text="""considering that it's unique,""" start="00:13:34.401" video="mainVideo-table" id="subtitle"]] +[[!template text="""`remote` of the surname,""" start="00:13:41.541" video="mainVideo-table" id="subtitle"]] +[[!template text="""and let's say another `remote` of the `$3` element,""" start="00:13:53.440" video="mainVideo-table" id="subtitle"]] +[[!template text="""ok, that's an error because I don't put yet the ID,""" start="00:14:05.560" video="mainVideo-table" id="subtitle"]] +[[!template text="""so I'm going to copy -- mark and copy --""" start="00:14:15.120" video="mainVideo-table" id="subtitle"]] +[[!template text="""and paste the unique ID generated,""" start="00:14:19.760" video="mainVideo-table" id="subtitle"]] +[[!template text="""I'm going to put that... I think there is missing one.""" start="00:14:28.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""Finally. Okay, that's right.""" start="00:14:38.520" video="mainVideo-table" id="subtitle"]] +[[!template text="""So imagine that I change something here, for instance,""" start="00:14:43.400" video="mainVideo-table" id="subtitle"]] +[[!template text="""I put... I change that,""" start="00:14:49.580" video="mainVideo-table" id="subtitle"]] +[[!template text="""actually, this is changed also, and this is changed.""" start="00:14:56.701" video="mainVideo-table" id="subtitle"]] +[[!template text="""This is a good way to divide the classification""" start="00:15:02.200" video="mainVideo-table" id="subtitle"]] +[[!template text="""in several files, one for the practice 1,""" start="00:15:08.600" video="mainVideo-table" id="subtitle"]] +[[!template text="""one for the practice 2, and one final practice""" start="00:15:10.201" video="mainVideo-table" id="subtitle"]] +[[!template text="""that I can finally export in a final table.""" start="00:15:15.040" video="mainVideo-table" id="subtitle"]] +[[!template text="""Of course you can make it a lot more pretty,""" start="00:15:27.640" video="mainVideo-table" id="subtitle"]] +[[!template text="""but this is all I want to show you.""" start="00:15:31.120" video="mainVideo-table" id="subtitle"]] +[[!template text="""I hope with this talk""" start="00:15:33.360" video="mainVideo-table" id="subtitle"]] +[[!template text="""you have learned a lot more about Org formula,""" start="00:15:34.800" video="mainVideo-table" id="subtitle"]] +[[!template text="""[orgtbl-aggregate] package,""" start="00:15:37.680" video="mainVideo-table" id="subtitle"]] +[[!template text="""and how you can use all this techniques""" start="00:15:39.689" video="mainVideo-table" id="subtitle"]] +[[!template text="""to improve your qualification of a student,""" start="00:15:42.280" video="mainVideo-table" id="subtitle"]] +[[!template text="""or for whatever you want.""" start="00:15:45.600" video="mainVideo-table" id="subtitle"]] + + + +Captioner: danielmolina + +Questions or comments? Please e-mail [dmolina@mailbox.org](mailto:dmolina@mailbox.org?subject=Comment%20for%20EmacsConf%202023%20table%3A%20Who%20needs%20Excel%3F%20Managing%20your%20students%20qualifications%20with%20org-table) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/table-before.md b/2023/info/table-before.md new file mode 100644 index 00000000..9e58529f --- /dev/null +++ b/2023/info/table-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 16-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference +Status: All done + + + + + +<div class="vid"><video controls preload="none" id="table-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 15:51 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/p8K8mtayv2HYtw1gK3zUwR">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/table-nav.md b/2023/info/table-nav.md new file mode 100644 index 00000000..625ecd74 --- /dev/null +++ b/2023/info/table-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a> +Next by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/taming-after.md b/2023/info/taming-after.md new file mode 100644 index 00000000..619aed5c --- /dev/null +++ b/2023/info/taming-after.md @@ -0,0 +1,7 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +Questions or comments? Please e-mail [emacsconf@gergo.csillger.hu](mailto:emacsconf@gergo.csillger.hu?subject=Comment%20for%20EmacsConf%202022%20taming%3A%20Taming%20things%20with%20Org%20Mode) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/taming-before.md b/2023/info/taming-before.md new file mode 100644 index 00000000..364f0fdc --- /dev/null +++ b/2023/info/taming-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> + +The following image shows where the talk is in the schedule for Sat 2023-12-02. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.<div class="schedule-in-context schedule-svg-container" data-slug="taming"> +<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect stroke-width="3" x="196" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(209,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 2:40 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(530,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 2:50- 3:30 Literate Documentation with Emacs and Org Mode</title> <rect x="549" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(609,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 3:45- 4:05 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="635" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(664,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg> +</div> + +[[!toc ]] +Format: 10-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2023/current/bbb-taming.html> +Discuss on IRC: [#emacsconf](https://chat.emacsconf.org/?join=emacsconf) +Status: Sorry, this talk has been cancelled + + + + + + +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/taming-nav.md b/2023/info/taming-nav.md new file mode 100644 index 00000000..4fa4474d --- /dev/null +++ b/2023/info/taming-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by time: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a> +Next by time: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/teaching-after.md b/2023/info/teaching-after.md new file mode 100644 index 00000000..6846d4d7 --- /dev/null +++ b/2023/info/teaching-after.md @@ -0,0 +1,1340 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="teaching-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Welcome to my talk, which is pre-recorded,""" start="00:00:00.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""so please don't blame me if I come across""" start="00:00:04.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""as wooden and humorless.""" start="00:00:06.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It's hard to work up any emotion""" start="00:00:08.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""when looking at a mechanical eye.""" start="00:00:11.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Of course, I am German,""" start="00:00:13.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""so I am pretty wooden and humorless to begin with.""" start="00:00:15.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""What else do you need to know about me?""" start="00:00:18.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Not much, I suppose, except that I have been""" start="00:00:20.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""an Emacs user on and off""" start="00:00:23.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""since my days as a graduate student""" start="00:00:25.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in theoretical physics in the 1990s.""" start="00:00:26.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I picked Emacs and Org Mode up again""" start="00:00:30.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for teaching during COVID""" start="00:00:34.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""when I had a lot of time on my hands,""" start="00:00:36.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and when the teaching and learning needs shifted""" start="00:00:38.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""because of the exclusive online teaching.""" start="00:00:40.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Now I'm going to take my picture away.""" start="00:00:44.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""You had a good look at me.""" start="00:00:48.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I think that's just going to be in the way.""" start="00:00:49.560" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""My interest in this topic""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""So my interest in this topic began with""" start="00:00:54.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""an Emacs talk given by Daniel German""" start="00:00:57.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from the University of Victoria in Canada in 2021.""" start="00:00:59.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Daniel demonstrated in detail""" start="00:01:04.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""how he uses Emacs and Org Mode""" start="00:01:06.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to prepare and deliver lectures""" start="00:01:09.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""on different programming languages.""" start="00:01:12.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""This gave me the idea to try the same thing""" start="00:01:14.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""with my students with an important alteration.""" start="00:01:16.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I wanted to force them to use Emacs and Org Mode""" start="00:01:20.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""just as most computer science instructors""" start="00:01:23.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""force their students to use whatever they are using""" start="00:01:25.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""when they develop their material.""" start="00:01:29.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I carried my plan out and mandated Emacs and Org Mode""" start="00:01:32.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""as the only programming platform and IDE""" start="00:01:36.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for three consecutive terms in all my courses,""" start="00:01:40.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""nine courses in total.""" start="00:01:43.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I will give more details later.""" start="00:01:45.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I published my results as a case study""" start="00:01:47.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in September of this year,""" start="00:01:49.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and it contains the missing bits""" start="00:01:52.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that I will not talk about today for lack of time,""" start="00:01:53.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""especially regarding the methodology,""" start="00:01:56.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the assessment, et cetera.""" start="00:01:58.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Please also use the Q&A to inquire about such details""" start="00:02:00.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""if they interest you.""" start="00:02:05.000" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""What is data science?""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""I probably don't have to explain what computer science is,""" start="00:02:08.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but not everyone may know what data science does.""" start="00:02:12.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I teach courses in both disciplines""" start="00:02:16.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and the boundaries between them are blurred,""" start="00:02:18.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""so much of what I'm saying about data science""" start="00:02:20.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""will also be relevant for computer science.""" start="00:02:22.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Conceptually, data science is an interdisciplinary affair""" start="00:02:24.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that intersects with computer science""" start="00:02:29.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and with whatever it is that the data scientist""" start="00:02:32.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""or his or her clients know very well; their domain.""" start="00:02:34.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Because of this interdisciplinary character,""" start="00:02:39.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and because their focus is on the data""" start="00:02:42.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""rather than only on algorithms or mathematics,""" start="00:02:45.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""successful data scientists need to be more broadly educated""" start="00:02:48.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""than specialists in computer science or statistics.""" start="00:02:52.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In particular, there's a need to master""" start="00:02:56.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the entire so-called data science pipeline:""" start="00:03:00.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from data cleaning, which you see""" start="00:03:03.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""on the very left in this slide,""" start="00:03:06.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""over coding, to statistical modeling,""" start="00:03:08.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and to data storytelling through visualization,""" start="00:03:12.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which you see on the very right.""" start="00:03:14.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""This is why until recently,""" start="00:03:17.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""data science was a graduate-level education""" start="00:03:19.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""only for software engineers, computer scientists,""" start="00:03:22.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""statisticians, psychologists, biologists, business people,""" start="00:03:25.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""or for whoever took a special fancy""" start="00:03:31.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to data in their chosen field.""" start="00:03:34.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Only with a growing interest in machine learning,""" start="00:03:37.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""this has changed.""" start="00:03:40.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And now we train--or try to train--data scientists""" start="00:03:42.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in undergraduate programs as well.""" start="00:03:45.600" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Computer science is a craft""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Now, what I'm saying here, I think is true""" start="00:03:47.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for all areas of computing,""" start="00:03:52.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from software engineering to data science.""" start="00:03:54.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They are mostly taught and learned like a craft""" start="00:03:56.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""rather than a science, not through research,""" start="00:04:00.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but through drill.""" start="00:04:03.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The elements of this drill can be illustrated""" start="00:04:04.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""by learning how to fix cars.""" start="00:04:07.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They include taking a problem apart""" start="00:04:09.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""with the tools you already know,""" start="00:04:12.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""learn a lot more tools in the process of doing that,""" start="00:04:14.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""then solve many, many problems""" start="00:04:18.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""of increasing difficulty""" start="00:04:20.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""while being or getting more literate, as it were,""" start="00:04:22.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""about the mechanics of computing,""" start="00:04:25.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""including the hardware, the infrastructure,""" start="00:04:27.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and finally develop a way of thinking""" start="00:04:30.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that allows the learner to identify patterns""" start="00:04:32.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to solve new problems better and faster.""" start="00:04:35.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Unlike learning how to fix cars,""" start="00:04:39.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""all of the objects of our interest--""" start="00:04:42.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""both hardware and software--are evolving rapidly.""" start="00:04:44.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In this field, radical innovation is the rule,""" start="00:04:48.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""not the exception.""" start="00:04:51.520" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""The problem""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""The problem that I identified is that students,""" start="00:04:52.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""especially undergraduate students""" start="00:04:58.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in computer and data science,""" start="00:05:00.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""often do no longer understand the infrastructure.""" start="00:05:02.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Here are a few examples of the problems""" start="00:05:06.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that the students seem to have.""" start="00:05:08.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They do not understand computer architecture,""" start="00:05:10.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""except in theory.""" start="00:05:13.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They cannot navigate their way around their own computers.""" start="00:05:14.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They don't understand the value or the issues of networks.""" start="00:05:18.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They are often more interested in convenience""" start="00:05:22.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""than in customization of the environment.""" start="00:05:25.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""As a result, the machines which we're meant to control""" start="00:05:28.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""have all the power--though passively,""" start="00:05:31.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""of course, for now anyway.""" start="00:05:35.080" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""The solution: Emacs + Org-mode""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Enter Emacs, the self-extensible operating system""" start="00:05:36.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""disguised as a text editor.""" start="00:05:43.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""You're at EmacsConf, so of course I don't have to tell you""" start="00:05:46.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""what Emacs can do.""" start="00:05:51.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Here's a rundown on the right-hand side""" start="00:05:52.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""of some of its most important properties,""" start="00:05:54.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and an Org Mode file excerpt""" start="00:05:56.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from one of my classes on the left.""" start="00:05:58.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""What you may not know is how to onboard students who have,""" start="00:06:00.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""at the start, no interest whatsoever""" start="00:06:05.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in leaving their comfort zone,""" start="00:06:07.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which is defined by a lifetime of Windows,""" start="00:06:08.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""pre-configured graphical interfaces, and software bloat.""" start="00:06:12.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In fact, when I started this, I wasn't very hopeful,""" start="00:06:16.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but the results have made me even more optimistic""" start="00:06:19.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""than I already am by nature.""" start="00:06:22.400" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Emacs configuration file""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""So to rein in your expectations,""" start="00:06:24.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""you cannot do entirely without""" start="00:06:28.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""configuring the student's experience.""" start="00:06:31.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""An important part of this""" start="00:06:33.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""is the initial Emacs configuration shown here.""" start="00:06:35.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The minimal configuration file,""" start="00:06:38.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which you can see on the right-hand side,""" start="00:06:40.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""allows the students to run code in C and C++, R, SQL,""" start="00:06:42.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""SQLite, Python, and Bash.""" start="00:06:46.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It will allow them to update Emacs packages""" start="00:06:48.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from the stable Melpa repository,""" start="00:06:52.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and it will allow them to create code blocks easily""" start="00:06:55.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""using skeleton commands for code blocks,""" start="00:06:58.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and to auto-load the Emacs Speaks Statistics package,""" start="00:07:01.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which you particularly need when you run R in Emacs,""" start="00:07:06.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and lastly, to disable toolbar and graphical menu bars.""" start="00:07:09.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""To do that encourages the exclusive use of the keyboard""" start="00:07:14.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to control Emacs, and to stop the students""" start="00:07:19.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from flicking all the time to the mouse;""" start="00:07:23.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""seems to be an essential part of getting used to Emacs.""" start="00:07:25.840" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Story + code = source + documentation""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Now Org Mode was included in Emacs in 2006 as a major mode,""" start="00:07:30.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and as you know, it's a structured plain text format""" start="00:07:38.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""with notebook live code execution.""" start="00:07:41.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It's an ideal platform for literate programming,""" start="00:07:45.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which is a term for programming that intermingles code,""" start="00:07:47.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""documentation, and output within a single document,""" start="00:07:52.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and that can, as you can see here from an org file,""" start="00:07:55.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""either be tangled into source code""" start="00:07:59.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""or woven into a documentation file, which could be PDF,""" start="00:08:02.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""could be Markdown, could be OpenOffice,""" start="00:08:07.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""could be a notebook format.""" start="00:08:11.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""This methodology was conceived by Donald Knuth in 1984,""" start="00:08:13.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and it is therefore even older than Emacs itself.""" start="00:08:18.480" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""What is literate programming?""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""The main purpose of literate programming is not only""" start="00:08:22.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to make code or documentation or output more manageable,""" start="00:08:27.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but to allow humans to create a data story with ease""" start="00:08:31.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from a single source.""" start="00:08:34.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So what you see on the slide on the left-hand side""" start="00:08:37.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""is the story and code inside a Org Mode file.""" start="00:08:40.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The file starts with some documentation,""" start="00:08:45.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""then with the white background is the code,""" start="00:08:49.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and at the bottom you see an output file,""" start="00:08:52.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which is not shown here on the slide itself.""" start="00:08:56.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In the middle, you have the source code,""" start="00:09:00.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which is the result of tangling""" start="00:09:02.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""or of opening a buffer inside org-mode.""" start="00:09:05.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And on the very right-hand side, you have a PDF--""" start="00:09:10.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""actually this HTML rendering of the very same file""" start="00:09:16.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that you see on the very left.""" start="00:09:20.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So the humans look at some of this code,""" start="00:09:22.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and the machines will look at other parts of the code.""" start="00:09:26.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I actually did all my programming in a literate way""" start="00:09:29.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""even in the early 1990s, not using org-mode,""" start="00:09:33.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which didn't exist yet,""" start="00:09:35.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but using Norman Ramsey's Noweb preprocessor.""" start="00:09:36.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And I still use it inside org-mode today.""" start="00:09:40.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""This preprocessor, Noweb, allows you to tangle code""" start="00:09:43.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from within an org-mode file that's a self-standing file,""" start="00:09:47.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""much like org-mode's edit functions,""" start="00:09:50.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which export code blocks into buffers""" start="00:09:52.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in whatever language the code block is written.""" start="00:09:55.640" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Emacs as a literate programming tool""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""In data science, these interactive notebooks""" start="00:09:59.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in one of the interpreted languages like Julia,""" start="00:10:02.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Python, or R dominate.""" start="00:10:06.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The basis technology,""" start="00:10:07.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""is that of Jupyter notebooks, which take their name""" start="00:10:10.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from Julia, Python, and R.""" start="00:10:12.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And these notebooks use a spruced-up shell (for example,""" start="00:10:14.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""IPython for Python) with an option to add SQL cells.""" start="00:10:19.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Org Mode inside Emacs has a large number of advantages--""" start="00:10:23.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""some of them are listed here--over these notebooks.""" start="00:10:28.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Two of these stand out particularly.""" start="00:10:31.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Different languages can be mixed, as shown in the image,""" start="00:10:33.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""while in Jupyter notebooks, a notebook is limited to""" start="00:10:39.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""running a kernel in one language only.""" start="00:10:43.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So the content of the notebook--""" start="00:10:45.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""its document code or output part--""" start="00:10:48.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""can be exported in a variety of formats,""" start="00:10:50.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which makes it much easier to share with others""" start="00:10:52.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and to use one's work in different reporting formats;""" start="00:10:55.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for example, to read it out into a LaTeX publication.""" start="00:10:58.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Actually, to come back to this,""" start="00:11:02.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the file does not show different languages.""" start="00:11:08.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""That is something you can see in a paper of mine,""" start="00:11:11.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in one of the figures.""" start="00:11:14.160" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Case study: basic setup""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Now, coming to the case study itself,""" start="00:11:18.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""here are some of the overall results of the case study.""" start="00:11:22.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Now, the courses ranged from introductory to advanced,""" start="00:11:25.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""as you can see here in the table on the left-hand side.""" start="00:11:29.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The topics covered different programming applications.""" start="00:11:32.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The courses were taught""" start="00:11:37.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""over a period of three consecutive terms.""" start="00:11:38.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""There was between 6 and 28 participants per course.""" start="00:11:41.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I used a few other tools besides Emacs:""" start="00:11:45.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""GitHub as the main repository for all the material,""" start="00:11:49.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Datacamp for structured online lessons and exercises,""" start="00:11:51.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Canvas as a learning management system,""" start="00:11:55.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and Zoom to record the sessions for later use.""" start="00:11:57.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Now, the material for all these courses""" start="00:12:00.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""is openly available on GitHub,""" start="00:12:03.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and the address is on the slide at the bottom.""" start="00:12:05.400" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Emacs + Org-mode notebooks""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""I'm now going to briefly comment on""" start="00:12:11.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the most important aspects of using Emacs and Org Mode""" start="00:12:15.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in and outside of class.""" start="00:12:18.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Essentially, these two--Emacs and Org Mode--""" start="00:12:20.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""were used all the time for almost everything""" start="00:12:24.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that the students were doing in and outside of class.""" start="00:12:26.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The only exception were multiple choice tests""" start="00:12:29.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and online assignments""" start="00:12:32.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""on the Datacamp learning platform""" start="00:12:34.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in the data science courses.""" start="00:12:35.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""But everything else--code-along lectures, home assignments,""" start="00:12:37.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""student projects, practice in class--""" start="00:12:40.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""was done with these two tools.""" start="00:12:42.440" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Onboarding: simplified Emacs tutorial""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""To facilitate the onboarding,""" start="00:12:45.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""so to get students used to Emacs in the first place,""" start="00:12:48.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I developed a simplified Emacs tutorial,""" start="00:12:51.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which was focused on the basics of literate programming.""" start="00:12:53.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It included navigation in major modes,""" start="00:12:56.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""managing files and buffers, customizing the interface,""" start="00:13:00.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and keyboard shortcuts.""" start="00:13:02.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It was considerably shorter;""" start="00:13:04.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""about a quarter of the size of the standard Emacs tutorial,""" start="00:13:06.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which contains a lot more stuff.""" start="00:13:12.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""As a result of this onboarding,""" start="00:13:14.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""by the end of the second week,""" start="00:13:16.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""most students were able""" start="00:13:18.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to use Emacs and Org Mode competently""" start="00:13:19.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for their assignments in and outside of class,""" start="00:13:22.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""completely independent of their previous exposure""" start="00:13:25.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to any of these tools.""" start="00:13:29.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Most of the students, in fact, had never heard of Emacs.""" start="00:13:31.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""All the classes were taught physically in a computer lab.""" start="00:13:35.400" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Instruction + interaction""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Emacs with Org Mode""" start="00:13:40.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and the necessary languages for the class""" start="00:13:42.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""were pre-installed on the computers.""" start="00:13:45.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The computers ran Windows, unfortunately,""" start="00:13:47.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""like most of the students' personal computers.""" start="00:13:50.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""A typical class involved a lecture delivered by me""" start="00:13:52.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in Emacs as a code-along.""" start="00:13:57.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The students would get an Org Mode file""" start="00:13:59.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""with all the code removed.""" start="00:14:01.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""You can see an example here""" start="00:14:03.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""on the slide on the right-hand side.""" start="00:14:04.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""This example is actually only one line of code in blue,""" start="00:14:06.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""visible at the bottom for an award file.""" start="00:14:12.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Then the students submitted home assignments""" start="00:14:15.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""also as Org Mode files, complete with documentation,""" start="00:14:17.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""code and sample output.""" start="00:14:21.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Working this way makes the classes highly interactive.""" start="00:14:23.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So the students are busy coding""" start="00:14:27.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and they learn to control their environment better""" start="00:14:28.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""all the time.""" start="00:14:31.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In my classes, the students have to complete""" start="00:14:34.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""an independent, agile research project""" start="00:14:38.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""using an adaptation of Scrum as a methodology.""" start="00:14:41.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""You can find examples of these rather high-octane projects""" start="00:14:44.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in my paper.""" start="00:14:48.080" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Assignments + projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""Now, using literate programming for the projects""" start="00:14:48.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""provided some unique benefits.""" start="00:14:52.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""By having to continuously interweave documentation,""" start="00:14:54.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""references and output alongside functional code,""" start="00:14:57.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the students learn to communicate their work""" start="00:15:01.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""throughout the term""" start="00:15:04.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in various stages of completion,""" start="00:15:05.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from the research question at the start,""" start="00:15:07.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""over the prototype to the finished product.""" start="00:15:09.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And here on the right-hand side,""" start="00:15:12.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""you can see one of those assignments""" start="00:15:15.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that the students received,""" start="00:15:17.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""including some of the metadata for their Org Mode files""" start="00:15:18.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in the beginning of the course.""" start="00:15:24.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Here are two graphs that I created early on""" start="00:15:26.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""when I started doing this.""" start="00:15:32.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""They show how the test results of the students""" start="00:15:34.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""in two different courses, actually three courses,""" start="00:15:36.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""changed from before to after""" start="00:15:39.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""introducing literate programming with Emacs and Org Mode.""" start="00:15:41.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So you see the before and after""" start="00:15:45.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""introducing literate programming in the red curve before""" start="00:15:49.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and the blue curve afterwards.""" start="00:15:53.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And the improvement, especially on the right-hand side,""" start="00:15:54.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""is quite significant.""" start="00:15:58.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""It was this performance improvement,""" start="00:15:59.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""apart from the students who were voicing their support,""" start="00:16:02.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that made me extend the Emacs experiment""" start="00:16:05.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""after the first term""" start="00:16:08.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and continue for the following two terms.""" start="00:16:09.160" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Overall results positive""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""The courses... Coming to the result, the overall result...""" start="00:16:15.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The courses were formally and informally""" start="00:16:18.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""also evaluated by the students,""" start="00:16:21.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but you need to look at my paper""" start="00:16:23.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for some explicit student comments,""" start="00:16:24.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which you will find there.""" start="00:16:27.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Here, I'm giving you only the summary.""" start="00:16:28.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So first of all, Emacs proved to be hard to learn for some,""" start="00:16:29.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""but all students succeeded in all courses,""" start="00:16:34.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""independent of the level of""" start="00:16:37.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""their previous knowledge and skill.""" start="00:16:39.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The documentation practices remained pretty uneven.""" start="00:16:40.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So some students wrote a lot, others wrote little.""" start="00:16:45.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""But they were overall much higher than in classes""" start="00:16:49.640" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""without the use of Emacs and Org Mode.""" start="00:16:53.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The interactivity enabled through Emacs""" start="00:16:57.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""was highly praised by the students""" start="00:16:59.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and always identified on the evaluations.""" start="00:17:01.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And lastly and most importantly, given the problems""" start="00:17:05.040" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that I identified earlier, the computing file""" start="00:17:08.560" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""and data handling competence""" start="00:17:13.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""of the students who worked with Emacs throughout""" start="00:17:15.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""opening Emacs shells, running programs through Emacs,""" start="00:17:18.280" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""these skills increased massively.""" start="00:17:23.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In the published paper, I have expressed""" start="00:17:27.000" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""a little more doubt than you see on this slide.""" start="00:17:30.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""But now, actually, I'm feeling quite hopeful again,""" start="00:17:32.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""especially because recently for one term,""" start="00:17:38.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I have returned to Jupyter notebooks.""" start="00:17:41.880" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In the current term, I abandoned Emacs again""" start="00:17:47.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for online Jupyter notebook installations.""" start="00:17:50.600" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The reason is that these Jupyter notebooks""" start="00:17:53.120" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that I use from DataCamp have generative AI support""" start="00:17:55.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""from ChatGPT integrated into the notebook.""" start="00:18:00.160" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And I wanted to try that.""" start="00:18:03.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""But after one term without Emacs,""" start="00:18:04.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I regret that decision now.""" start="00:18:08.520" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The AI advantage does not make up""" start="00:18:10.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""for the loss of the immersion""" start="00:18:13.200" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""that Emacs and Org Mode deliver.""" start="00:18:15.120" video="mainVideo-teaching" id="subtitle"]] + +[[!template new="1" text="""Conclusion & outlook""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]] + +[[!template text="""And here's the summary.""" start="00:18:19.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""When learning computer and data science,""" start="00:18:21.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""immersion is everything.""" start="00:18:23.760" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""The best students will aim at immersion anyway.""" start="00:18:25.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""But for the majority of students,""" start="00:18:29.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""immersion must happen in class.""" start="00:18:31.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Emacs and Org Mode performed throughout very well""" start="00:18:33.680" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""as the central literary programming platform.""" start="00:18:39.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And the pre-configuring and the onboarding,""" start="00:18:42.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""which I showed to you, were very important""" start="00:18:45.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""to train the students quickly.""" start="00:18:48.960" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""In the paper, I also speculated on the impact""" start="00:18:50.360" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""of low-code, no-code, and AI coding assistance.""" start="00:18:54.480" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And my general view on this is that""" start="00:18:57.920" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""the arrival of these tools""" start="00:19:00.240" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""make literary programming as an immersive technique""" start="00:19:01.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""focused on teaching a broad range of skills""" start="00:19:04.320" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""even more important.""" start="00:19:08.400" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""So even with AI--or especially with AI--""" start="00:19:09.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""this kind of approach, I think, could be critical.""" start="00:19:13.080" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And that's it.""" start="00:19:16.800" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""I'm at the end of my presentation.""" start="00:19:18.440" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Thank you very much for your attention.""" start="00:19:19.840" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""And I'm looking forward to the Q&A.""" start="00:19:21.720" video="mainVideo-teaching" id="subtitle"]] +[[!template text="""Thank you.""" start="00:19:22.840" video="mainVideo-teaching" id="subtitle"]] + + + +Captioner: sachac + +<a name="teaching-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Again, second only live Q&A of the day.""" start="00:00:00.599" video="qanda-teaching" id="subtitle"]] +[[!template text="""So, things are still a bit rusty,""" start="00:00:04.339" video="qanda-teaching" id="subtitle"]] +[[!template text="""but believe me, by the end of the morning,""" start="00:00:06.339" video="qanda-teaching" id="subtitle"]] +[[!template text="""we will be well-oiled machinery.""" start="00:00:08.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""So, hi Marcus, how are you doing?""" start="00:00:12.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm fine, Thank you.""" start="00:00:14.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: I really liked, most people might have""" start="00:00:17.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""forgotten, but you started your presentation""" start="00:00:20.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""with the, in a very dark room and with this""" start="00:00:22.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""typical note of dry German humor that I""" start="00:00:26.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""particularly liked.""" start="00:00:29.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Whereas I told you we're born without humour""" start="00:00:31.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""so any sense of humour is the result of very""" start="00:00:34.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""hard work.""" start="00:00:38.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Well I can confirm therefore that your work""" start="00:00:40.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""is evident in this particular remark.""" start="00:00:44.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""So as we did before and perhaps this time""" start="00:00:47.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""more punctiliously, terrible adverb,""" start="00:00:50.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""that's why I'm an English major we will be""" start="00:00:54.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""taking questions first from the pad and then""" start="00:00:58.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""we'll be moving on to people in the BBV room.""" start="00:01:00.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""Let me just check if we have some people.""" start="00:01:03.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""We do have some people.""" start="00:01:05.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""All right, so Markus, I'm gonna ask you the""" start="00:01:06.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""questions in the pad unless you have""" start="00:01:08.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""something to remark first.""" start="00:01:11.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, oh no, no, I don't have nothing to""" start="00:01:13.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""remark. I mean, only that we're coming to the""" start="00:01:15.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""end of the term here, and I think in the""" start="00:01:17.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""paper that I wrote, I expressed doubt that""" start="00:01:20.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs was good for beginners,""" start="00:01:24.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""but I've now gone back to an interactive""" start="00:01:25.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""notebook in the class without Emacs,""" start="00:01:31.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""and I've just missed it terribly the whole""" start="00:01:34.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""term. And I think I saw you walk too,""" start="00:01:37.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""so that's kind of interesting.""" start="00:01:39.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's it.""" start="00:01:41.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. All right, well,""" start="00:01:42.270" video="qanda-teaching" id="subtitle"]] +[[!template text="""let's get started with the questions because""" start="00:01:43.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm a little worried that we might acquire""" start="00:01:45.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""debt because of the time that we have.""" start="00:01:48.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""And just to be clear, so that you also know""" start="00:01:50.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""the time at which we're supposed to be""" start="00:01:53.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""finishing, the next talk here on this track""" start="00:01:54.479" video="qanda-teaching" id="subtitle"]] +[[!template text="""is supposed to be at 10.40,""" start="00:01:57.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""which is in 13 minutes from now.""" start="00:01:59.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""All right, with that said,""" start="00:02:01.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""starting with the first questions.""" start="00:02:03.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""What tools do you use for making your slides?""" start="00:02:05.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""They are very nice and I concur.""" start="00:02:07.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""OrgReveal?""" start="00:02:17.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I use OrgReveal. It's a package,""" start="00:02:12.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""OrgReveal. I don't have the link right now,""" start="00:02:22.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""but it's an org mode package where You create""" start="00:02:26.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""some meta information and I think it's""" start="00:02:31.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""basically JavaScript, JavaScript package that""" start="00:02:35.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""will work from a bunch of different""" start="00:02:39.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""platforms, but it works particularly well""" start="00:02:45.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""from Emacs. So you use that a lot.""" start="00:02:49.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, yeah, I think it is definitely""" start="00:02:53.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""interacting with JavaScript in the background""" start="00:02:55.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""and it makes for a very clean presentation""" start="00:02:57.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""right from Emacs. I mean,""" start="00:02:59.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's not opened in Emacs unless you use a web""" start="00:03:01.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""browser in Emacs that supports such""" start="00:03:04.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""compositing but it's pretty convenient and I""" start="00:03:06.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""recommend looking into it.""" start="00:03:09.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm just going to share the URL here.""" start="00:03:15.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""So if anybody's interested.""" start="00:03:20.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, and we'll be putting all the links""" start="00:03:22.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""right now. So obviously right now,""" start="00:03:24.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""Marcus is writing inside of his own Emacs,""" start="00:03:25.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""but we also have the pad.""" start="00:03:28.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""We'll make sure that you have all the links""" start="00:03:29.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""accessible a little bit later.""" start="00:03:31.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay, moving on to the next question,""" start="00:03:32.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""why MDPI?""" start="00:03:34.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh yeah, well that's a little bit of a longer""" start="00:03:36.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""answer, kind of boring I suppose.""" start="00:03:40.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""So when I came here to the US,""" start="00:03:42.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""I used to teach a lot of graduate courses and""" start="00:03:45.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""I had to suddenly teach a lot of""" start="00:03:47.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""undergraduate courses,""" start="00:03:49.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""which partly motivated this move because it""" start="00:03:50.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""made me realize, as I said in the""" start="00:03:53.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""presentation, how little the students""" start="00:03:55.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""understand of the underlying infrastructure""" start="00:03:58.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""and how important it is for them to work with""" start="00:04:00.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""an IDE that doesn't make coding especially""" start="00:04:01.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""convenient, but that teaches them a lot of""" start="00:04:06.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""the stuff on the side,""" start="00:04:09.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, while still presenting a very""" start="00:04:10.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""smooth environment, which developers""" start="00:04:13.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""appreciate as well. So I came here and I used""" start="00:04:17.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""to publish like 4 or 5 research papers per""" start="00:04:22.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""year, but I didn't have the time.""" start="00:04:24.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I was contacted by MDPI.""" start="00:04:26.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""And it's 1 of those research paper mills,""" start="00:04:30.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""which seem to be springing up where authors""" start="00:04:34.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""can, really the institutions of the authors""" start="00:04:37.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""have to pay so that they can publish,""" start="00:04:40.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""right? So it's not really,""" start="00:04:42.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""and I checked them out and they seem to be""" start="00:04:44.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""proper peer review publishing,""" start="00:04:46.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""but to be absolutely sure I said,""" start="00:04:47.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""well, you can have my article,""" start="00:04:49.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""but of course for free,""" start="00:04:51.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm not going to pay for you to publish it.""" start="00:04:52.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""And so that's what they did.""" start="00:04:55.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""They invited me and I submitted the paper and""" start="00:04:57.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""it was a very good process.""" start="00:05:01.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""That was a very, it was a good peer review""" start="00:05:02.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""critique. So I changed the paper quite a bit.""" start="00:05:04.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's still not a great paper.""" start="00:05:06.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's just a small case study.""" start="00:05:07.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's the kind of thing that you have a lot""" start="00:05:09.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""in medical research where also people don't""" start="00:05:12.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""have a lot of time to do research,""" start="00:05:14.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""proper research, which takes a very long""" start="00:05:17.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""time. And so that's why MDPI.""" start="00:05:19.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""And they are in the most of the relevant""" start="00:05:21.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""citation indices. So they are reputable""" start="00:05:24.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""enough. I mean, normally I would say for""" start="00:05:27.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""anybody who does anything like this,""" start="00:05:30.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""you might not even want to bother with the""" start="00:05:33.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""journal these days anymore.""" start="00:05:36.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""You just go straight to ArcSci,""" start="00:05:37.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""put out your preprint.""" start="00:05:40.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""And in fact, what will happen if you're on""" start="00:05:41.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""ArcSci, if somebody finds it interesting,""" start="00:05:44.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""they're going to reach out to you to capture""" start="00:05:46.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""your paper and have it published under their""" start="00:05:49.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""heading. Oh yeah, actually the other reason""" start="00:05:54.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""why I wanted MDPI is because there were open""" start="00:05:56.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""access from the start.""" start="00:05:58.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""And I really like, if you go to the paper,""" start="00:06:00.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""I really like the way it's presented.""" start="00:06:02.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I looked at a few papers and I thought""" start="00:06:04.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's a really nice online access,""" start="00:06:07.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""online open access solution.""" start="00:06:12.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's the long answer,""" start="00:06:15.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""sorry.""" start="00:06:17.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: No, that was perfectly fine and you provided""" start="00:06:18.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""many details so it was far from a boring""" start="00:06:21.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""answer, let me reassure you.""" start="00:06:23.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""Moving on to the question,""" start="00:06:26.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""we only have about 8 minutes left so I'd like""" start="00:06:27.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""to finish those 2 questions and let people in""" start="00:06:29.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""the audience speak. So do you think immersion""" start="00:06:31.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""can be achieved on teaching other students""" start="00:06:35.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""with different backgrounds?""" start="00:06:37.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh yeah, that's a really good question.""" start="00:06:39.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""I had actually a discussion last night with""" start="00:06:45.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""my wife in bed about this,""" start="00:06:48.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""about the use of textbooks which are famously""" start="00:06:49.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""non-immersive because they're consumed away""" start="00:06:53.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""from the class. Very rarely you sit in class""" start="00:06:55.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""like people used to do and read something""" start="00:06:58.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""together. Maybe they did that in English.""" start="00:07:00.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""And that is of course instantly immersive.""" start="00:07:02.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""But in computer science,""" start="00:07:05.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""many other topics, psychology,""" start="00:07:06.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, biology and so on,""" start="00:07:08.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""you cannot get immersion,""" start="00:07:10.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""at least not in a lecture theater.""" start="00:07:12.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""You get it in a lab because people solve the""" start="00:07:15.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""problem and then they're immersed in it.""" start="00:07:16.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""So, but my answer would be,""" start="00:07:18.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""yes, I can think totally immersion can be""" start="00:07:20.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""achieved anywhere, but what you have to do is""" start="00:07:22.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""you have to not lecture and you have to let""" start="00:07:25.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""students do work as you go along.""" start="00:07:29.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I used to lecture quite a bit because I""" start="00:07:31.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""was an insecure young professor and just read""" start="00:07:33.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""all my slides and my notes as I used to use,""" start="00:07:38.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""as everybody uses to when they start.""" start="00:07:41.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""But as I went along, I realized,""" start="00:07:44.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, I've got such a grasp of the topic""" start="00:07:46.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""that I really everything I do now is prepared""" start="00:07:48.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""in Emacs in an interactive way so I start""" start="00:07:51.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""saying a few words and then the students""" start="00:07:53.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""immediately we get to work and they seem to""" start="00:07:55.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""love that because in most of the other""" start="00:07:58.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""classes people just talk at them they take""" start="00:07:59.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""their stuff home and work at home,""" start="00:08:01.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""which is of course is super.""" start="00:08:03.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""But most of the students,""" start="00:08:05.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""if they have, in at least in a liberal arts""" start="00:08:06.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""college, they have 5 other classes,""" start="00:08:08.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""they do not take a lot of time to do the work""" start="00:08:10.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""at home. So it's, you know,""" start="00:08:13.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""yeah, It's kind of different.""" start="00:08:16.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's kind of risky, yeah,""" start="00:08:18.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""but the main point I was trying to make is""" start="00:08:20.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs and Org Mode really helped me to boil""" start="00:08:22.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""that interactive session down to something""" start="00:08:26.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""that will work in the classroom.""" start="00:08:29.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't have to jump around between""" start="00:08:30.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""platforms. For example,""" start="00:08:32.559" video="qanda-teaching" id="subtitle"]] +[[!template text="""this term, and I didn't use Emacs in the""" start="00:08:33.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""class with the students,""" start="00:08:35.799" video="qanda-teaching" id="subtitle"]] +[[!template text="""I had to render using a package.""" start="00:08:37.159" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's actually a very nice package called,""" start="00:08:40.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""what's it called? Ox, what's it called?""" start="00:08:42.299" video="qanda-teaching" id="subtitle"]] +[[!template text="""Ox, Ox IPNB. It's called Ox IPNB.""" start="00:08:46.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""So what it does is it renders in the usual""" start="00:08:50.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""way with Emacs, Org Mode does,""" start="00:08:53.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""renders interactive notebook files in""" start="00:08:55.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""Jupyter. And that took me a lot of time.""" start="00:08:58.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""And I immediately noticed as soon as the""" start="00:09:01.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""teacher has to fight platforms themselves,""" start="00:09:03.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""they take the ball off the immersion task,""" start="00:09:06.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, to keep the student on the problem.""" start="00:09:09.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah. Oh, go on, please.""" start="00:09:16.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""Yeah. I was going to remark that.""" start="00:09:19.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: So yeah, absolutely. Yeah,""" start="00:09:12.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""I suppose it might be MIT style.""" start="00:09:23.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""Big difference though,""" start="00:09:25.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""my classes are very, very short,""" start="00:09:26.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""small. So I have like between 10 and 15""" start="00:09:27.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""students per class. 1 of the reasons why I""" start="00:09:30.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""went to this college is because I was fed up""" start="00:09:32.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""teaching, trying to teach hundreds of""" start="00:09:35.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""students. Okay, sorry,""" start="00:09:36.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""do some of your students nag you about using""" start="00:09:40.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""VS Code? Yes, they do,""" start="00:09:42.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""but their arguments aren't very good.""" start="00:09:43.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""They hadn't really compared Emacs and VS""" start="00:09:46.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""Code. And what I do, actually I use RStudio""" start="00:09:48.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""as well, demonstrate VS Code,""" start="00:09:51.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""RStudio and Emacs. And I think it's very easy""" start="00:09:53.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""for them to see. And there are some videos""" start="00:10:01.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""about that as well, how much easier it is to""" start="00:10:02.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""get into Emacs to limit your investments to""" start="00:10:05.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""what you actually wanna do.""" start="00:10:08.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""When the problem with VS Code is it comes at""" start="00:10:09.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""you with this sort of Microsoft store""" start="00:10:11.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""ideology, like a gazillion plugins,""" start="00:10:14.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""which if you're a developer,""" start="00:10:17.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know what you want.""" start="00:10:18.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""And I mean, it's a bit like VS Code is like""" start="00:10:21.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""Google search for as if you were programming""" start="00:10:24.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""in Google search, a complete waste of time.""" start="00:10:27.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""Having said that, I've also seen some videos""" start="00:10:31.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""with people who really know how to use VS""" start="00:10:33.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""Code. And of course, you know,""" start="00:10:36.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""if somebody gets on the inside of a tool and""" start="00:10:37.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""spends upwards of a thousand hours in the""" start="00:10:41.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""tool, they'll be great.""" start="00:10:44.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""But that's not true for beginners.""" start="00:10:45.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""So hold on, there's another 1.""" start="00:10:48.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm reading them, sorry.""" start="00:10:51.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""Leo, I can see the questions,""" start="00:10:52.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""but you may wanna turn them around.""" start="00:10:55.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: No, No, no, please, please,""" start="00:10:59.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""you're free to read them.""" start="00:11:00.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm on your fasted computer.""" start="00:11:01.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Some of you, too, that's the nagging.""" start="00:11:02.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""I teach simple programming at a vocational""" start="00:11:04.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""school, and even after showing the students""" start="00:11:06.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Vim, Vim, of course, is a contender,""" start="00:11:07.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""and now I'm telling them I prefer Emacs.""" start="00:11:09.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""They still all choose VS Code as their""" start="00:11:12.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""editor. Well, okay, what I did is mandatory.""" start="00:11:14.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""I didn't let them choose.""" start="00:11:17.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's what I did. And I thought that was""" start="00:11:19.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""quite risky, but in the end,""" start="00:11:21.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""it turns out that the best students loved it""" start="00:11:23.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""and keep using Emacs in their jobs.""" start="00:11:26.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""I hear that now. The students in the middle""" start="00:11:28.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""were probably the ones who would pick VS Code""" start="00:11:33.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""because every tutorial they see,""" start="00:11:35.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""they learn a lot through YouTube and so""" start="00:11:38.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""everything they see is in VS Code.""" start="00:11:40.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""If there were more tutorials in Emacs,""" start="00:11:42.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm trying to make some,""" start="00:11:44.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""then of course that would be different.""" start="00:11:45.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""But I think it's partly brainwashing and""" start="00:11:49.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""partly, of course, the other reason is there""" start="00:11:53.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""is no online Emacs. They use VS Code Dev,""" start="00:11:55.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""right? And that's, of course,""" start="00:12:00.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""they use an online cloud solution.""" start="00:12:03.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""Like most of the students in the high school,""" start="00:12:05.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""I teach Python in the high school right now,""" start="00:12:07.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""and the students only get Chromebooks that""" start="00:12:09.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""are completely cut down to nothing.""" start="00:12:11.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""They cannot have Linux on their Chromebooks.""" start="00:12:15.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""So what are they supposed to do?""" start="00:12:18.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""Their only choice really is Repl.""" start="00:12:19.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""Repl.com is a possibility for them to do""" start="00:12:21.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""that. But, you know, or they use code spaces,""" start="00:12:24.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""which is VS Code in GitHub.""" start="00:12:27.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Marcus, sorry for the interruption.""" start="00:12:31.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""We only have about 2 minutes left.""" start="00:12:32.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""So if you could take 1 question,""" start="00:12:34.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""that would be great. Sorry.""" start="00:12:35.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: So. I'm observing the same behavior.""" start="00:12:30.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""Any more tutorials will be most welcome.""" start="00:12:38.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Yes, I I'd love to. I spent the rest of my""" start="00:12:40.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""days on this earth making Emacs tutorials if""" start="00:12:43.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: tutorials if I can.""" start="00:12:48.263" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I can. Thank you. DMAX Thank you.""" start="00:12:46.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Approach to handling EDA.""" start="00:12:49.769" video="qanda-teaching" id="subtitle"]] +[[!template text="""Oh yeah, with white data sets.""" start="00:12:51.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""Well, that's a good point.""" start="00:12:56.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: So Markus, I don't want to put you under too""" start="00:13:01.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: answer the question. The handling EDA,""" start="00:13:03.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know, if you look at the comments,""" start="00:13:07.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think these are on YouTube,""" start="00:13:08.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""right, at some point, Leo?""" start="00:13:09.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: much pressure to Oh yes,""" start="00:13:03.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""they will definitely be on YouTube.""" start="00:13:12.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""answer the""" start="00:13:14.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm going to question you asked about the""" start="00:13:13.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""EDA, that's too long to go into right now,""" start="00:13:15.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""plus my cat is here. So I'm going to answer""" start="00:13:17.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""that in the comments, all right?""" start="00:13:21.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Start up the conversation.""" start="00:13:23.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""Yes, I'm going to post that in the comments""" start="00:13:24.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""as well.""" start="00:13:27.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure, but Also, just to be clear,""" start="00:13:29.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""Marcus, you're going to continue the""" start="00:13:31.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""discussion. It's just a stream that will be""" start="00:13:32.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""moving on to the next talk in about 50""" start="00:13:35.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""seconds. Marcus, feel free to keep answering""" start="00:13:37.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""questions inside this room.""" start="00:13:39.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""You also have people, we're going to check""" start="00:13:40.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""aside with the stream,""" start="00:13:42.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""we have a number of people in the room.""" start="00:13:44.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""You can see them on the left on the button""" start="00:13:46.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""who are probably going to unmute themselves""" start="00:13:48.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""and ask you questions.""" start="00:13:51.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""So feel free to stay in the room,""" start="00:13:52.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""answer as lengthy as you want the questions""" start="00:13:54.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""because that's more content for us and we""" start="00:13:57.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""love it obviously. But it's just that I""" start="00:13:58.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""personally will be leaving to take care of""" start="00:14:01.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""the rest of the talks.""" start="00:14:03.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""So, Markus, do you have any last words before""" start="00:14:04.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""we move on?""" start="00:14:06.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: No, just thank you for this wonderful...""" start="00:14:08.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm going to copy this.""" start="00:14:09.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't think I listened to the talk by""" start="00:14:11.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""Sascha yet, but I'm going to do that because""" start="00:14:13.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""I really want to copy this conference format.""" start="00:14:15.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think that is the conference format of the""" start="00:14:18.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""future, using volunteers to put together""" start="00:14:19.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""conferences. So I can't wait.""" start="00:14:21.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""Nobody wants to come to Batesville where I""" start="00:14:23.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""am, but thank you so much.""" start="00:14:24.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""That was really super professional.""" start="00:14:25.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""I love that.""" start="00:14:27.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Great. Okay, we are almost perfectly on time.""" start="00:14:28.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think we caught up about 1 or 2 seconds""" start="00:14:32.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""into the last sentence you said but otherwise""" start="00:14:35.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""we were splendidly on time.""" start="00:14:37.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""So thank you so much Marcus.""" start="00:14:38.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: You're welcome. So I wanted to say a little""" start="00:14:40.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""bit about that question about handling EDA.""" start="00:14:43.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Can you see the chat on the left?""" start="00:14:51.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""Because people have started asking questions""" start="00:14:52.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""on the left. Can you see the chat?""" start="00:14:54.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I mean I used email. Sorry,""" start="00:14:49.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: So you've got multiple avenues for questions.""" start="00:14:58.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: You can""" start="00:15:01.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: still answer questions in the chat.""" start="00:15:01.166" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: sorry, sorry. Okay, I'm just going to go into""" start="00:14:57.053" video="qanda-teaching" id="subtitle"]] +[[!template text="""that. Yeah, that's fine.""" start="00:15:03.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure, I'll need to go now.""" start="00:15:05.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""So Marcus, have a great day and I'll probably""" start="00:15:06.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""see you later.""" start="00:15:08.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, thank you. Sorry.""" start="00:15:10.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""Bye bye. There was a question about the,""" start="00:15:13.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""I wanted to ask the answer the question about""" start="00:15:15.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""EDA, large data sets. So,""" start="00:15:17.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, I teach undergraduate now,""" start="00:15:21.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""so there's a limited number of courses,""" start="00:15:25.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""like where I use, actually have big data""" start="00:15:28.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""issues. And I mean I'm not saying that I'm""" start="00:15:32.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""not that I don't run into performance issues""" start="00:15:36.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""with Emacs. I obviously do.""" start="00:15:38.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""But like the performance issues in Emacs are""" start="00:15:40.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""comparable to performance issues for example""" start="00:15:43.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""when using R. In R everything is in memory So""" start="00:15:45.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""you are limited to the available,""" start="00:15:49.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""what is it, 2 gigabyte or whatever memory of""" start="00:15:52.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""your computer. So you would have to find""" start="00:15:56.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""other infrastructure solutions anyway.""" start="00:15:58.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""The advantage of using Emacs is that I can,""" start="00:16:00.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""within 1 Org Mode file,""" start="00:16:05.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""connect to an external database.""" start="00:16:08.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""I can even, as probably most of you know,""" start="00:16:11.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""I can even use it as a text-based web browser""" start="00:16:13.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""if I want to. So I could look at individual""" start="00:16:17.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""files. And the other point of EDA of course""" start="00:16:22.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""is that you're not supposed to look at the""" start="00:16:26.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""tables. You're supposed to get the basic""" start="00:16:30.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""frame of your data. Is there a header?""" start="00:16:38.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""What's the approximate size and stuff like""" start="00:16:41.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""that? And then you're supposed to import it""" start="00:16:43.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""into a data frame ideally,""" start="00:16:45.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""at least in portions. And I don't think,""" start="00:16:47.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""yeah, so that's it. But the full answer is""" start="00:16:53.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""that I have not done big data analysis in""" start="00:16:56.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs. So that's actually a really nice""" start="00:16:59.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""extension. I'm going to write that down as a""" start="00:17:02.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""thing to talk about in some future talk.""" start="00:17:06.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay, so ADA with big data.""" start="00:17:08.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""Even though interesting would be to know what""" start="00:17:11.599" video="qanda-teaching" id="subtitle"]] +[[!template text="""kind of size of data you're actually talking""" start="00:17:13.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""about. So I don't know,""" start="00:17:16.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""what is it, upwards of 1 terabyte or""" start="00:17:20.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""something like that, I don't know.""" start="00:17:25.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""That'd be interesting to know.""" start="00:17:27.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""Haven't done that in class.""" start="00:17:31.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""So there's another question.""" start="00:17:39.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""Proportion of students that you think would""" start="00:17:41.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""keep on using Emacs after your course?""" start="00:17:43.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's not a difficult question,""" start="00:17:44.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""because as I said, I have very small classes.""" start="00:17:46.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""I've been here since 2 years.""" start="00:17:47.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I'm in touch with almost all the students.""" start="00:17:49.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""In fact, I'm getting them work after school.""" start="00:17:51.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""So that's really cool.""" start="00:17:54.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""And everybody who took to Emacs really""" start="00:17:56.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""seriously, so probably about 25% or so keep""" start="00:18:00.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""using Emacs after, afterwards.""" start="00:18:03.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, even in the job,""" start="00:18:06.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""right, in the professional field.""" start="00:18:08.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""Who, those who keep using Emacs after the""" start="00:18:10.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""course, I think the number is greater,""" start="00:18:13.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""but I have not followed up on that.""" start="00:18:15.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""I have to, my guess is more than half,""" start="00:18:16.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""I would say, half or more than half.""" start="00:18:23.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""Oh, Aaron, thank you so much.""" start="00:18:26.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's very sweet. But I didn't think the""" start="00:18:27.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""presentation was great.""" start="00:18:31.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""I was thinking about redoing it,""" start="00:18:32.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""but this is actually the first take.""" start="00:18:33.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""It was late, I had lots of other stuff to do.""" start="00:18:36.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think what I'm more interested in than""" start="00:18:40.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""papers is probably this idea of making""" start="00:18:44.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs-based data science videos because there""" start="00:18:48.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""aren't many out there.""" start="00:18:51.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""Most of the people who do,""" start="00:18:52.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""and computer science, most people who do that""" start="00:18:54.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""are not either developers and certainly not""" start="00:18:57.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""teachers. So I think that's a good idea.""" start="00:18:59.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm gonna pick that up.""" start="00:19:02.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""So to do more Remax based data science videos""" start="00:19:03.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""Is there anything else?""" start="00:19:19.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""More people. There are some people here in""" start="00:19:20.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""the room still.""" start="00:19:22.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: If you do a PSVL on work.""" start="00:19:23.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""What? Or wiki. What's my YouTube channel?""" start="00:19:27.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, yeah, I'm going to give you the,""" start="00:19:34.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""I've got a bunch of different YouTube""" start="00:19:36.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""channels. I'm going to put them in the""" start="00:19:38.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""comments to my talk. Hold on,""" start="00:19:40.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""the 1 where I have the latest Emacs videos,""" start="00:19:43.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""you find my name, there's nobody in the world""" start="00:19:46.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""with my name. So if you look for Gerten Krag""" start="00:19:48.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""on YouTube, then you will find it.""" start="00:19:52.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""But I got a bunch of them.""" start="00:19:59.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""Hold on, I'm going to give you the...""" start="00:20:00.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""My channel. Okay, This 1 has only got a few""" start="00:20:13.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""videos. But so there's 1 with a lot more.""" start="00:20:20.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""Few recent videos. And I'm going to post""" start="00:20:25.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""more. Other ones in the comments of this""" start="00:20:32.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""video. Okay, what else?""" start="00:20:41.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm trying to find my way back to the button.""" start="00:20:48.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay, cool. Oh, yes, thank you.""" start="00:20:55.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""I will. That's very good.""" start="00:20:59.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""Thank you so much. Of course,""" start="00:21:01.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""I use Vork. I hadn't even thought of it.""" start="00:21:03.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""Very good. It's interesting,""" start="00:21:06.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""that's something that comes to my mind.""" start="00:21:15.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""When I was a young student,""" start="00:21:18.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""right, people who used Emacs and the web""" start="00:21:19.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""wasn't particularly large.""" start="00:21:24.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""So the volunteers would automatically make""" start="00:21:25.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""videos but not for commercial purposes.""" start="00:21:29.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""Now you have an army of people who make""" start="00:21:31.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""commercial videos and the videos are usually""" start="00:21:34.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""good for the first 10% of every content,""" start="00:21:38.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""but as soon as it gets a little more""" start="00:21:41.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""difficult, they either don't know what to do""" start="00:21:42.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""anymore or they don't do it because it's not""" start="00:21:44.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""commercially viable. The number of people who""" start="00:21:48.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""move on is gets smaller and smaller and""" start="00:21:50.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""smaller. So there's no commerce anymore.""" start="00:21:53.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""But when I was a student,""" start="00:21:55.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""pretty much all the documentation everywhere""" start="00:21:58.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""was created by volunteers,""" start="00:22:01.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""just like this conference or like anything in""" start="00:22:02.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""org mode. And that doesn't seem to be much of""" start="00:22:04.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""a trend anymore, but maybe we can resurrect""" start="00:22:09.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""it. So yes, I'm definitely gonna contribute""" start="00:22:12.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""to that. Multiple people are typing here.""" start="00:22:22.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""Oh, sorry. Yes. Thank you so much.""" start="00:22:30.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm gonna put that, I'm gonna rectify that in""" start="00:22:37.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""the comment. Having said that,""" start="00:22:40.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""I am not 100% sure that I didn't lie here.""" start="00:22:45.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""May just be because I didn't have much time""" start="00:22:50.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""to put the presentation together.""" start="00:22:52.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""And it's perfectly possible that that's""" start="00:22:54.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""actually Google slides and not all reveal.""" start="00:22:56.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""In the classroom when I present and just do""" start="00:23:00.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""lectures, I always do reveal,""" start="00:23:02.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""but most of the time I do a tree slide.""" start="00:23:04.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's the quickest way to do it for me.""" start="00:23:08.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""So, so presentation. Hold on,""" start="00:23:10.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""Let me just copy this 1.""" start="00:23:15.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""Make sure that this doesn't get lost.""" start="00:23:17.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""Thank you so much for that.""" start="00:23:21.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""And presentations in class.""" start="00:23:24.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""I use sometimes org-present,""" start="00:23:28.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""but there are issues with the font sometimes.""" start="00:23:30.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""I use Treeslide most of the time and Org""" start="00:23:33.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: tool.""" start="00:23:44.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Reveal. But this 1 is my top Of course,""" start="00:23:36.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""this is not org, so forget about that.""" start="00:23:46.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay. Yeah, so you can send me your,""" start="00:24:02.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""you've got my email, I think,""" start="00:24:10.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""on the end, if you're interested in following""" start="00:24:12.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""up or letting me know about your stuff.""" start="00:24:14.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""It might be interesting to,""" start="00:24:16.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know, might be interesting to put""" start="00:24:18.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""together a conference or a little seminar""" start="00:24:20.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""just for educators.""" start="00:24:22.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""DF is still typing, I'm waiting.""" start="00:24:37.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm waiting.""" start="00:24:39.025" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Actually, our mod maintainer,""" start="00:24:44.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""Bastien, was talking about possibility to""" start="00:24:46.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""have just org mod conference.""" start="00:24:52.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""But the question is, is it worth making a""" start="00:24:55.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. A whole separate 1 what?""" start="00:24:54.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: whole separate 1? A whole separate org""" start="00:24:59.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, I see. Yeah, probably would be.""" start="00:25:07.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""Actually.""" start="00:25:10.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: dedicated conference. It's just like you see""" start="00:25:05.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""how EmacsConf is well done.""" start="00:25:13.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""So it's like creating anything that has good""" start="00:25:16.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes. No, I think that's a good idea.""" start="00:25:22.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""Yeah, I mean.""" start="00:25:25.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: is tricky. I mean, Okay,""" start="00:25:19.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's anywhere, like half of Emacs is anywhere""" start="00:25:30.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""remote. So it's almost the same.""" start="00:25:32.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Well, I suppose at this point,""" start="00:25:37.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know if that's what you mean.""" start="00:25:40.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""Org Mode is probably what attracts people to""" start="00:25:41.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs in the first place.""" start="00:25:45.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""Like, I suppose Org Roam is the,""" start="00:25:47.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""maybe the biggest 1 for people even outside""" start="00:25:51.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""of computer science. I use Org.ROM""" start="00:25:54.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""for everything. But there are...""" start="00:25:58.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, the thresholds...""" start="00:26:04.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think that the maintainer or maybe the""" start="00:26:06.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""creator of Org.MODE has claimed and said for""" start="00:26:07.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""many years that Org Mode itself doesn't""" start="00:26:10.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""actually necessarily need Emacs.""" start="00:26:13.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""You can have it as a completely separate""" start="00:26:14.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""application as well. But I,""" start="00:26:17.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""for a number of reasons,""" start="00:26:19.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't like that. I really like the idea to""" start="00:26:21.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: why- The current strategy is that It has to""" start="00:26:28.434" video="qanda-teaching" id="subtitle"]] +[[!template text="""be Emacs because the configurability is 1 of""" start="00:26:30.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""the strong points anyway.""" start="00:26:33.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: have it inside Emacs. The reason That's true.""" start="00:26:23.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: You cannot make a separate application.""" start="00:26:35.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""No,""" start="00:26:37.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: that's true. I was going to say that.""" start="00:26:38.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""The thing is you use the flexibility.""" start="00:26:39.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""Plus, you also use the,""" start="00:26:41.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know if that's the right word,""" start="00:26:43.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""but you use there's something about the free""" start="00:26:46.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""ideology of Emacs that is what attracted me""" start="00:26:48.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""to it in the first place when I was younger""" start="00:26:52.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""and that I find even more important now.""" start="00:26:56.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""So what they say the community aspect,""" start="00:27:00.765" video="qanda-teaching" id="subtitle"]] +[[!template text="""the reason, the main reason why Python is so""" start="00:27:06.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""big today, really. So yeah.""" start="00:27:08.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: But in terms of going out of Emacs,""" start="00:27:15.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's org syntax that is supposed to be like""" start="00:27:17.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""breaking out of Emacs.""" start="00:27:21.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""So like there's a plan to lay out the actual""" start="00:27:24.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""standard document so that you can register""" start="00:27:28.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""the format officially.""" start="00:27:31.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah. Yeah, I think I've heard that too.""" start="00:27:23.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""I've not followed up on it much.""" start="00:27:34.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know what the,""" start="00:27:36.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, that probably would,""" start="00:27:39.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""it would strength, very likely,""" start="00:27:41.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""if you do that, it would at least for a short""" start="00:27:43.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""time, strengthen org mode and weaken emacs.""" start="00:27:45.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know what other examples,""" start="00:27:49.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""if there are other examples of applications""" start="00:27:51.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""pulled out of IDEs like that.""" start="00:27:55.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm not aware of any others.""" start="00:27:57.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Actually, people are trying to make""" start="00:28:00.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""three-seater drama. People are trying to make""" start="00:28:02.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""like some external parsers,""" start="00:28:04.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""a lot of them. And a lot of stuff is done on""" start="00:28:06.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""mobile part. I can draw it to iOS,""" start="00:28:10.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""especially recently. So things that are Emacs""" start="00:28:13.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""independent are demanded.""" start="00:28:17.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay, yeah. I have no doubt that there is a""" start="00:28:20.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Especially in the environment,""" start="00:28:25.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""like every time.""" start="00:28:27.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: demand. Yeah. I mean, I didn't get into that""" start="00:28:23.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""very much. I have some of my students have 0""" start="00:28:30.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""affinity with computers.""" start="00:28:35.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""They really don't know their way around their""" start="00:28:38.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""computers at all. And so for them,""" start="00:28:39.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""It is quite important to learn how to find""" start="00:28:46.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""your way around Emacs because it's like a""" start="00:28:51.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""little operating system,""" start="00:28:56.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""but it's not. It's an operating system""" start="00:28:57.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""without much of the obscurity.""" start="00:29:00.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""And the alternative to that would be to""" start="00:29:05.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""simply let them work only on the command""" start="00:29:07.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""line, which is another possibility.""" start="00:29:10.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""But, you know, there of course you are""" start="00:29:13.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""limited with regard to if you want to swap""" start="00:29:16.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""languages. So for example,""" start="00:29:20.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""quite often I find myself in the situation I""" start="00:29:23.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""teach data science in R and Python and in""" start="00:29:26.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs org mode I can demonstrate both of""" start="00:29:28.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""these side by side in the same file.""" start="00:29:31.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""And that's a great advantage.""" start="00:29:35.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""Not to overburden the students when they are""" start="00:29:39.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""at the beginning with things that you don't""" start="00:29:43.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""want them to necessarily learn about.""" start="00:29:45.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""And plus the thing what I like as a graduate""" start="00:29:48.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""student when I stepped onto Emacs was that it""" start="00:29:51.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""was infinite possibilities to lose myself in""" start="00:29:54.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""Emacs and you know go on and learn more stuff""" start="00:30:00.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""about it. But it's such a long time ago that""" start="00:30:03.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""I barely dare to mention it anymore.""" start="00:30:07.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: For command line, actually,""" start="00:30:11.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's since the Jupyter notebooks and that""" start="00:30:12.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""Google thing they are running.""" start="00:30:17.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's getting so popular that it's clear that""" start="00:30:20.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""command line is just losing in popularity in""" start="00:30:23.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: well, yes and no. I mean,""" start="00:30:28.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: this. Yeah, of course,""" start="00:30:26.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""Not the usage. People are still using it,""" start="00:30:36.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""obviously.""" start="00:30:38.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: I mean, in Google Colab,""" start="00:30:39.520" video="qanda-teaching" id="subtitle"]] +[[!template text="""only the paid version allows you to go to the""" start="00:30:41.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""terminal and use the command line.""" start="00:30:43.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""But of course, the traction,""" start="00:30:46.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""and I think that's kind of interesting,""" start="00:30:48.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""1 of the reasons why IPython or any of the""" start="00:30:50.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""Jupyter notebooks are so cool is because you""" start="00:30:54.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""can use a lot of shell commands from the""" start="00:30:56.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""IPython shell. There's a whole bunch of magic""" start="00:31:00.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""commands which are quite powerful.""" start="00:31:05.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean the the 1 that comes to mind is time.""" start="00:31:07.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""The time command for example you know gives""" start="00:31:10.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""you a really nice performance quick""" start="00:31:12.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""performance check. There's a bunch of""" start="00:31:15.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""different, I think probably close to a""" start="00:31:17.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""hundred magic commands that you can use in""" start="00:31:19.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""Jupyter. But I don't know JupyterLab too""" start="00:31:22.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""well, but I noticed that the companies that""" start="00:31:25.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""do online training, And they are usually the""" start="00:31:28.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""ones that are closest to what beginners want,""" start="00:31:31.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""especially in business.""" start="00:31:34.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""And what those companies do is they,""" start="00:31:36.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, they take, they take JupyterLab and""" start="00:31:38.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""turn it into a presentation of their own.""" start="00:31:41.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""Another 1 is Notable, notable.io.""" start="00:31:43.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""That's another 1. They took JupyterLab and""" start="00:31:46.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""turned it into something commercial.""" start="00:31:49.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's boosted up a little bit.""" start="00:31:51.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""And so the shell inside the JupyterLab has""" start="00:31:55.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""some of the most more important shell""" start="00:32:00.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""properties. And so people still use the""" start="00:32:03.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""command line without knowing that they use""" start="00:32:05.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""the command line. But I also like doing,""" start="00:32:07.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""how do I use org-roam?""" start="00:32:13.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""Well, I use it, I do not have not used it""" start="00:32:19.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""with the students yet,""" start="00:32:22.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""only the best students have sort of seen me""" start="00:32:23.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""use it and copied it. But I use it probably""" start="00:32:25.020" video="qanda-teaching" id="subtitle"]] +[[!template text="""in a very naive, trivial way.""" start="00:32:29.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""I can't say that I am,""" start="00:32:32.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""that I have a very sophisticated use.""" start="00:32:34.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""I basically, I like the fact that,""" start="00:32:37.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, it's built on the original concept of""" start="00:32:39.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""the, with the German word,""" start="00:32:43.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Zettelkasten, right? Which is that you do not""" start="00:32:44.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""have to think about a taxonomy because as you""" start="00:32:48.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""move along, your taxonomy changes all the""" start="00:32:50.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""time. You know, what you think is important""" start="00:32:53.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""at the beginning, your root node,""" start="00:32:55.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""as you go along, you realize,""" start="00:32:57.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""oh, that's not the root node at all.""" start="00:32:58.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""There's a higher level and a higher level.""" start="00:33:00.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""And some of the lower levels are at the lower""" start="00:33:02.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""level, actually the higher level.""" start="00:33:04.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""So you're beginning to create hierarchies""" start="00:33:06.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""that are out of date as soon as you create""" start="00:33:10.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""the hierarchy. So what is the idea of the""" start="00:33:14.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""tittle custom is that anything that comes to""" start="00:33:16.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""your mind you can throw in the custom the box""" start="00:33:18.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""it literally means Box of notes and That's""" start="00:33:21.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""what I appreciate about it.""" start="00:33:26.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I create a I create a note pretty much for""" start="00:33:27.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""anything I do, but I've only used it for""" start="00:33:32.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""about a year and a half or so,""" start="00:33:35.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""or grown, maybe a year.""" start="00:33:38.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I can see that I'm coming up against the""" start="00:33:40.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""Zettelkasten or note box problems,""" start="00:33:43.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""which is that I've got so many notes now that""" start="00:33:47.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""unless I have clever aliases,""" start="00:33:50.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""there is a chance that I might forget that I""" start="00:33:54.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: That's why you need meta notes.""" start="00:33:58.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: have a note. So I need a- Yes,""" start="00:33:56.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: In other words, a summarization is important,""" start="00:34:02.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""no matter what system you use.""" start="00:34:04.940" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: yes. But what I'm trying to say is that's a""" start="00:34:01.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""different approach than hierarchies,""" start="00:34:09.739" video="qanda-teaching" id="subtitle"]] +[[!template text="""right? It's the same, it's the same,""" start="00:34:11.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's the same principle as a relational""" start="00:34:13.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""database versus a hierarchical database.""" start="00:34:16.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""Same thing. So, yeah, and I've not used that.""" start="00:34:19.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""I've not really used, actually I have cut""" start="00:34:23.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""meta notes, of course I do.""" start="00:34:25.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""So notes that point to other notes.""" start="00:34:27.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Yes, of course. I use those.""" start="00:34:29.487" video="qanda-teaching" id="subtitle"]] +[[!template text="""I have not taught that part to the students""" start="00:34:35.412" video="qanda-teaching" id="subtitle"]] +[[!template text="""because I do project work with the students,""" start="00:34:38.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""but there's only so much time.""" start="00:34:45.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm already, I mean, already,""" start="00:34:46.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't think there's any class that where I""" start="00:34:48.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""am able to use more than 30% of my material.""" start="00:34:51.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""And the reason is that when the students come""" start="00:34:55.880" video="qanda-teaching" id="subtitle"]] +[[!template text="""to class, which is I pointed out in the""" start="00:34:57.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""video, they know so little.""" start="00:34:59.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""And most of the students,""" start="00:35:01.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""at least in liberal arts,""" start="00:35:03.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""spend just too little time outside of class,""" start="00:35:04.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""getting there, you know,""" start="00:35:10.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""drilling down into the,""" start="00:35:11.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""into the, into the infrastructure,""" start="00:35:13.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""into the work. Only, only the best students""" start="00:35:14.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""do that. The ones that really catch fire.""" start="00:35:17.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Don't you have something like a course""" start="00:35:20.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""project at the end?""" start="00:35:22.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, I have course, not at the end.""" start="00:35:24.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""I use Scrum. Maybe I shouldn't,""" start="00:35:25.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""but I've used Scrum for many years.""" start="00:35:27.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I have course projects that start at the""" start="00:35:30.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""beginning and they do sprint reviews every 3""" start="00:35:32.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""or 4 weeks. So term end projects I find""" start="00:35:35.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""completely useless because the students do""" start="00:35:40.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""the work at the very end of the term.""" start="00:35:43.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: no, by determined I mean they don't start at""" start="00:35:46.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""the end, they just report at the end.""" start="00:35:49.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: And so I... Oh I use the IMRAD,""" start="00:35:45.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""I use the IMRAD method.""" start="00:35:52.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""So I use IMRAD, basically IMRAD plus,""" start="00:35:54.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""plus Scrum, right? So,""" start="00:35:58.700" video="qanda-teaching" id="subtitle"]] +[[!template text="""So the first sprint review is introductory,""" start="00:36:00.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""the research proposal,""" start="00:36:02.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""the second 1 is about methodology,""" start="00:36:03.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""the third 1 about results,""" start="00:36:05.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""and the last 1 is their final presentation.""" start="00:36:06.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""And so that's the way I manage the projects,""" start="00:36:09.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""but that's about as much as I can do with""" start="00:36:11.160" video="qanda-teaching" id="subtitle"]] +[[!template text="""them. It's a good idea.""" start="00:36:16.040" video="qanda-teaching" id="subtitle"]] +[[!template text="""I hadn't even thought about using Org-ROM""" start="00:36:17.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""with them, but to teach them that might be a""" start="00:36:19.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""good idea, actually.""" start="00:36:22.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, for Org-ROM, actually,""" start="00:36:25.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""what I found useful during my graduate is for""" start="00:36:27.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""literature review. Yes.""" start="00:36:32.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""The other part of our program that is not""" start="00:36:34.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""about your like noting down your thoughts is""" start="00:36:37.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""about writing about literature notes.""" start="00:36:40.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, that's a good idea actually.""" start="00:36:43.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""And of course, I mean,""" start="00:36:45.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""there's more stuff that they should learn,""" start="00:36:46.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, like another 1,""" start="00:36:48.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""since you mentioned literature,""" start="00:36:50.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""you know, latex and Bibtech is another""" start="00:36:52.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""obvious extension of that.""" start="00:36:55.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""But that is actually a good idea because the""" start="00:36:58.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""literature is what they have the hardest time""" start="00:37:01.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, like when you need to read like 50""" start="00:37:04.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""papers.""" start="00:37:06.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: with. Last term, since you mentioned that,""" start="00:37:03.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""I had a really nice experience because 1 of""" start="00:37:12.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""our librarians, our digital librarian,""" start="00:37:16.220" video="qanda-teaching" id="subtitle"]] +[[!template text="""came along and talked to the students,""" start="00:37:18.420" video="qanda-teaching" id="subtitle"]] +[[!template text="""and he taught me about a tool called""" start="00:37:19.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""litmap.com, which is basically,""" start="00:37:21.580" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know how it's implemented,""" start="00:37:24.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""but it's basically a graph,""" start="00:37:25.460" video="qanda-teaching" id="subtitle"]] +[[!template text="""a graph representation of papers organized by""" start="00:37:28.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""citation. It's very, very cool.""" start="00:37:31.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""And the students who used to only find,""" start="00:37:35.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""I don't know, 1 paper and otherwise,""" start="00:37:38.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""of course, 15 YouTube videos and 100 blogs,""" start="00:37:41.180" video="qanda-teaching" id="subtitle"]] +[[!template text="""suddenly started finding and reading""" start="00:37:45.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""scientific papers. It was only because of""" start="00:37:49.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""this presentation. So you should take the,""" start="00:37:52.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think, I hope that is the right,""" start="00:37:55.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""that's the right mode,""" start="00:37:58.320" video="qanda-teaching" id="subtitle"]] +[[!template text="""litmaps. Okay, it's not litmap,""" start="00:38:00.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's called Litmaps. I'm gonna give you an""" start="00:38:02.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""example. I don't know if I can share this,""" start="00:38:05.640" video="qanda-teaching" id="subtitle"]] +[[!template text="""if you can look at that.""" start="00:38:09.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""But basically you create a,""" start="00:38:10.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""1 can use 1 of your papers as a seed,""" start="00:38:13.860" video="qanda-teaching" id="subtitle"]] +[[!template text="""and then it will create a graph,""" start="00:38:16.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""graph representation of it for you.""" start="00:38:19.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""And this is a powerful tool in itself.""" start="00:38:21.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""But what I'm saying is that the students""" start="00:38:25.400" video="qanda-teaching" id="subtitle"]] +[[!template text="""suddenly, their use of literature and that""" start="00:38:27.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""citation goes to the roof.""" start="00:38:30.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""And I've been waiting for that for probably""" start="00:38:33.080" video="qanda-teaching" id="subtitle"]] +[[!template text="""15 years since I've started teaching.""" start="00:38:36.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's crazy. That's really cool.""" start="00:38:38.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Here is the same tool,""" start="00:38:46.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""it's called connected papers.""" start="00:38:47.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's based on the open source citation data.""" start="00:38:49.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I know that as well,""" start="00:38:54.140" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think.""" start="00:38:56.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: It's actually very useful when you just start""" start="00:39:00.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""learning the topic. It's like you find 1""" start="00:39:01.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""paper, then you look into the connections.""" start="00:39:03.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""You can quickly narrow down to the most""" start="00:39:05.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""cited, the core papers.""" start="00:39:08.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Of course. And that is exactly their""" start="00:39:10.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""situation, you know, and they're always at""" start="00:39:12.500" video="qanda-teaching" id="subtitle"]] +[[!template text="""the beginning. As you go on,""" start="00:39:14.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""you develop different ways,""" start="00:39:17.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""but for these complete beginners,""" start="00:39:18.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""that's a good idea. Thank you so much for""" start="00:39:20.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""that. Okay, guys, anything else?""" start="00:39:22.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""I've enjoyed the conversation,""" start="00:39:31.240" video="qanda-teaching" id="subtitle"]] +[[!template text="""so you should definitely,""" start="00:39:32.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""I'm going to take some of these things away.""" start="00:39:36.000" video="qanda-teaching" id="subtitle"]] +[[!template text="""Thank you so much for that.""" start="00:39:38.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""Have you done, Yanta, have you done org mode""" start="00:39:42.340" video="qanda-teaching" id="subtitle"]] +[[!template text="""documentations yourself on WOC?""" start="00:39:46.300" video="qanda-teaching" id="subtitle"]] +[[!template text="""Or do you have a sort of a favorite 1?""" start="00:39:48.900" video="qanda-teaching" id="subtitle"]] +[[!template text="""I mean, I often on walk,""" start="00:39:52.120" video="qanda-teaching" id="subtitle"]] +[[!template text="""I often use the documentation for code""" start="00:39:53.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""blocks. I used to when I started doing that""" start="00:39:56.740" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, because it's only on work.""" start="00:40:00.760" video="qanda-teaching" id="subtitle"]] +[[!template text="""It's not part of the manual.""" start="00:40:02.800" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: for the first time. Yeah,""" start="00:39:59.620" video="qanda-teaching" id="subtitle"]] +[[!template text="""yeah. And so I've used that a lot.""" start="00:40:05.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Have I done? Not really,""" start="00:40:07.780" video="qanda-teaching" id="subtitle"]] +[[!template text="""mostly fixing the errors.""" start="00:40:09.720" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay.""" start="00:40:12.260" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think that's a really good idea.""" start="00:40:14.280" video="qanda-teaching" id="subtitle"]] +[[!template text="""All right. Well, thank you very much.""" start="00:40:16.440" video="qanda-teaching" id="subtitle"]] +[[!template text="""And it's great to be at this conference.""" start="00:40:19.960" video="qanda-teaching" id="subtitle"]] +[[!template text="""I think I'm going to get on.""" start="00:40:22.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 2]: Thanks for answering all the questions.""" start="00:40:27.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""And for the talk, It was quite interesting to""" start="00:40:29.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""see our modules in actual teaching.""" start="00:40:32.560" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, thank you. And I got to thank Daniel""" start="00:40:36.200" video="qanda-teaching" id="subtitle"]] +[[!template text="""German from Canada, the 1 of,""" start="00:40:38.600" video="qanda-teaching" id="subtitle"]] +[[!template text="""I had him on 1 of the slides because he,""" start="00:40:40.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""he inspired me to do that.""" start="00:40:43.660" video="qanda-teaching" id="subtitle"]] +[[!template text="""And, and I wouldn't be at the conference if I""" start="00:40:45.380" video="qanda-teaching" id="subtitle"]] +[[!template text="""hadn't contacted him and said oh here's my""" start="00:40:47.540" video="qanda-teaching" id="subtitle"]] +[[!template text="""paper and he said oh you should come to the""" start="00:40:49.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""conference and so that's why I came to the""" start="00:40:50.980" video="qanda-teaching" id="subtitle"]] +[[!template text="""conference. Thank you very much and as they""" start="00:40:52.680" video="qanda-teaching" id="subtitle"]] +[[!template text="""say keep in touch. You're welcome.""" start="00:40:58.480" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay bye-bye. You're welcome.""" start="00:41:04.100" video="qanda-teaching" id="subtitle"]] +[[!template text="""Okay, bye-bye. Take a copy of the chat before""" start="00:41:05.060" video="qanda-teaching" id="subtitle"]] +[[!template text="""you go, if you can. Happy weekend to just bye""" start="00:41:15.820" video="qanda-teaching" id="subtitle"]] +[[!template text="""bye.""" start="00:41:22.360" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 0]: You are currently the only person in this""" start="00:41:34.920" video="qanda-teaching" id="subtitle"]] +[[!template text="""conference.""" start="00:41:36.840" video="qanda-teaching" id="subtitle"]] +[[!template text="""[Speaker 1]: You""" start="00:42:00.060" video="qanda-teaching" id="subtitle"]] + +Questions or comments? Please e-mail [birkenkrahe@lyon.edu](mailto:birkenkrahe@lyon.edu?subject=Comment%20for%20EmacsConf%202023%20teaching%3A%20Teaching%20computer%20and%20data%20science%20with%20literate%20programming%20tools) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/teaching-before.md b/2023/info/teaching-before.md new file mode 100644 index 00000000..6a5fa970 --- /dev/null +++ b/2023/info/teaching-before.md @@ -0,0 +1,37 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 20-min talk; Q&A: BigBlueButton conference room +Status: TO_INDEX_QA + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="teaching-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="teaching-mainVideo" data=""" +00:00.000 Introduction +00:54.160 My interest in this topic +02:08.040 What is data science? +03:47.640 Computer science is a craft +04:52.840 The problem +05:36.560 The solution: Emacs + Org-mode +06:24.120 Emacs configuration file +07:30.360 Story + code = source + documentation +08:22.040 What is literate programming? +09:59.880 Emacs as a literate programming tool +11:18.960 Case study: basic setup +12:11.280 Emacs + Org-mode notebooks +12:45.800 Onboarding: simplified Emacs tutorial +13:40.840 Instruction + interaction +14:48.720 Assignments + projects +16:15.280 Overall results positive +18:19.800 Conclusion & outlook + +"""]]<div></div>Duration: 19:27 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li><li><a href="https://toobnix.org/w/b4eLjcLo9vcewVTzrv95L8">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="teaching-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="teaching-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus"></audio></div><div></div>Duration: 42:23 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/teaching-nav.md b/2023/info/teaching-nav.md new file mode 100644 index 00000000..bf06e887 --- /dev/null +++ b/2023/info/teaching-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a> +Next by track: <a href="/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/test-after.md b/2023/info/test-after.md new file mode 100644 index 00000000..413f1f6d --- /dev/null +++ b/2023/info/test-after.md @@ -0,0 +1,991 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="test-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Hi everyone! I'm Mats Lidell.""" start="00:00:03.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""I'm going to talk about my journey""" start="00:00:07.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""writing test cases for GNU Hyperbole""" start="00:00:09.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""and what I learned on the way.""" start="00:00:12.481" video="mainVideo-test" id="subtitle"]] +[[!template text="""So, why write tests for GNU Hyperbole?""" start="00:00:19.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""There is some background.""" start="00:00:24.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""I'm the co-maintainer of GNU Hyperbole""" start="00:00:25.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""together with Bob Weiner. Bob is the author of the package.""" start="00:00:27.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""The package is available through""" start="00:00:33.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""the Emacs package manager and GNU Elpa""" start="00:00:34.681" video="mainVideo-test" id="subtitle"]] +[[!template text="""if you would want to try it out.""" start="00:00:38.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""The package has some age. I think it dates back to""" start="00:00:42.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""a first release around 1993, which is also""" start="00:00:46.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""when I got in contact with the package the first time.""" start="00:00:50.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""I was a user of the package for many years.""" start="00:00:54.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""Later, I became the maintainer of the package for the FSF.""" start="00:00:58.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""That was although I did not have""" start="00:01:03.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""much knowledge of Emacs Lisp,""" start="00:01:04.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""and I still have a lot to learn.""" start="00:01:09.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""A few years ago, we started to work actively on the package,""" start="00:01:12.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""with setting up goals and having meetings.""" start="00:01:15.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""So my starting point is that I had experience""" start="00:01:20.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""with test automation from development""" start="00:01:24.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""in C++, Java and Python""" start="00:01:27.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""using different x-unit frameworks like cppunit, junit.""" start="00:01:30.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""That was in my daytime work where""" start="00:01:37.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""the technique of using pull requests""" start="00:01:40.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""with changes backed up by tests were the daily routine.""" start="00:01:41.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""It was really a requirement for a change to go in""" start="00:01:46.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""to have supporting test cases.""" start="00:01:49.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""I believe, a quite common setup and requirement these days.""" start="00:01:52.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""I also had been an Emacs user for many years,""" start="00:01:58.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""but with focus on being a user.""" start="00:02:02.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""So as I mentioned, I have limited Emacs Lisp knowledge.""" start="00:02:04.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""When we decided to start""" start="00:02:09.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""to work actively on Hyperbole again,""" start="00:02:11.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""it was natural for me to look into""" start="00:02:13.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""raising the quality by adding unit tests.""" start="00:02:15.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""This also goes hand in hand""" start="00:02:18.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""with running these regularly as part of a build process.""" start="00:02:20.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""All in all, following the current best practice""" start="00:02:25.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""of software development.""" start="00:02:28.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""But since Hyperbole had no tests at all,""" start="00:02:31.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""it would not be enough just to add tests""" start="00:02:36.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""for new or changed functionality.""" start="00:02:38.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""We wanted to add it even broader; ideally, everywhere.""" start="00:02:41.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""So work started with adding tests here and there""" start="00:02:44.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""based on our gut feeling where it would be most useful.""" start="00:02:48.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""This work is still ongoing.""" start="00:02:52.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""So this is where my journey starts""" start="00:02:55.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""with much functionality to test,""" start="00:02:58.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""no knowledge of what testing frameworks existed,""" start="00:03:00.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""and not really knowing a lot about Emacs Lisp at all.""" start="00:03:03.360" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""ERT: Emacs Lisp Regression Testing""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Luckily there is a package for writing tests in Emacs.""" start="00:03:11.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""It is called ERT: Emacs Lisp Regression Testing.""" start="00:03:13.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""It contains both support for defining tests and running them.""" start="00:03:17.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""Defining a test is done with the macro `ert-deftest`.""" start="00:03:20.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""In its simplest form, a test has a name, a doc string, and a body.""" start="00:03:24.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""The doc string is where you typically can give""" start="00:03:28.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""a detailed description of the test""" start="00:03:31.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""and has space for more info""" start="00:03:33.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""than what can be given in the test name.""" start="00:03:35.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""The body is where all the interesting things happen.""" start="00:03:42.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""It is here you prepare the test, run it and verify the outcome.""" start="00:03:45.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""Schematically, it looks like this.""" start="00:03:51.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""You have the ert-deftest, you have the test name,""" start="00:03:54.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""and the doc string, and then the body.""" start="00:04:00.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""It is in the body where everything interesting happens.""" start="00:04:02.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""The test is prepared, the function of the test is executed,""" start="00:04:06.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""and the outcome of the test is evaluated.""" start="00:04:09.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""Did the test succeed or not?""" start="00:04:13.120" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Assertions with `should`""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]] + +[[!template text="""The verification of a test is performed with""" start="00:04:14.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""one or more so-called assertions.""" start="00:04:18.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""In ERT, they are implemented""" start="00:04:21.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""with the macro `should`""" start="00:04:25.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""together with a set of related macros.""" start="00:04:26.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""`should` takes a form as argument,""" start="00:04:33.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""and if the form evaluates to nil,""" start="00:04:35.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""the test has failed. So let's look at an example.""" start="00:04:37.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""This simple test verifies that the function `+`""" start="00:04:48.581" video="mainVideo-test" id="subtitle"]] +[[!template text="""can add the numbers 2 and 3 and get the result 5.""" start="00:04:51.920" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Running a test case""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]] + +[[!template text="""So now we have defined a test case. How do we run it?""" start="00:04:56.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""The ERT package has the function (or""" start="00:05:01.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""rather convenience alias) `ert`. It takes a test selector.""" start="00:05:03.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""The test name works as a selector for running just one test.""" start="00:05:09.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""So here we have the example. Let's evaluate it.""" start="00:05:19.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""We define it and then we run it using ERT.""" start="00:05:27.901" video="mainVideo-test" id="subtitle"]] +[[!template text="""As you see, we get prompted for a test selector""" start="00:05:34.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""but we only have one test case defined at the moment.""" start="00:05:42.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""It's the example 0. So let's hit RET.""" start="00:05:46.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""As you see here, we get some output""" start="00:05:55.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""describing what we have just done.""" start="00:05:58.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""There is one test case it has passed, zero failed,""" start="00:06:01.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""zero skipped, total 1 of 1 test case""" start="00:06:04.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""and some time stamps for the execution.""" start="00:06:07.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""We also see this green mark here indicating one test case""" start="00:06:14.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""and that it was successful.""" start="00:06:18.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""For inspecting the test, we can hit the letter `l`""" start="00:06:23.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""which shows all the `should` forms""" start="00:06:29.660" video="mainVideo-test" id="subtitle"]] +[[!template text="""that was executed during this test case.""" start="00:06:32.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""So here we see that we have the `should`,""" start="00:06:37.780" video="mainVideo-test" id="subtitle"]] +[[!template text="""one `should` executed, and we see the form equals to 2,""" start="00:06:39.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""and it was 5 equals to 5.""" start="00:06:48.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""So a good example of a successful test case.""" start="00:06:49.800" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Debug a test""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]] + +[[!template text="""So now we've seen how we can run a test case.""" start="00:06:54.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""Can we debug it? Yes. For debugging a test case,""" start="00:06:57.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""the `ert-deftest` can be set up using `edebug-defun`,""" start="00:07:03.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""just as a function or macro is set up""" start="00:07:07.940" video="mainVideo-test" id="subtitle"]] +[[!template text="""or instrumented for debugging. So let's try that.""" start="00:07:10.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""So we try `edebug-defun` here.""" start="00:07:18.820" video="mainVideo-test" id="subtitle"]] +[[!template text="""Now it's instrumented for debugging.""" start="00:07:24.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""And we run it, `ert`, and we're inside the debugger,""" start="00:07:28.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""and we can inspect here what's happening.""" start="00:07:35.660" video="mainVideo-test" id="subtitle"]] +[[!template text="""Step through it and yes it succeeded just as before.""" start="00:07:40.680" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Commercial break: Hyperbole""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]] + +[[!template text="""It's time for a commercial break!""" start="00:07:50.380" video="mainVideo-test" id="subtitle"]] +[[!template text="""Hyperbole itself can help with running tests""" start="00:07:56.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""and also help with running them in debug mode.""" start="00:08:00.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""That is because hyperbole identifies the `ert-deftest`""" start="00:08:03.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""as an implicit button. An implicit button is basically""" start="00:08:08.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""a string or pattern""" start="00:08:12.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""that Hyperbole has assigned some meaning to.""" start="00:08:13.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""For the string `ert-deftest`, it is to run the test case.""" start="00:08:16.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""You activate the button with the action-key.""" start="00:08:19.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""The standard binding is the middle mouse button,""" start="00:08:24.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""or from the keyboard, M-RET.""" start="00:08:27.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""So let's try that.""" start="00:08:33.041" video="mainVideo-test" id="subtitle"]] +[[!template text="""We move the cursor here and then we type M-RET.""" start="00:08:34.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""And boom, the test case was executed.""" start="00:08:42.220" video="mainVideo-test" id="subtitle"]] +[[!template text="""And to run it in debug mode we type C-u M-RET""" start="00:08:47.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""to get the assist key, and then we're in the debugger.""" start="00:08:54.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""So that's pretty useful and convenient.""" start="00:08:57.720" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Instrument function on the fly""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]] + +[[!template text="""A related useful feature here is the step-in functionality""" start="00:09:10.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""bound to the letter i in `debug-mode`.""" start="00:09:13.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""It allows you to step into a function""" start="00:09:16.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""and continue debugging from there.""" start="00:09:18.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""For the cases where your test does not do what you want,""" start="00:09:20.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""looking at what happens in the function of the test""" start="00:09:22.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""can be really useful. Let's try that with another example.""" start="00:09:25.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""So here we have two helper functions, one `f1-add`,""" start="00:09:37.260" video="mainVideo-test" id="subtitle"]] +[[!template text="""that use the built-in `+` function""" start="00:09:43.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""and then we have `my-add` that uses that function.""" start="00:09:47.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""So we're going to test myadd.""" start="00:09:52.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""And then let's run this.""" start="00:09:59.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's run this using hyperbole in debug mode""" start="00:10:02.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""C-u M-RET. We're in the debugger again,""" start="00:10:05.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""and let's step up front to my function under test""" start="00:10:10.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""and then press `i` for getting it instrumented""" start="00:10:15.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""and going into it for debugging.""" start="00:10:19.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""And here we can expect that it's getting""" start="00:10:23.020" video="mainVideo-test" id="subtitle"]] +[[!template text="""the arguments 1 and 3,""" start="00:10:25.140" video="mainVideo-test" id="subtitle"]] +[[!template text="""and it returns the result 4 as expected.""" start="00:10:26.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""And yes, of course, our test case will then succeed.""" start="00:10:31.000" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Mocking""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]] + +[[!template text="""The next tool in our toolbox is mocking.""" start="00:10:39.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""Mocking is needed when we want to simulate the response""" start="00:10:41.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""from a function used by the function under test.""" start="00:10:46.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""That is the implementation of the function.""" start="00:10:49.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""This could be for various reasons.""" start="00:10:53.140" video="mainVideo-test" id="subtitle"]] +[[!template text="""One example could be because it would be hard or impossible""" start="00:10:56.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""in the test setup to get the behavior you want to test for,""" start="00:11:00.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""like an external error case.""" start="00:11:04.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""But the mock can also be used to verify""" start="00:11:06.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""that the function is called with a specific argument.""" start="00:11:08.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""We can view it as a way to isolate the function on the test""" start="00:11:11.620" video="mainVideo-test" id="subtitle"]] +[[!template text="""from its dependencies.""" start="00:11:14.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""So in order to test the function in isolation,""" start="00:11:16.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""we need to cut out any dependencies to external behavior.""" start="00:11:18.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""Most obvious would be dependencies to external resources,""" start="00:11:22.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""such as web pages. As an example:""" start="00:11:25.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""Hyperbole contains functionality to link you to""" start="00:11:27.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""social media resources and other resources on the net.""" start="00:11:30.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""Testing that would require the test system to call out""" start="00:11:34.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""to the social media resources""" start="00:11:37.900" video="mainVideo-test" id="subtitle"]] +[[!template text="""and would depend on it being available, etc.""" start="00:11:39.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""Nothing technically stops a test case""" start="00:11:43.540" video="mainVideo-test" id="subtitle"]] +[[!template text="""to depend on the external resources,""" start="00:11:45.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""but would, if nothing else, be flaky or slow.""" start="00:11:47.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""It could be part of an end-to-end suite""" start="00:11:51.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""where we want to test that it works all the way.""" start="00:11:53.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""In this case, we want to look at the isolated case""" start="00:11:57.180" video="mainVideo-test" id="subtitle"]] +[[!template text="""that can be run with no dependency on external resources.""" start="00:11:59.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""What you want to do is to replace the function with a mock""" start="00:12:04.100" video="mainVideo-test" id="subtitle"]] +[[!template text="""that behaves as the real function would do.""" start="00:12:06.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""The package I have found""" start="00:12:10.340" video="mainVideo-test" id="subtitle"]] +[[!template text="""and have used for mocking is `el-mock`.""" start="00:12:11.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""The workhorse in this package is the `with-mock` macro.""" start="00:12:14.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""It looks like this: `with-mock` followed by a body.""" start="00:12:21.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""In the execution of the body, stubs and mocks""" start="00:12:26.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""defined in the body is respected.""" start="00:12:30.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's look at some examples to make that clearer.""" start="00:12:32.900" video="mainVideo-test" id="subtitle"]] +[[!template text="""In this case, we have the macro `with-mock`.""" start="00:12:39.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""It works so that the expression""" start="00:12:42.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""`stub + => 10` is interpreted""" start="00:12:43.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""so that the function `+` will be replaced with the stub.""" start="00:12:48.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""The stub will return 10 regardless how it is called.""" start="00:12:51.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""Note that the stub function""" start="00:12:56.780" video="mainVideo-test" id="subtitle"]] +[[!template text="""does not have to be called at this level""" start="00:12:58.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""but could be called at any level in the call chain.""" start="00:13:00.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""By knowing how the function under test is implemented""" start="00:13:02.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""and how the implementation works,""" start="00:13:07.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""you can find function calls you want to mock""" start="00:13:09.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""to force certain behavior that you want to test,""" start="00:13:11.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""or to avoid calls to external resources, slow calls, etc.""" start="00:13:15.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""Simply isolate the function under test""" start="00:13:19.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""and simulate its environment.""" start="00:13:21.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""Mock is a little bit more sophisticated""" start="00:13:26.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""and depends on the arguments""" start="00:13:28.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""that the mock function is called with.""" start="00:13:30.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""Or more precise, it is checked""" start="00:13:31.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""after the `with-mock` clause""" start="00:13:33.848" video="mainVideo-test" id="subtitle"]] +[[!template text="""that the arguments match the arguments it was called with""" start="00:13:35.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""or even if it was called at all.""" start="00:13:38.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""If it is called with other arguments""" start="00:13:39.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""there will be an error,""" start="00:13:41.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""and if it's not called, it is also an error.""" start="00:13:43.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""So this way, we are sure that the function""" start="00:13:46.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""we were expected to be called actually was called.""" start="00:13:48.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""An important piece of the testing.""" start="00:13:51.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""So we are sure that the mock we have provided""" start="00:13:53.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""actually is triggered by the test case.""" start="00:13:56.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""So here we have an example of `with-mock`""" start="00:14:04.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""where the `f1-add` function is mocked,""" start="00:14:08.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""so that if it's called with 2 and 3 as arguments,""" start="00:14:18.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""it will return 10. Then we have a test case""" start="00:14:22.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""where we try the `my-add` function,""" start="00:14:24.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""as you might remember, and call that with 2 and 3""" start="00:14:28.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""and see that it should also then return 10""" start="00:14:30.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""because it's using `f1-add`.""" start="00:14:32.800" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""cl-letf""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Moving over to `cl-letf`.""" start="00:14:41.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""In rare occasions, the limitations of `el-mock` means""" start="00:14:44.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""you would want to implement a full-fledged function""" start="00:14:47.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""to be used under test.""" start="00:14:50.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""Then the macro `cl-letf` can be useful.""" start="00:14:52.980" video="mainVideo-test" id="subtitle"]] +[[!template text="""However, you need to handle the case yourself""" start="00:14:55.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""if the function was not called.""" start="00:14:57.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""Looking through the test cases where I have used `cl-letf`,""" start="00:15:00.100" video="mainVideo-test" id="subtitle"]] +[[!template text="""I think most can be implemented using plain mocking.""" start="00:15:03.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""Cases left is where the args to the mock might be different""" start="00:15:06.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""due to environment issues.""" start="00:15:11.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""In that case, a static mock will not work.""" start="00:15:13.740" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Hooks""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Another trick is that functions that uses hooks.""" start="00:15:24.100" video="mainVideo-test" id="subtitle"]] +[[!template text="""You can overload or replace the hooks to do the testing.""" start="00:15:30.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""So you can use the hook function just to do the verification""" start="00:15:35.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""and not do anything useful in the hook.""" start="00:15:40.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""Also, here you need to be careful""" start="00:15:43.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""to make sure the test handler is called and nothing else.""" start="00:15:45.080" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Side effects and initial buffer state""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]] + +[[!template text="""So far we have been talking about testing""" start="00:15:55.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""and what the function returns.""" start="00:15:57.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""In the best of words, we have a pure function""" start="00:15:59.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""that only depends on its arguments""" start="00:16:01.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""and produces no side effects.""" start="00:16:02.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""Many operations produce side effects""" start="00:16:04.940" video="mainVideo-test" id="subtitle"]] +[[!template text="""or operate on the contents of buffers""" start="00:16:06.900" video="mainVideo-test" id="subtitle"]] +[[!template text="""such as writing a message in the message buffer,""" start="00:16:09.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""change the state of a buffer, move point etc.""" start="00:16:12.380" video="mainVideo-test" id="subtitle"]] +[[!template text="""Hyperbole is not an exception. Quite the contrary.""" start="00:16:15.660" video="mainVideo-test" id="subtitle"]] +[[!template text="""Much of the functions creating links""" start="00:16:18.860" video="mainVideo-test" id="subtitle"]] +[[!template text="""are just about updating buffers.""" start="00:16:20.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""This poses a special problem for tests.""" start="00:16:24.421" video="mainVideo-test" id="subtitle"]] +[[!template text="""The test gets longer""" start="00:16:28.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""since you need to create buffers and files,""" start="00:16:29.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""initialize the contents.""" start="00:16:31.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""Verifying the outcome becomes trickier""" start="00:16:33.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""since you need to make sure you look at the right place.""" start="00:16:35.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""At the end of the test, you need to clean up,""" start="00:16:39.020" video="mainVideo-test" id="subtitle"]] +[[!template text="""both for not leaving a lot of garbage""" start="00:16:41.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""in buffers and files around,""" start="00:16:43.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""and even worse, not cause later tests""" start="00:16:45.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""to depend on the leftovers from the other tests.""" start="00:16:48.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""Here are some functions and variables""" start="00:16:50.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""I have found useful for this.""" start="00:16:53.080" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""with-temp-buffer""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]] + +[[!template text="""For creating tests: `with-temp-buffer`:""" start="00:17:05.100" video="mainVideo-test" id="subtitle"]] +[[!template text="""it provides you a temp buffer that you visit,""" start="00:17:09.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""and afterwards, there is no need to clean up.""" start="00:17:11.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""This is the first choice if that is all you need.""" start="00:17:13.720" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""make-temp-file""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]] + +[[!template text="""`make-temp-file`: If you need a file,""" start="00:17:16.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""this is the function to use.""" start="00:17:20.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""It creates a temp file or a directory.""" start="00:17:21.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""The file can be filled with initial contents.""" start="00:17:24.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""This needs to be cleaned up after a test.""" start="00:17:26.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""Moving on to verifying and debugging:""" start="00:17:31.020" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""buffer-string""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]] + +[[!template text="""`buffer-string`: returns the full contents""" start="00:17:33.288" video="mainVideo-test" id="subtitle"]] +[[!template text="""of the buffer as a string.""" start="00:17:38.248" video="mainVideo-test" id="subtitle"]] +[[!template text="""That can sound a bit voluminous,""" start="00:17:39.500" video="mainVideo-test" id="subtitle"]] +[[!template text="""but since tests are normally small, this often works well.""" start="00:17:41.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""I have in particular found good use of comparing""" start="00:17:46.140" video="mainVideo-test" id="subtitle"]] +[[!template text="""the contents of buffers with the empty string.""" start="00:17:48.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""That would give an error, but as we have seen""" start="00:17:50.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""with the output produced by the `should` assertion,""" start="00:17:53.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""this is almost like a print statement""" start="00:17:56.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""and can be compared with the good old technique""" start="00:17:58.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""of debugging with print statements.""" start="00:18:01.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""There might be other ways to do the same""" start="00:18:04.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""as we saw with debugging.""" start="00:18:06.248" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""buffer-name""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]] + +[[!template text="""buffer-name: Getting the buffer name is good""" start="00:18:09.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""to verify what buffer we are looking at.""" start="00:18:13.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""I often found it useful to check""" start="00:18:16.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""that my assumptions on what buffer I am acting on""" start="00:18:18.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""is correct by adding `should` clauses""" start="00:18:21.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""in the middle of the test execution""" start="00:18:23.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""or after preparing the test input.""" start="00:18:25.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""Sometimes Emacs can switch buffers in strange ways,""" start="00:18:27.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""maybe because the test case is badly written,""" start="00:18:31.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""and making sure your assumptions are correct""" start="00:18:34.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""is a good sanity check.""" start="00:18:37.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""Even the ert package does""" start="00:18:40.340" video="mainVideo-test" id="subtitle"]] +[[!template text="""some buffer and windows manipulation for its reporting""" start="00:18:42.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""that I have not fully learned how to master,""" start="00:18:44.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""so assertion for checking the sanity of the test is good.""" start="00:18:47.488" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""major-mode""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Finally, `major-mode`: Verify the buffer has the proper mode.""" start="00:18:51.980" video="mainVideo-test" id="subtitle"]] +[[!template text="""Can also be very useful and is a good sanity check.""" start="00:18:55.680" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""unwind-protect""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Finally, cleaning up. `unwind-protect`.""" start="00:19:02.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""The tool for cleaning up is the `unwind-protect` form""" start="00:19:06.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""which ensures that the unwind forms""" start="00:19:09.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""always are executed regardless of the outcome of the body.""" start="00:19:12.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""So if your test fails, you are sure the cleanup is executed.""" start="00:19:15.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's look at unwind-protect together with""" start="00:19:20.420" video="mainVideo-test" id="subtitle"]] +[[!template text="""the temporary file example. Many tests look like this.""" start="00:19:22.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""You create some resource, you call `unwind-protect`,""" start="00:19:30.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""you do the test, and then afterwards you do the cleanup.""" start="00:19:35.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""The cleanup for a file and a buffer is so common,""" start="00:19:42.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""so I have created a helper for that.""" start="00:19:46.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""It looks like this.""" start="00:19:51.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""The trick with the `buffer-modified` flag""" start="00:19:56.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""is to avoid getting prompted""" start="00:19:59.180" video="mainVideo-test" id="subtitle"]] +[[!template text="""for killing a buffer that is not saved.""" start="00:20:00.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""The test buffers are often in the state""" start="00:20:03.220" video="mainVideo-test" id="subtitle"]] +[[!template text="""where they have not been saved but modified.""" start="00:20:05.440" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Input, with-simulated-input""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Another problem for tests are input.""" start="00:20:15.100" video="mainVideo-test" id="subtitle"]] +[[!template text="""In the middle of execution a function""" start="00:20:19.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""might want to have some interaction with the user.""" start="00:20:21.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""Testing this poses a problem, not only in that""" start="00:20:24.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""the input matters, but also as how even to get the test case""" start="00:20:26.960" video="mainVideo-test" id="subtitle"]] +[[!template text="""to recognize the input!?""" start="00:20:31.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""Ideally the tests are run in batch mode,""" start="00:20:34.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""which in some sense means no user interaction.""" start="00:20:36.040" video="mainVideo-test" id="subtitle"]] +[[!template text="""In batch mode, there is no event loop running.""" start="00:20:38.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""Fortunately, there is a package `with-simulated-input`""" start="00:20:43.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""that gets you around these issues.""" start="00:20:47.180" video="mainVideo-test" id="subtitle"]] +[[!template text="""This is a macro that allows us""" start="00:20:53.260" video="mainVideo-test" id="subtitle"]] +[[!template text="""to define a set of characters""" start="00:20:55.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""that will be read by the function under the test,""" start="00:20:57.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""and all of this works in batch mode. It looks like this.""" start="00:20:59.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""We have `with-simulated-input`,""" start="00:21:02.580" video="mainVideo-test" id="subtitle"]] +[[!template text="""and then a string of characters, and then a body.""" start="00:21:04.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""The form takes a string of keys""" start="00:21:09.840" video="mainVideo-test" id="subtitle"]] +[[!template text="""and runs the rest of the body,""" start="00:21:11.648" video="mainVideo-test" id="subtitle"]] +[[!template text="""and if there are input required,""" start="00:21:13.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""it is picked from the string of keys.""" start="00:21:15.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""In our example, the `read-string` call""" start="00:21:18.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""will read up until RET,""" start="00:21:20.422" video="mainVideo-test" id="subtitle"]] +[[!template text="""and then return the characters read.""" start="00:21:21.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""As you see in the example, space needs to be provided""" start="00:21:26.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""by the string SPC, as return by the string RET.""" start="00:21:29.640" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Running all tests""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]] + +[[!template text="""So now we have seen ways to create test cases""" start="00:21:38.460" video="mainVideo-test" id="subtitle"]] +[[!template text="""and even make it possible to run some of them""" start="00:21:40.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""that has I/O in batch mode.""" start="00:21:43.220" video="mainVideo-test" id="subtitle"]] +[[!template text="""But the initial goal was to run them all at once.""" start="00:21:44.680" video="mainVideo-test" id="subtitle"]] +[[!template text="""How do you do that?""" start="00:21:47.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's go back to the `ert` command.""" start="00:21:48.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""It prompts for a test selector.""" start="00:21:51.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""If we give it the selector `t`,""" start="00:21:53.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""it will run all tests we have currently defined.""" start="00:21:56.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's try that with the subset of the Hyperbole tests.""" start="00:21:59.260" video="mainVideo-test" id="subtitle"]] +[[!template text="""Here is the test folder in the Hyperbole directory.""" start="00:22:05.780" video="mainVideo-test" id="subtitle"]] +[[!template text="""Let's go up here and load all the demo tests.""" start="00:22:09.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""And then try to run `ert`.""" start="00:22:18.820" video="mainVideo-test" id="subtitle"]] +[[!template text="""Now we see that we have a bunch of test cases.""" start="00:22:21.208" video="mainVideo-test" id="subtitle"]] +[[!template text="""We can all run them individually,""" start="00:22:26.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""but we can run them with `t` instead.""" start="00:22:27.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""We will run them all at once.""" start="00:22:31.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""So now, ert is executing all our test cases.""" start="00:22:35.460" video="mainVideo-test" id="subtitle"]] +[[!template text="""So here we have a nice green display""" start="00:22:51.420" video="mainVideo-test" id="subtitle"]] +[[!template text="""with all the test cases.""" start="00:22:57.080" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Batch mode""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]] + +[[!template text="""So that was fine, but we were still running it manually""" start="00:23:03.220" video="mainVideo-test" id="subtitle"]] +[[!template text="""by calling ert. How could we run it from the command line?""" start="00:23:08.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""Ert comes with functions for running it in batch mode.""" start="00:23:17.180" video="mainVideo-test" id="subtitle"]] +[[!template text="""For Hyperbole, we use `make` for repetitive tasks.""" start="00:23:21.500" video="mainVideo-test" id="subtitle"]] +[[!template text="""So we have a make target""" start="00:23:25.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""that uses the ert batch functionality,""" start="00:23:27.120" video="mainVideo-test" id="subtitle"]] +[[!template text="""and this is the line from the Makefile.""" start="00:23:29.280" video="mainVideo-test" id="subtitle"]] +[[!template text="""This is a bit detailed,""" start="00:23:33.260" video="mainVideo-test" id="subtitle"]] +[[!template text="""but you see that we have a part here""" start="00:23:35.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""where we load the test dependencies.""" start="00:23:37.540" video="mainVideo-test" id="subtitle"]] +[[!template text="""For getting the packages""" start="00:23:40.780" video="mainVideo-test" id="subtitle"]] +[[!template text="""such as `el-mock` and `with-simulated-input` etc. loaded.""" start="00:23:43.521" video="mainVideo-test" id="subtitle"]] +[[!template text="""We also have... I also want to point out here the call to""" start="00:23:48.460" video="mainVideo-test" id="subtitle"]] +[[!template text="""or the setting of `auto-save-default` to `nil`""" start="00:23:53.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""to get away with the prompt for excessive backup files""" start="00:23:58.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""that can pile up after running the tests a few times.""" start="00:24:02.440" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Skipping tests""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]] + +[[!template text="""Even with the help of simulated input,""" start="00:24:05.060" video="mainVideo-test" id="subtitle"]] +[[!template text="""not all tests can be run in batch mode.""" start="00:24:06.880" video="mainVideo-test" id="subtitle"]] +[[!template text="""They would simply not work there""" start="00:24:08.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""and have to be run in an interactive Emacs""" start="00:24:10.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""with the running event loop.""" start="00:24:12.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""One trick still to be able to use batch mode for automation""" start="00:24:14.180" video="mainVideo-test" id="subtitle"]] +[[!template text="""is to put the guard at the top of each test case""" start="00:24:17.920" video="mainVideo-test" id="subtitle"]] +[[!template text="""as the first thing to be executed,""" start="00:24:20.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""so that it kicks in before anything else and stops Emacs""" start="00:24:22.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""to try to run the test case.""" start="00:24:25.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""Now, it looks like this: `(skip-unless (not noninteractive))`.""" start="00:24:27.200" video="mainVideo-test" id="subtitle"]] +[[!template text="""So when ert sees that the test should be skipped, it skips it""" start="00:24:35.520" video="mainVideo-test" id="subtitle"]] +[[!template text="""and makes a note of that,""" start="00:24:38.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""so you will see how many tests that have been skipped.""" start="00:24:40.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""Too bad. We have a number of test cases defined,""" start="00:24:44.580" video="mainVideo-test" id="subtitle"]] +[[!template text="""and to run them, we need to run them manually. Well sort of.""" start="00:24:47.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""Not being able to run all tests easily""" start="00:24:51.360" video="mainVideo-test" id="subtitle"]] +[[!template text="""is a bit counterproductive""" start="00:24:53.808" video="mainVideo-test" id="subtitle"]] +[[!template text="""since our goal is to run all tests.""" start="00:24:58.420" video="mainVideo-test" id="subtitle"]] +[[!template text="""There is however no ert function to run tests in batch mode""" start="00:25:01.000" video="mainVideo-test" id="subtitle"]] +[[!template text="""with an interactive Emacs.""" start="00:25:04.720" video="mainVideo-test" id="subtitle"]] +[[!template text="""The closest I have got is either""" start="00:25:06.780" video="mainVideo-test" id="subtitle"]] +[[!template text="""to start the Emacs from the command line""" start="00:25:08.480" video="mainVideo-test" id="subtitle"]] +[[!template text="""calling the ert function as we just have seen,""" start="00:25:10.080" video="mainVideo-test" id="subtitle"]] +[[!template text="""and then killing it manually when done;""" start="00:25:12.440" video="mainVideo-test" id="subtitle"]] +[[!template text="""or add a function to extract the contents of the ERT buffer""" start="00:25:14.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""when done and echo it to standard output.""" start="00:25:19.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""This is how it looks in the Makefile""" start="00:25:24.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""to get the behavior of cutting and paste,""" start="00:25:27.801" video="mainVideo-test" id="subtitle"]] +[[!template text="""getting the ERT output into a file""" start="00:25:31.208" video="mainVideo-test" id="subtitle"]] +[[!template text="""so we can then kill Emacs""" start="00:25:34.581" video="mainVideo-test" id="subtitle"]] +[[!template text="""and spit out the content of the ERT buffer.""" start="00:25:36.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""One final word here is that""" start="00:25:44.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""when you run this in a continuous integration pipeline,""" start="00:25:47.740" video="mainVideo-test" id="subtitle"]] +[[!template text="""you might not have a TTY for getting Emacs to start,""" start="00:25:54.560" video="mainVideo-test" id="subtitle"]] +[[!template text="""and that is then another problem""" start="00:25:59.400" video="mainVideo-test" id="subtitle"]] +[[!template text="""with getting the interactive mode.""" start="00:26:03.201" video="mainVideo-test" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]] + +[[!template text="""We have reached the end of the talk.""" start="00:26:08.460" video="mainVideo-test" id="subtitle"]] +[[!template text="""If you have any new ideas""" start="00:26:11.121" video="mainVideo-test" id="subtitle"]] +[[!template text="""or have some suggestions for improvements,""" start="00:26:14.160" video="mainVideo-test" id="subtitle"]] +[[!template text="""feel free to reach out""" start="00:26:16.760" video="mainVideo-test" id="subtitle"]] +[[!template text="""because I am still on the learning curve of writing,""" start="00:26:18.240" video="mainVideo-test" id="subtitle"]] +[[!template text="""how to write good test cases.""" start="00:26:21.101" video="mainVideo-test" id="subtitle"]] +[[!template text="""If you look at the test cases we have in Hyperbole""" start="00:26:25.300" video="mainVideo-test" id="subtitle"]] +[[!template text="""and you think they might contradict what I am saying here,""" start="00:26:27.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""it is OK. It is probably right.""" start="00:26:29.800" video="mainVideo-test" id="subtitle"]] +[[!template text="""I have changed the style as I go""" start="00:26:32.580" video="mainVideo-test" id="subtitle"]] +[[!template text="""and we have not yet refactored all tests""" start="00:26:34.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""to benefit from new designs.""" start="00:26:36.640" video="mainVideo-test" id="subtitle"]] +[[!template text="""That is also the beauty of the test case.""" start="00:26:38.580" video="mainVideo-test" id="subtitle"]] +[[!template text="""As long as it serves its purpose, it is not terrible""" start="00:26:40.600" video="mainVideo-test" id="subtitle"]] +[[!template text="""if it is not optimal or not having the best style.""" start="00:26:43.320" video="mainVideo-test" id="subtitle"]] +[[!template text="""And yes, thanks for listening. Bye.""" start="00:26:47.800" video="mainVideo-test" id="subtitle"]] + +<a name="test-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Do we have any listeners?""" start="00:00:08.740" video="qanda-test" id="subtitle"]] +[[!template text="""It's you and I. I have a question.""" start="00:00:13.340" video="qanda-test" id="subtitle"]] +[[!template text="""How many tests do you have for hyperbole and""" start="00:00:16.420" video="qanda-test" id="subtitle"]] +[[!template text="""How would you rate the test coverage compared""" start="00:00:18.800" video="qanda-test" id="subtitle"]] +[[!template text="""to other packages? Well,""" start="00:00:21.279" video="qanda-test" id="subtitle"]] +[[!template text="""that's a tricky 1. Shall I spell it out loud""" start="00:00:28.279" video="qanda-test" id="subtitle"]] +[[!template text="""and then maybe type it at the same time?""" start="00:00:31.100" video="qanda-test" id="subtitle"]] +[[!template text="""So, I believe it's around like more than 300""" start="00:00:36.420" video="qanda-test" id="subtitle"]] +[[!template text="""test cases now. But I cannot compare the test""" start="00:00:43.660" video="qanda-test" id="subtitle"]] +[[!template text="""coverage to any other""" start="00:00:45.220" video="qanda-test" id="subtitle"]] +[[!template text="""other package. Maybe I can type that later.""" start="00:01:00.020" video="qanda-test" id="subtitle"]] +[[!template text="""What do you say, Badal?""" start="00:01:01.560" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: package. I have no knowledge of any Yeah,""" start="00:01:02.660" video="qanda-test" id="subtitle"]] +[[!template text="""sure, yeah, that's totally fine.""" start="00:01:03.840" video="qanda-test" id="subtitle"]] +[[!template text="""Feel free to just answer them with voice.""" start="00:01:05.660" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, yeah. There's another question.""" start="00:01:08.720" video="qanda-test" id="subtitle"]] +[[!template text="""1 small suggestion to me,""" start="00:01:10.520" video="qanda-test" id="subtitle"]] +[[!template text="""should means optional,""" start="00:01:11.440" video="qanda-test" id="subtitle"]] +[[!template text="""where shall or must means required.""" start="00:01:13.660" video="qanda-test" id="subtitle"]] +[[!template text="""Not sure if it is too late to make a major""" start="00:01:15.940" video="qanda-test" id="subtitle"]] +[[!template text="""grammar change like that.""" start="00:01:17.220" video="qanda-test" id="subtitle"]] +[[!template text="""Very nice presentation.""" start="00:01:18.080" video="qanda-test" id="subtitle"]] +[[!template text="""So thanks for presentation,""" start="00:01:19.840" video="qanda-test" id="subtitle"]] +[[!template text="""but the package ERT, well,""" start="00:01:24.380" video="qanda-test" id="subtitle"]] +[[!template text="""it's not something that we have come up with.""" start="00:01:27.920" video="qanda-test" id="subtitle"]] +[[!template text="""It's a standard package.""" start="00:01:28.920" video="qanda-test" id="subtitle"]] +[[!template text="""So I believe it has been around for a long""" start="00:01:32.320" video="qanda-test" id="subtitle"]] +[[!template text="""time. So, but please feel free to make""" start="00:01:37.760" video="qanda-test" id="subtitle"]] +[[!template text="""suggestions and maybe you can,""" start="00:01:39.680" video="qanda-test" id="subtitle"]] +[[!template text="""you know, like do a copy or like an alias for""" start="00:01:43.660" video="qanda-test" id="subtitle"]] +[[!template text="""that. If you believe it makes more sense for""" start="00:01:46.080" video="qanda-test" id="subtitle"]] +[[!template text="""your test cases to have that instead.""" start="00:01:48.080" video="qanda-test" id="subtitle"]] +[[!template text="""And then we have another question here.""" start="00:01:53.540" video="qanda-test" id="subtitle"]] +[[!template text="""For your info, you may find this helpful for""" start="00:01:55.540" video="qanda-test" id="subtitle"]] +[[!template text="""running MX test lint both from a command line""" start="00:01:58.780" video="qanda-test" id="subtitle"]] +[[!template text="""and from within MX with a transit menu.""" start="00:02:01.220" video="qanda-test" id="subtitle"]] +[[!template text="""GitHub alpha papa make sure,""" start="00:02:03.600" video="qanda-test" id="subtitle"]] +[[!template text="""yes. It also works on remote CI.""" start="00:02:06.760" video="qanda-test" id="subtitle"]] +[[!template text="""Yeah, thank you, Alpha Papa.""" start="00:02:08.240" video="qanda-test" id="subtitle"]] +[[!template text="""I think I've looked into that,""" start="00:02:10.580" video="qanda-test" id="subtitle"]] +[[!template text="""but we haven't made any use of that.""" start="00:02:13.440" video="qanda-test" id="subtitle"]] +[[!template text="""But maybe you'll inspire me to give it""" start="00:02:17.920" video="qanda-test" id="subtitle"]] +[[!template text="""another look.""" start="00:02:18.400" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: Hey guys.""" start="00:02:29.260" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: I remember, I recognize that voice.""" start="00:02:34.120" video="qanda-test" id="subtitle"]] +[[!template text="""Hi, Bob. Hey, how are you?""" start="00:02:37.160" video="qanda-test" id="subtitle"]] +[[!template text="""Congratulations, man. Thanks,""" start="00:02:40.240" video="qanda-test" id="subtitle"]] +[[!template text="""Hugh. Thank you. I have another question""" start="00:02:43.020" video="qanda-test" id="subtitle"]] +[[!template text="""here. It is easy to run ad hoc tests inside""" start="00:02:45.520" video="qanda-test" id="subtitle"]] +[[!template text="""an Emacs session given the command line""" start="00:02:48.400" video="qanda-test" id="subtitle"]] +[[!template text="""scripts you need to run to get the batch test""" start="00:02:51.180" video="qanda-test" id="subtitle"]] +[[!template text="""session running? You said it's to run an""" start="00:02:54.960" video="qanda-test" id="subtitle"]] +[[!template text="""ad-hoc test. I'm not sure I understand that""" start="00:03:05.680" video="qanda-test" id="subtitle"]] +[[!template text="""question. Yes, please.""" start="00:03:14.440" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: Maybe I can rephrase. Sure.""" start="00:03:15.660" video="qanda-test" id="subtitle"]] +[[!template text="""So I think what I understand is that since""" start="00:03:19.900" video="qanda-test" id="subtitle"]] +[[!template text="""you have to use some of these command lines""" start="00:03:22.540" video="qanda-test" id="subtitle"]] +[[!template text="""scripts to get a batch test session running,""" start="00:03:25.440" video="qanda-test" id="subtitle"]] +[[!template text="""is it easy to run ad hoc tests in an Emacs""" start="00:03:28.780" video="qanda-test" id="subtitle"]] +[[!template text="""session or does that, like in your""" start="00:03:30.700" video="qanda-test" id="subtitle"]] +[[!template text="""experience, has that been difficult?""" start="00:03:32.040" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, from the command line,""" start="00:03:36.820" video="qanda-test" id="subtitle"]] +[[!template text="""if you look at the command line,""" start="00:03:38.660" video="qanda-test" id="subtitle"]] +[[!template text="""you'll see that it's only like a few image""" start="00:03:44.160" video="qanda-test" id="subtitle"]] +[[!template text="""functions to call to get that behavior to run""" start="00:03:46.480" video="qanda-test" id="subtitle"]] +[[!template text="""the batch tests. So I think we made some""" start="00:03:55.080" video="qanda-test" id="subtitle"]] +[[!template text="""support function for that in hyperbole.""" start="00:03:57.100" video="qanda-test" id="subtitle"]] +[[!template text="""So it's not, I don't think it's possible out""" start="00:04:02.800" video="qanda-test" id="subtitle"]] +[[!template text="""of the box to do it, but it's not complicated""" start="00:04:05.540" video="qanda-test" id="subtitle"]] +[[!template text="""to do it.""" start="00:04:08.060" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: You can define a test anytime,""" start="00:04:12.190" video="qanda-test" id="subtitle"]] +[[!template text="""right? Just like a new function.""" start="00:04:14.780" video="qanda-test" id="subtitle"]] +[[!template text="""So that's ad hoc. You just write your test""" start="00:04:18.899" video="qanda-test" id="subtitle"]] +[[!template text="""and you can run it.""" start="00:04:20.019" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, yeah, I mean, of course,""" start="00:04:22.900" video="qanda-test" id="subtitle"]] +[[!template text="""but I got the impression it was about running""" start="00:04:25.900" video="qanda-test" id="subtitle"]] +[[!template text="""all your tests like we did with the command""" start="00:04:28.620" video="qanda-test" id="subtitle"]] +[[!template text="""line. Well, so the question is more about how""" start="00:04:35.740" video="qanda-test" id="subtitle"]] +[[!template text="""would you run all your test cases from within""" start="00:04:38.260" video="qanda-test" id="subtitle"]] +[[!template text="""Emacs? And the easy answer to that is""" start="00:04:44.860" video="qanda-test" id="subtitle"]] +[[!template text="""actually you load all your test case files,""" start="00:04:48.420" video="qanda-test" id="subtitle"]] +[[!template text="""and then you run ERT with the T as the test""" start="00:04:51.760" video="qanda-test" id="subtitle"]] +[[!template text="""selector and then it will run all your test""" start="00:04:53.600" video="qanda-test" id="subtitle"]] +[[!template text="""cases.""" start="00:04:53.880" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. And I think they have expanded on""" start="00:05:01.780" video="qanda-test" id="subtitle"]] +[[!template text="""their question a little bit as well,""" start="00:05:03.180" video="qanda-test" id="subtitle"]] +[[!template text="""clarifying that. In other words,""" start="00:05:04.960" video="qanda-test" id="subtitle"]] +[[!template text="""can you tweak tests in an Emacs session and""" start="00:05:07.200" video="qanda-test" id="subtitle"]] +[[!template text="""run them right away? Which I believe,""" start="00:05:08.860" video="qanda-test" id="subtitle"]] +[[!template text="""if I understand correctly what Bob was""" start="00:05:11.400" video="qanda-test" id="subtitle"]] +[[!template text="""saying, you can basically define or redefine""" start="00:05:13.820" video="qanda-test" id="subtitle"]] +[[!template text="""functions on the fly and then have them be""" start="00:05:15.920" video="qanda-test" id="subtitle"]] +[[!template text="""run, right?""" start="00:05:16.440" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, yes. You just go into that test case and""" start="00:05:22.200" video="qanda-test" id="subtitle"]] +[[!template text="""you just change it and you run it again.""" start="00:05:24.120" video="qanda-test" id="subtitle"]] +[[!template text="""And either you have to sort of load it or you""" start="00:05:29.060" video="qanda-test" id="subtitle"]] +[[!template text="""can use like the commercial thing I did.""" start="00:05:31.560" video="qanda-test" id="subtitle"]] +[[!template text="""You use hyperbole and just hit meta return on""" start="00:05:36.140" video="qanda-test" id="subtitle"]] +[[!template text="""the test case and it will load it and run the""" start="00:05:38.560" video="qanda-test" id="subtitle"]] +[[!template text="""test case again. So that's of course what you""" start="00:05:42.240" video="qanda-test" id="subtitle"]] +[[!template text="""normally do when you're defining a test or""" start="00:05:44.220" video="qanda-test" id="subtitle"]] +[[!template text="""debug a test case or develop a test case.""" start="00:05:47.440" video="qanda-test" id="subtitle"]] +[[!template text="""Just start with something small,""" start="00:05:49.960" video="qanda-test" id="subtitle"]] +[[!template text="""just make sure maybe you can prepare the test""" start="00:05:52.700" video="qanda-test" id="subtitle"]] +[[!template text="""properly and run it again and again and again""" start="00:05:55.320" video="qanda-test" id="subtitle"]] +[[!template text="""until you're ready with it.""" start="00:05:56.720" video="qanda-test" id="subtitle"]] +[[!template text="""That's a good point. You can definitely do""" start="00:05:59.760" video="qanda-test" id="subtitle"]] +[[!template text="""that and that's part of how I normally""" start="00:06:02.800" video="qanda-test" id="subtitle"]] +[[!template text="""develop the test cases that I mean start with""" start="00:06:06.420" video="qanda-test" id="subtitle"]] +[[!template text="""something small so I can see that I get there""" start="00:06:09.160" video="qanda-test" id="subtitle"]] +[[!template text="""maybe the right input in the buffer that I""" start="00:06:12.180" video="qanda-test" id="subtitle"]] +[[!template text="""want to test on or something and I expand on""" start="00:06:14.180" video="qanda-test" id="subtitle"]] +[[!template text="""that more and more and add more and more more""" start="00:06:18.160" video="qanda-test" id="subtitle"]] +[[!template text="""and more more""" start="00:06:18.460" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: tests to it. You might tell them a bit about""" start="00:06:31.040" video="qanda-test" id="subtitle"]] +[[!template text="""how many test cases you have.""" start="00:06:33.280" video="qanda-test" id="subtitle"]] +[[!template text="""I guess you commented on that and like what""" start="00:06:36.020" video="qanda-test" id="subtitle"]] +[[!template text="""happens, you know, with the CICD pipeline,""" start="00:06:40.320" video="qanda-test" id="subtitle"]] +[[!template text="""every time we commit, you know,""" start="00:06:43.780" video="qanda-test" id="subtitle"]] +[[!template text="""across all the versions and what you have set""" start="00:06:46.360" video="qanda-test" id="subtitle"]] +[[!template text="""up there because you know I wish people could""" start="00:06:48.760" video="qanda-test" id="subtitle"]] +[[!template text="""see it. You can go and check on GitHub and""" start="00:06:53.940" video="qanda-test" id="subtitle"]] +[[!template text="""you can see the logs right of any of the""" start="00:06:57.440" video="qanda-test" id="subtitle"]] +[[!template text="""builds and but tell them a bit about that""" start="00:06:59.760" video="qanda-test" id="subtitle"]] +[[!template text="""Mats because I think that's pretty""" start="00:07:01.080" video="qanda-test" id="subtitle"]] +[[!template text="""impressive.""" start="00:07:01.320" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, that's part of more the CI,""" start="00:07:07.280" video="qanda-test" id="subtitle"]] +[[!template text="""CD, part of how we developed this using""" start="00:07:11.760" video="qanda-test" id="subtitle"]] +[[!template text="""GitHub and workflows that you get out of the""" start="00:07:15.460" video="qanda-test" id="subtitle"]] +[[!template text="""box from there. So this more than 300 test""" start="00:07:20.740" video="qanda-test" id="subtitle"]] +[[!template text="""cases on our round for I think 5 different""" start="00:07:23.440" video="qanda-test" id="subtitle"]] +[[!template text="""versions of Emacs when we do a pull request""" start="00:07:26.480" video="qanda-test" id="subtitle"]] +[[!template text="""or a commit. So that's a good way to ensure""" start="00:07:33.900" video="qanda-test" id="subtitle"]] +[[!template text="""that it works from version 27.2""" start="00:07:38.040" video="qanda-test" id="subtitle"]] +[[!template text="""up to the latest master version because""" start="00:07:42.240" video="qanda-test" id="subtitle"]] +[[!template text="""there's some changes in Emacs over different""" start="00:07:45.860" video="qanda-test" id="subtitle"]] +[[!template text="""versions that can affect your functions or""" start="00:07:48.940" video="qanda-test" id="subtitle"]] +[[!template text="""your code.""" start="00:07:49.600" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: They all run in parallel and so typically in""" start="00:07:56.580" video="qanda-test" id="subtitle"]] +[[!template text="""under 60 seconds I think you've got all of""" start="00:08:00.580" video="qanda-test" id="subtitle"]] +[[!template text="""them run so you've got pretty extensive""" start="00:08:03.960" video="qanda-test" id="subtitle"]] +[[!template text="""testing which does catch interesting bugs""" start="00:08:08.860" video="qanda-test" id="subtitle"]] +[[!template text="""here and there, right?""" start="00:08:09.760" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, of course it does.""" start="00:08:13.320" video="qanda-test" id="subtitle"]] +[[!template text="""I mean, you normally develop with 1 version""" start="00:08:18.060" video="qanda-test" id="subtitle"]] +[[!template text="""and then you think everything is okay.""" start="00:08:20.280" video="qanda-test" id="subtitle"]] +[[!template text="""But then when you're tested with the""" start="00:08:21.720" video="qanda-test" id="subtitle"]] +[[!template text="""different versions, you find out that there""" start="00:08:23.460" video="qanda-test" id="subtitle"]] +[[!template text="""are some changes and there are things you""" start="00:08:26.080" video="qanda-test" id="subtitle"]] +[[!template text="""might not sort of keep track of what's""" start="00:08:30.140" video="qanda-test" id="subtitle"]] +[[!template text="""happening also. So that's a way to get""" start="00:08:34.340" video="qanda-test" id="subtitle"]] +[[!template text="""noticed that the core developers of Emacs""" start="00:08:38.559" video="qanda-test" id="subtitle"]] +[[!template text="""have changed something that you sort of based""" start="00:08:41.120" video="qanda-test" id="subtitle"]] +[[!template text="""your code on. Now I got another question""" start="00:08:44.380" video="qanda-test" id="subtitle"]] +[[!template text="""here. Did you have to change hyperbole code""" start="00:08:47.900" video="qanda-test" id="subtitle"]] +[[!template text="""and design to be more readily testable as you""" start="00:08:50.580" video="qanda-test" id="subtitle"]] +[[!template text="""were increasing your test coverage?""" start="00:08:52.160" video="qanda-test" id="subtitle"]] +[[!template text="""Well, we haven't done that to a lot,""" start="00:08:55.520" video="qanda-test" id="subtitle"]] +[[!template text="""to a big degree, although I believe that that""" start="00:09:00.160" video="qanda-test" id="subtitle"]] +[[!template text="""is an important thing for sort of the future""" start="00:09:03.760" video="qanda-test" id="subtitle"]] +[[!template text="""to do that because some of the hyperbolic""" start="00:09:06.020" video="qanda-test" id="subtitle"]] +[[!template text="""functions are very complicated and long and""" start="00:09:08.520" video="qanda-test" id="subtitle"]] +[[!template text="""that makes testing them rather difficult.""" start="00:09:10.640" video="qanda-test" id="subtitle"]] +[[!template text="""So, at a few places we have sort of broken up""" start="00:09:14.660" video="qanda-test" id="subtitle"]] +[[!template text="""functions in smaller pieces so it'd be easier""" start="00:09:17.260" video="qanda-test" id="subtitle"]] +[[!template text="""to do like unit tests of the different parts""" start="00:09:20.280" video="qanda-test" id="subtitle"]] +[[!template text="""of it. But there's a lot of more work that""" start="00:09:27.740" video="qanda-test" id="subtitle"]] +[[!template text="""has to be done there.""" start="00:09:28.680" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: 1 of the nice things is you know the great""" start="00:09:33.820" video="qanda-test" id="subtitle"]] +[[!template text="""environment in Lisp where we're able to do a""" start="00:09:36.760" video="qanda-test" id="subtitle"]] +[[!template text="""lot of interactive bottom-up testing before""" start="00:09:40.520" video="qanda-test" id="subtitle"]] +[[!template text="""we even get to lighting tech pieces.""" start="00:09:42.840" video="qanda-test" id="subtitle"]] +[[!template text="""So it does tend to be more higher level bugs,""" start="00:09:48.740" video="qanda-test" id="subtitle"]] +[[!template text="""I think, that get caught in cross-functional""" start="00:09:51.140" video="qanda-test" id="subtitle"]] +[[!template text="""interaction. We had 1 recently that was an""" start="00:09:55.940" video="qanda-test" id="subtitle"]] +[[!template text="""Emacs version change. It had been a function""" start="00:09:58.100" video="qanda-test" id="subtitle"]] +[[!template text="""that had existed for a long time.""" start="00:10:01.100" video="qanda-test" id="subtitle"]] +[[!template text="""It had an and rest in it,""" start="00:10:03.340" video="qanda-test" id="subtitle"]] +[[!template text="""in its argument list, so it would assemble""" start="00:10:05.740" video="qanda-test" id="subtitle"]] +[[!template text="""the list of arguments from individual""" start="00:10:08.600" video="qanda-test" id="subtitle"]] +[[!template text="""arguments that you would give it,""" start="00:10:10.320" video="qanda-test" id="subtitle"]] +[[!template text="""and they decided in a recent version,""" start="00:10:13.100" video="qanda-test" id="subtitle"]] +[[!template text="""I think with Stefan's input,""" start="00:10:15.200" video="qanda-test" id="subtitle"]] +[[!template text="""to change that to a list and allow the prior""" start="00:10:19.400" video="qanda-test" id="subtitle"]] +[[!template text="""behavior, but it would issue a warning if you""" start="00:10:22.740" video="qanda-test" id="subtitle"]] +[[!template text="""use the prior behavior.""" start="00:10:23.620" video="qanda-test" id="subtitle"]] +[[!template text="""So all of a sudden, the way you were supposed""" start="00:10:25.560" video="qanda-test" id="subtitle"]] +[[!template text="""to do it became semi-invalid.""" start="00:10:27.180" video="qanda-test" id="subtitle"]] +[[!template text="""And so we started getting the warning,""" start="00:10:30.440" video="qanda-test" id="subtitle"]] +[[!template text="""and we've tried to eliminate all those""" start="00:10:32.760" video="qanda-test" id="subtitle"]] +[[!template text="""warnings in recent hyperbole developments.""" start="00:10:35.600" video="qanda-test" id="subtitle"]] +[[!template text="""So we're like, what do we do?""" start="00:10:37.120" video="qanda-test" id="subtitle"]] +[[!template text="""You know, because we wanted to be backward""" start="00:10:39.020" video="qanda-test" id="subtitle"]] +[[!template text="""compatible to where you couldn't use a list.""" start="00:10:42.140" video="qanda-test" id="subtitle"]] +[[!template text="""It required you to use individual arguments.""" start="00:10:44.620" video="qanda-test" id="subtitle"]] +[[!template text="""And now it's sort of requiring you to do""" start="00:10:48.380" video="qanda-test" id="subtitle"]] +[[!template text="""that. And all of that was caused by the""" start="00:10:51.660" video="qanda-test" id="subtitle"]] +[[!template text="""automatic testing on it.""" start="00:10:52.940" video="qanda-test" id="subtitle"]] +[[!template text="""So you said, Max, you were going to tell us""" start="00:11:08.680" video="qanda-test" id="subtitle"]] +[[!template text="""what you learned. So what are the major""" start="00:11:12.740" video="qanda-test" id="subtitle"]] +[[!template text="""things that you learned in doing all of this""" start="00:11:15.368" video="qanda-test" id="subtitle"]] +[[!template text="""work? All of this work?""" start="00:11:15.680" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, I tried to cover some of it in the""" start="00:11:26.520" video="qanda-test" id="subtitle"]] +[[!template text="""presentation, but as I was going along,""" start="00:11:29.380" video="qanda-test" id="subtitle"]] +[[!template text="""the presentation became like twice as long as""" start="00:11:33.420" video="qanda-test" id="subtitle"]] +[[!template text="""fitted into the time we had so I had to cut""" start="00:11:36.180" video="qanda-test" id="subtitle"]] +[[!template text="""it out. But I think some of the core things""" start="00:11:42.380" video="qanda-test" id="subtitle"]] +[[!template text="""still is in the presentation.""" start="00:11:44.340" video="qanda-test" id="subtitle"]] +[[!template text="""From a personal perspective,""" start="00:11:49.560" video="qanda-test" id="subtitle"]] +[[!template text="""And this might not be hard to realize,""" start="00:11:52.440" video="qanda-test" id="subtitle"]] +[[!template text="""but forcing yourself to test functions,""" start="00:11:56.960" video="qanda-test" id="subtitle"]] +[[!template text="""test code really forces you to understand the""" start="00:12:02.900" video="qanda-test" id="subtitle"]] +[[!template text="""code a little bit better in a way that sort""" start="00:12:05.080" video="qanda-test" id="subtitle"]] +[[!template text="""of makes it easier than just to read the""" start="00:12:07.300" video="qanda-test" id="subtitle"]] +[[!template text="""code. I don't know how it is for the rest""" start="00:12:11.460" video="qanda-test" id="subtitle"]] +[[!template text="""listening to this, but for me it works so""" start="00:12:13.780" video="qanda-test" id="subtitle"]] +[[!template text="""that if I just read the code then I don't""" start="00:12:16.580" video="qanda-test" id="subtitle"]] +[[!template text="""sort of become as sharp as I should be but if""" start="00:12:20.140" video="qanda-test" id="subtitle"]] +[[!template text="""I try to write the test case for it then I""" start="00:12:22.500" video="qanda-test" id="subtitle"]] +[[!template text="""really need to understand better of all the""" start="00:12:24.680" video="qanda-test" id="subtitle"]] +[[!template text="""edge cases and all the sort of states and etc""" start="00:12:27.660" video="qanda-test" id="subtitle"]] +[[!template text="""that is involved and I think that's That's""" start="00:12:30.060" video="qanda-test" id="subtitle"]] +[[!template text="""what's sort of 1 of the learning things I""" start="00:12:33.080" video="qanda-test" id="subtitle"]] +[[!template text="""wanted to communicate as well that I don't""" start="00:12:34.960" video="qanda-test" id="subtitle"]] +[[!template text="""think I covered in detail in the""" start="00:12:38.940" video="qanda-test" id="subtitle"]] +[[!template text="""presentation. Maybe all this,""" start="00:12:41.480" video="qanda-test" id="subtitle"]] +[[!template text="""but try it. 1 other sort of more from the fun""" start="00:12:48.060" video="qanda-test" id="subtitle"]] +[[!template text="""side is that I really think it's fun to write""" start="00:12:50.740" video="qanda-test" id="subtitle"]] +[[!template text="""the test. So if you haven't tests in your""" start="00:12:55.080" video="qanda-test" id="subtitle"]] +[[!template text="""package, you should start doing that because""" start="00:12:58.020" video="qanda-test" id="subtitle"]] +[[!template text="""it is fun. It might feel like some extra""" start="00:13:05.740" video="qanda-test" id="subtitle"]] +[[!template text="""work, but it really pays off in the long run,""" start="00:13:08.080" video="qanda-test" id="subtitle"]] +[[!template text="""especially if you have it in like a pipeline""" start="00:13:10.320" video="qanda-test" id="subtitle"]] +[[!template text="""and where you can run it regularly when you""" start="00:13:12.520" video="qanda-test" id="subtitle"]] +[[!template text="""do new commits, et cetera.""" start="00:13:13.940" video="qanda-test" id="subtitle"]] +[[!template text="""So, I mean, that's maybe obvious from,""" start="00:13:16.560" video="qanda-test" id="subtitle"]] +[[!template text="""if you look from the commercial side or your""" start="00:13:19.160" video="qanda-test" id="subtitle"]] +[[!template text="""work side to do it like that.""" start="00:13:21.080" video="qanda-test" id="subtitle"]] +[[!template text="""But even for your hobby project,""" start="00:13:22.260" video="qanda-test" id="subtitle"]] +[[!template text="""it can be very sort of pay off really well.""" start="00:13:26.260" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: It's worked really well when we're adding new""" start="00:13:32.900" video="qanda-test" id="subtitle"]] +[[!template text="""functionality or we're changing some of the""" start="00:13:35.020" video="qanda-test" id="subtitle"]] +[[!template text="""plumbing in the system.""" start="00:13:36.560" video="qanda-test" id="subtitle"]] +[[!template text="""You know, you go and you do some surgery and""" start="00:13:40.400" video="qanda-test" id="subtitle"]] +[[!template text="""then you run the tests.""" start="00:13:41.320" video="qanda-test" id="subtitle"]] +[[!template text="""And sometimes 6 to 10 tests will fail.""" start="00:13:45.400" video="qanda-test" id="subtitle"]] +[[!template text="""And you find there, you know,""" start="00:13:48.260" video="qanda-test" id="subtitle"]] +[[!template text="""it tends to be they're all interconnected and""" start="00:13:50.460" video="qanda-test" id="subtitle"]] +[[!template text="""it leads you back to the single source.""" start="00:13:52.920" video="qanda-test" id="subtitle"]] +[[!template text="""You fix that and you know it could be an edge""" start="00:13:56.660" video="qanda-test" id="subtitle"]] +[[!template text="""case and off by 1 or Sometimes it's an""" start="00:14:00.560" video="qanda-test" id="subtitle"]] +[[!template text="""assumption about the way something is used""" start="00:14:03.520" video="qanda-test" id="subtitle"]] +[[!template text="""and it's not actually always true.""" start="00:14:05.980" video="qanda-test" id="subtitle"]] +[[!template text="""And so, Matt's just really good at""" start="00:14:09.520" video="qanda-test" id="subtitle"]] +[[!template text="""identifying some of those scenarios and""" start="00:14:13.540" video="qanda-test" id="subtitle"]] +[[!template text="""keeping us honest, I guess I would say.""" start="00:14:17.480" video="qanda-test" id="subtitle"]] +[[!template text="""So I love, I run it as much as I before,""" start="00:14:22.900" video="qanda-test" id="subtitle"]] +[[!template text="""you know, even before I commit something.""" start="00:14:26.400" video="qanda-test" id="subtitle"]] +[[!template text="""So I get to see, you know,""" start="00:14:29.960" video="qanda-test" id="subtitle"]] +[[!template text="""if anything has progressed.""" start="00:14:30.940" video="qanda-test" id="subtitle"]] +[[!template text="""So yeah, I really recommend this process to""" start="00:14:39.480" video="qanda-test" id="subtitle"]] +[[!template text="""people. I haven't seen it done.""" start="00:14:42.120" video="qanda-test" id="subtitle"]] +[[!template text="""I don't think that, I don't know any other""" start="00:14:45.720" video="qanda-test" id="subtitle"]] +[[!template text="""package that has done it to this level.""" start="00:14:47.800" video="qanda-test" id="subtitle"]] +[[!template text="""And it's been working really great for us.""" start="00:14:51.560" video="qanda-test" id="subtitle"]] +[[!template text="""And I think, well, we'll see too when we""" start="00:14:55.440" video="qanda-test" id="subtitle"]] +[[!template text="""release to the general public.""" start="00:14:56.780" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: But Bob, also, maybe the test part of""" start="00:15:04.380" video="qanda-test" id="subtitle"]] +[[!template text="""different packages is not the first thing you""" start="00:15:06.400" video="qanda-test" id="subtitle"]] +[[!template text="""look at. So I know there are packages that""" start="00:15:08.900" video="qanda-test" id="subtitle"]] +[[!template text="""have testing, a lot of testing,""" start="00:15:10.960" video="qanda-test" id="subtitle"]] +[[!template text="""but how much, much testing they have or not,""" start="00:15:13.860" video="qanda-test" id="subtitle"]] +[[!template text="""I don't know. It's not what you normally look""" start="00:15:16.060" video="qanda-test" id="subtitle"]] +[[!template text="""into when you look at someone's else code.""" start="00:15:17.900" video="qanda-test" id="subtitle"]] +[[!template text="""You look maybe on the functionality side but""" start="00:15:20.600" video="qanda-test" id="subtitle"]] +[[!template text="""not on how they've done the sort of the""" start="00:15:22.760" video="qanda-test" id="subtitle"]] +[[!template text="""quality side. So there could be other""" start="00:15:26.540" video="qanda-test" id="subtitle"]] +[[!template text="""packages out there that are well equipped.""" start="00:15:28.780" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: I hope so. I hope so.""" start="00:15:31.800" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: What's the craziest bug you found when""" start="00:15:39.860" video="qanda-test" id="subtitle"]] +[[!template text="""writing these tests? Well,""" start="00:15:44.700" video="qanda-test" id="subtitle"]] +[[!template text="""What springs to my mind just now is that we""" start="00:15:50.760" video="qanda-test" id="subtitle"]] +[[!template text="""were doing some tests or I would do some""" start="00:15:52.760" video="qanda-test" id="subtitle"]] +[[!template text="""tests for when you narrow,""" start="00:15:55.920" video="qanda-test" id="subtitle"]] +[[!template text="""what do you say that? When you,""" start="00:15:57.940" video="qanda-test" id="subtitle"]] +[[!template text="""in outlining, when you sort of compress""" start="00:16:04.500" video="qanda-test" id="subtitle"]] +[[!template text="""things in an outline, so you just,""" start="00:16:06.480" video="qanda-test" id="subtitle"]] +[[!template text="""sorry Bob, maybe you have it,""" start="00:16:08.540" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: When you hide text.""" start="00:16:12.100" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: What I'm looking for? Yeah,""" start="00:16:12.740" video="qanda-test" id="subtitle"]] +[[!template text="""when you hide. So I was doing some cursor""" start="00:16:15.580" video="qanda-test" id="subtitle"]] +[[!template text="""movement over that. And I always assume that""" start="00:16:17.780" video="qanda-test" id="subtitle"]] +[[!template text="""if you do like a prefix argument to like a""" start="00:16:22.540" video="qanda-test" id="subtitle"]] +[[!template text="""simple cursor movement,""" start="00:16:23.800" video="qanda-test" id="subtitle"]] +[[!template text="""like control F moving 1 character position,""" start="00:16:26.420" video="qanda-test" id="subtitle"]] +[[!template text="""and you would give it the,""" start="00:16:28.340" video="qanda-test" id="subtitle"]] +[[!template text="""and then the prefix, like you want to move""" start="00:16:36.580" video="qanda-test" id="subtitle"]] +[[!template text="""like 2 or 3 positions,""" start="00:16:39.140" video="qanda-test" id="subtitle"]] +[[!template text="""you would do like control U 3 and then""" start="00:16:43.040" video="qanda-test" id="subtitle"]] +[[!template text="""control F and you move 3.""" start="00:16:44.240" video="qanda-test" id="subtitle"]] +[[!template text="""I always assumed that that would be exactly""" start="00:16:46.560" video="qanda-test" id="subtitle"]] +[[!template text="""the same as if you just hit the key control F""" start="00:16:49.240" video="qanda-test" id="subtitle"]] +[[!template text="""3 times, but it's not.""" start="00:16:50.740" video="qanda-test" id="subtitle"]] +[[!template text="""So it's not the bug, it's a feature,""" start="00:16:53.160" video="qanda-test" id="subtitle"]] +[[!template text="""but that was the craziest thing.""" start="00:16:54.620" video="qanda-test" id="subtitle"]] +[[!template text="""I spent the night trying to figure out why""" start="00:16:58.180" video="qanda-test" id="subtitle"]] +[[!template text="""our code was wrong, but It turns out that's""" start="00:17:00.720" video="qanda-test" id="subtitle"]] +[[!template text="""how Emacs behaves. Try it out yourself.""" start="00:17:03.560" video="qanda-test" id="subtitle"]] +[[!template text="""Try to move over the 3 dots at the end of""" start="00:17:07.920" video="qanda-test" id="subtitle"]] +[[!template text="""that and see what happens.""" start="00:17:09.140" video="qanda-test" id="subtitle"]] +[[!template text="""Do it with cursor hitting the key or using a""" start="00:17:14.060" video="qanda-test" id="subtitle"]] +[[!template text="""prefix argument and you see it behaves""" start="00:17:16.260" video="qanda-test" id="subtitle"]] +[[!template text="""differently. That was the craziest thing.""" start="00:17:18.720" video="qanda-test" id="subtitle"]] +[[!template text="""I think there was some other crazy thing or""" start="00:17:21.960" video="qanda-test" id="subtitle"]] +[[!template text="""deep learning also, but I can't come up with""" start="00:17:24.280" video="qanda-test" id="subtitle"]] +[[!template text="""it at the moment. So maybe I can write it in""" start="00:17:26.599" video="qanda-test" id="subtitle"]] +[[!template text="""the Q&A later.""" start="00:17:27.900" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: I think we're out of time on the stream,""" start="00:17:31.200" video="qanda-test" id="subtitle"]] +[[!template text="""but people are welcome to join Mats and Bob""" start="00:17:33.360" video="qanda-test" id="subtitle"]] +[[!template text="""here on BigBlueButton to further discuss""" start="00:17:35.280" video="qanda-test" id="subtitle"]] +[[!template text="""this. Thank you both.""" start="00:17:36.480" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, thank you. Thanks,""" start="00:17:38.674" video="qanda-test" id="subtitle"]] +[[!template text="""Makaay. Thank you. I don't know,""" start="00:17:46.100" video="qanda-test" id="subtitle"]] +[[!template text="""Is it only me and Bob here?""" start="00:17:48.740" video="qanda-test" id="subtitle"]] +[[!template text="""So Bob, do you want to say something?""" start="00:17:50.680" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, I think it's been a great day.""" start="00:17:57.440" video="qanda-test" id="subtitle"]] +[[!template text="""And I'm glad we did this.""" start="00:18:00.720" video="qanda-test" id="subtitle"]] +[[!template text="""It takes a lot of energy.""" start="00:18:02.280" video="qanda-test" id="subtitle"]] +[[!template text="""I'm just really excited about the progress""" start="00:18:15.140" video="qanda-test" id="subtitle"]] +[[!template text="""that this, and we're actually doing a lot of""" start="00:18:20.580" video="qanda-test" id="subtitle"]] +[[!template text="""QA at work and my professional software work""" start="00:18:23.940" video="qanda-test" id="subtitle"]] +[[!template text="""and looking at you know how we can do more""" start="00:18:28.500" video="qanda-test" id="subtitle"]] +[[!template text="""test driven development and so everybody's""" start="00:18:32.980" video="qanda-test" id="subtitle"]] +[[!template text="""talking about this you know we've got AI over""" start="00:18:35.980" video="qanda-test" id="subtitle"]] +[[!template text="""here that can generate test cases.""" start="00:18:37.540" video="qanda-test" id="subtitle"]] +[[!template text="""But, you know, strangely enough,""" start="00:18:40.200" video="qanda-test" id="subtitle"]] +[[!template text="""with the rapidity of development and web""" start="00:18:43.100" video="qanda-test" id="subtitle"]] +[[!template text="""applications, I think the level of testing""" start="00:18:46.720" video="qanda-test" id="subtitle"]] +[[!template text="""has gone down in recent years compared to""" start="00:18:50.140" video="qanda-test" id="subtitle"]] +[[!template text="""where it used to be, right?""" start="00:18:51.500" video="qanda-test" id="subtitle"]] +[[!template text="""Because the pace has gone up.""" start="00:18:53.040" video="qanda-test" id="subtitle"]] +[[!template text="""And so I think it's starting to turn again""" start="00:18:57.340" video="qanda-test" id="subtitle"]] +[[!template text="""where people are saying,""" start="00:18:58.740" video="qanda-test" id="subtitle"]] +[[!template text="""we can't just release crap into the""" start="00:19:01.940" video="qanda-test" id="subtitle"]] +[[!template text="""Webisphere and we have to better ourselves.""" start="00:19:08.120" video="qanda-test" id="subtitle"]] +[[!template text="""And with all these advanced tool sets that""" start="00:19:13.620" video="qanda-test" id="subtitle"]] +[[!template text="""you have, that you can do CICD testing,""" start="00:19:16.100" video="qanda-test" id="subtitle"]] +[[!template text="""you know, I just, I just see it coming""" start="00:19:19.860" video="qanda-test" id="subtitle"]] +[[!template text="""around, you know, as people develop new""" start="00:19:21.900" video="qanda-test" id="subtitle"]] +[[!template text="""things. So That's kind of exciting to me""" start="00:19:24.000" video="qanda-test" id="subtitle"]] +[[!template text="""because I came from a manufacturing culture""" start="00:19:26.980" video="qanda-test" id="subtitle"]] +[[!template text="""originally where we, our company actually""" start="00:19:30.300" video="qanda-test" id="subtitle"]] +[[!template text="""started a lot of the manufacturing quality""" start="00:19:33.800" video="qanda-test" id="subtitle"]] +[[!template text="""efforts that you saw in Japan and elsewhere""" start="00:19:37.420" video="qanda-test" id="subtitle"]] +[[!template text="""in America for a long time and that was you""" start="00:19:40.600" video="qanda-test" id="subtitle"]] +[[!template text="""know entirely through testing.""" start="00:19:42.040" video="qanda-test" id="subtitle"]] +[[!template text="""We used to just build incredible test cases""" start="00:19:46.640" video="qanda-test" id="subtitle"]] +[[!template text="""because we were combining software with""" start="00:19:49.120" video="qanda-test" id="subtitle"]] +[[!template text="""hardware. And if, you know,""" start="00:19:51.100" video="qanda-test" id="subtitle"]] +[[!template text="""the hardware doesn't work and you ship a""" start="00:19:53.460" video="qanda-test" id="subtitle"]] +[[!template text="""million units, you're,""" start="00:19:55.080" video="qanda-test" id="subtitle"]] +[[!template text="""you're in trouble. So,""" start="00:19:57.340" video="qanda-test" id="subtitle"]] +[[!template text="""that was just something we had to do.""" start="00:20:00.260" video="qanda-test" id="subtitle"]] +[[!template text="""And so it's nice to start to see that curve""" start="00:20:04.280" video="qanda-test" id="subtitle"]] +[[!template text="""come around. And I think,""" start="00:20:07.020" video="qanda-test" id="subtitle"]] +[[!template text="""you know, Matt Vance is very modest,""" start="00:20:10.380" video="qanda-test" id="subtitle"]] +[[!template text="""but I think he's really the 1 that started us""" start="00:20:16.680" video="qanda-test" id="subtitle"]] +[[!template text="""down this path and really made it into a""" start="00:20:20.400" video="qanda-test" id="subtitle"]] +[[!template text="""reality. So everybody else just gets to""" start="00:20:24.620" video="qanda-test" id="subtitle"]] +[[!template text="""benefit from that work.""" start="00:20:25.760" video="qanda-test" id="subtitle"]] +[[!template text="""So thanks.""" start="00:20:27.540" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: That's awesome.""" start="00:20:32.760" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing""" start="00:20:39.960" video="qanda-test" id="subtitle"]] +[[!template text="""more here, then maybe we should just close""" start="00:20:43.200" video="qanda-test" id="subtitle"]] +[[!template text="""this and I go over to write in the etherpad""" start="00:20:45.440" video="qanda-test" id="subtitle"]] +[[!template text="""the replies we had.""" start="00:20:47.960" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: Right, yeah, I think, let's see,""" start="00:20:51.900" video="qanda-test" id="subtitle"]] +[[!template text="""I see 1 other person here,""" start="00:20:53.520" video="qanda-test" id="subtitle"]] +[[!template text="""I believe Ihor just joined us.""" start="00:20:55.080" video="qanda-test" id="subtitle"]] +[[!template text="""Yeah. Yeah, so if you do want to discuss with""" start="00:20:58.780" video="qanda-test" id="subtitle"]] +[[!template text="""Mats and Bob, you're welcome to,""" start="00:21:00.220" video="qanda-test" id="subtitle"]] +[[!template text="""otherwise, yeah, we can close the room now.""" start="00:21:02.200" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: Well, I think I missed most of the talk""" start="00:21:05.800" video="qanda-test" id="subtitle"]] +[[!template text="""because I had power outage,""" start="00:21:06.900" video="qanda-test" id="subtitle"]] +[[!template text="""but the part I heard was about the mock""" start="00:21:12.180" video="qanda-test" id="subtitle"]] +[[!template text="""library. And you mentioned that you don't""" start="00:21:16.860" video="qanda-test" id="subtitle"]] +[[!template text="""like CL-let, but instead you use mock.""" start="00:21:20.200" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I was more saying that you have to do a""" start="00:21:29.700" video="qanda-test" id="subtitle"]] +[[!template text="""lot more work when you use the CL letdef.""" start="00:21:31.560" video="qanda-test" id="subtitle"]] +[[!template text="""It's for more ambitious and maybe more""" start="00:21:34.540" video="qanda-test" id="subtitle"]] +[[!template text="""complicated cases where you want to really""" start="00:21:37.000" video="qanda-test" id="subtitle"]] +[[!template text="""make a new implementation,""" start="00:21:38.840" video="qanda-test" id="subtitle"]] +[[!template text="""test implementation. If you use the mock,""" start="00:21:41.940" video="qanda-test" id="subtitle"]] +[[!template text="""you get a lot of things out of the box,""" start="00:21:44.380" video="qanda-test" id="subtitle"]] +[[!template text="""verifying that you actually,""" start="00:21:47.440" video="qanda-test" id="subtitle"]] +[[!template text="""like the mock was actually called for""" start="00:21:50.820" video="qanda-test" id="subtitle"]] +[[!template text="""instance, whereas if you do with the CLLatf,""" start="00:21:53.320" video="qanda-test" id="subtitle"]] +[[!template text="""you would have to take correct track of that""" start="00:21:56.520" video="qanda-test" id="subtitle"]] +[[!template text="""yourself. And so, so a lot of more work.""" start="00:22:02.020" video="qanda-test" id="subtitle"]] +[[!template text="""Oh yeah.""" start="00:22:03.760" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: I'm saying that most of the time CLLess is""" start="00:22:07.940" video="qanda-test" id="subtitle"]] +[[!template text="""used for simple cases actually.""" start="00:22:09.720" video="qanda-test" id="subtitle"]] +[[!template text="""Because, just for example,""" start="00:22:12.320" video="qanda-test" id="subtitle"]] +[[!template text="""the function always returns the same.""" start="00:22:15.100" video="qanda-test" id="subtitle"]] +[[!template text="""And it tends to be simple lambda that ignores""" start="00:22:17.980" video="qanda-test" id="subtitle"]] +[[!template text="""all the input arguments.""" start="00:22:19.040" video="qanda-test" id="subtitle"]] +[[!template text="""So that's really trivial most of the time but""" start="00:22:23.000" video="qanda-test" id="subtitle"]] +[[!template text="""I actually thought the opposite that mock is""" start="00:22:25.520" video="qanda-test" id="subtitle"]] +[[!template text="""supposed to be used for non-trivial cases.""" start="00:22:27.640" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Sorry, what was the question?""" start="00:22:32.280" video="qanda-test" id="subtitle"]] +[[!template text="""Mock was supposed to be used for non-trivial.""" start="00:22:35.280" video="qanda-test" id="subtitle"]] +[[!template text="""Yeah I mean I don't know how to explain this.""" start="00:22:47.680" video="qanda-test" id="subtitle"]] +[[!template text="""I mean, CLF can be used for non-trivial""" start="00:22:50.140" video="qanda-test" id="subtitle"]] +[[!template text="""definitely. You can define then any behavior""" start="00:22:54.400" video="qanda-test" id="subtitle"]] +[[!template text="""you want. You can write your own function,""" start="00:22:56.180" video="qanda-test" id="subtitle"]] +[[!template text="""but you need to keep track of whether that""" start="00:22:58.440" video="qanda-test" id="subtitle"]] +[[!template text="""function is called or not,""" start="00:22:59.620" video="qanda-test" id="subtitle"]] +[[!template text="""for instance. So you have to make note of""" start="00:23:06.260" video="qanda-test" id="subtitle"]] +[[!template text="""that the function was called so you can fire""" start="00:23:08.440" video="qanda-test" id="subtitle"]] +[[!template text="""sort of an error in case your function wasn't""" start="00:23:12.440" video="qanda-test" id="subtitle"]] +[[!template text="""called because that would be 1 error case.""" start="00:23:16.960" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: So you mean the mock fires an error if the""" start="00:23:20.660" video="qanda-test" id="subtitle"]] +[[!template text="""mocked function was actually not called?""" start="00:23:22.580" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, it does. Yes. So if your assumptions,""" start="00:23:30.060" video="qanda-test" id="subtitle"]] +[[!template text="""you sort of document with the mock also your""" start="00:23:33.900" video="qanda-test" id="subtitle"]] +[[!template text="""assumptions how your code is going to be""" start="00:23:37.080" video="qanda-test" id="subtitle"]] +[[!template text="""called. And if those are wrong,""" start="00:23:40.020" video="qanda-test" id="subtitle"]] +[[!template text="""you will get an error.""" start="00:23:41.120" video="qanda-test" id="subtitle"]] +[[!template text="""So you would, so if the implementation would""" start="00:23:43.680" video="qanda-test" id="subtitle"]] +[[!template text="""maybe change, for instance,""" start="00:23:44.840" video="qanda-test" id="subtitle"]] +[[!template text="""and not call the thing you're mocking,""" start="00:23:46.640" video="qanda-test" id="subtitle"]] +[[!template text="""then you will notice that.""" start="00:23:50.460" video="qanda-test" id="subtitle"]] +[[!template text="""But if you see a letdef,""" start="00:23:53.100" video="qanda-test" id="subtitle"]] +[[!template text="""then you will have to keep track of that""" start="00:23:54.840" video="qanda-test" id="subtitle"]] +[[!template text="""yourself. Okay, I see.""" start="00:23:57.560" video="qanda-test" id="subtitle"]] +[[!template text="""I see.""" start="00:23:58.260" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: And you know, our mode also uses a lot of""" start="00:24:01.240" video="qanda-test" id="subtitle"]] +[[!template text="""test. In our mode, we have a lot of tests""" start="00:24:09.340" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have.""" start="00:24:13.940" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: also. We rely on CLLatF for,""" start="00:24:15.900" video="qanda-test" id="subtitle"]] +[[!template text="""we don't use third-party libraries at all.""" start="00:24:19.220" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, you use CLLatF, okay.""" start="00:24:22.140" video="qanda-test" id="subtitle"]] +[[!template text="""Yeah. Yeah. Yeah. At First I found it very""" start="00:24:26.680" video="qanda-test" id="subtitle"]] +[[!template text="""powerful to use that, but then I sort of,""" start="00:24:29.480" video="qanda-test" id="subtitle"]] +[[!template text="""I learned more about how we can use the""" start="00:24:32.120" video="qanda-test" id="subtitle"]] +[[!template text="""mocking library for what I needed.""" start="00:24:34.340" video="qanda-test" id="subtitle"]] +[[!template text="""And I prefer that at the moment.""" start="00:24:36.900" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: I see, that is interesting.""" start="00:24:40.560" video="qanda-test" id="subtitle"]] +[[!template text="""Because I had seen it,""" start="00:24:42.500" video="qanda-test" id="subtitle"]] +[[!template text="""but I didn't consider that it's gonna be""" start="00:24:45.440" video="qanda-test" id="subtitle"]] +[[!template text="""useful even in simple cases.""" start="00:24:46.800" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: It has its limitations.""" start="00:24:52.640" video="qanda-test" id="subtitle"]] +[[!template text="""So it's like life, how you turn depends.""" start="00:24:58.260" video="qanda-test" id="subtitle"]] +[[!template text="""But maybe I should look more into the org""" start="00:25:03.740" video="qanda-test" id="subtitle"]] +[[!template text="""mode and the test case to learn more about""" start="00:25:05.880" video="qanda-test" id="subtitle"]] +[[!template text="""that. So thanks for pointing that out.""" start="00:25:07.480" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 3]: We are trying to cover as much as we can.""" start="00:25:14.620" video="qanda-test" id="subtitle"]] +[[!template text="""It's almost impossible for org.""" start="00:25:17.520" video="qanda-test" id="subtitle"]] +[[!template text="""But yeah, we keep adding more tests.""" start="00:25:20.500" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: That's great.""" start="00:25:22.780" video="qanda-test" id="subtitle"]] +[[!template text="""Someone's typing. I don't know.""" start="00:25:52.720" video="qanda-test" id="subtitle"]] +[[!template text="""Any more questions? No?""" start="00:25:54.340" video="qanda-test" id="subtitle"]] +[[!template text="""Okay, then I'll go back and try to document""" start="00:26:01.060" video="qanda-test" id="subtitle"]] +[[!template text="""this in the etherpad. Thank you everybody for""" start="00:26:05.200" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you guys. Great work.""" start="00:26:08.860" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 0]: joining. Great. Thank you.""" start="00:26:09.400" video="qanda-test" id="subtitle"]] +[[!template text="""Take care. Bye-bye.""" start="00:26:11.100" video="qanda-test" id="subtitle"]] +[[!template text="""[Speaker 1]: Take care. Bye. Silence.""" start="00:26:15.060" video="qanda-test" id="subtitle"]] + +Questions or comments? Please e-mail [matsl@gnu.org](mailto:matsl@gnu.org?subject=Comment%20for%20EmacsConf%202023%20test%3A%20What%20I%20learned%20by%20writing%20test%20cases%20for%20GNU%20Hyperbole) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/test-before.md b/2023/info/test-before.md new file mode 100644 index 00000000..8b140aad --- /dev/null +++ b/2023/info/test-before.md @@ -0,0 +1,42 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 27-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="test-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="test-mainVideo" data=""" +00:03.120 Introduction +03:11.160 ERT: Emacs Lisp Regression Testing +04:14.360 Assertions with `should` +04:56.920 Running a test case +06:54.560 Debug a test +07:50.380 Commercial break: Hyperbole +09:10.480 Instrument function on the fly +10:39.120 Mocking +14:41.240 cl-letf +15:24.100 Hooks +15:55.720 Side effects and initial buffer state +17:05.100 with-temp-buffer +17:16.520 make-temp-file +17:33.288 buffer-string +18:09.920 buffer-name +18:51.980 major-mode +19:02.680 unwind-protect +20:15.100 Input, with-simulated-input +21:38.460 Running all tests +23:03.220 Batch mode +24:05.060 Skipping tests +26:08.460 Conclusion + +"""]]<div></div>Duration: 26:55 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li><li><a href="https://toobnix.org/w/4XmcGSe3TQrJJNUqQXqK2B">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="test-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="test-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus"></audio></div><div></div>Duration: 26:22 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/test-nav.md b/2023/info/test-nav.md new file mode 100644 index 00000000..a595b88c --- /dev/null +++ b/2023/info/test-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a> +Next by track: <a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/unentangling-after.md b/2023/info/unentangling-after.md new file mode 100644 index 00000000..f6e4924f --- /dev/null +++ b/2023/info/unentangling-after.md @@ -0,0 +1,273 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="unentangling-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""Hello, I'm Alexey Bychkadov,""" start="00:00:01.220" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and I'm talking about unentangling projects""" start="00:00:03.740" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and repositories, or maybe entangling them,""" start="00:00:06.899" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""depending on how you look at that.""" start="00:00:09.679" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So there's going to be a short workflow note.""" start="00:00:12.980" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I work as a researcher,""" start="00:00:16.619" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So there are 3 main components to my work,""" start="00:00:19.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I guess. First, I think,""" start="00:00:23.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so I try to come up with a new ideas that""" start="00:00:26.000" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""usually results in some collection of notes I""" start="00:00:28.140" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""have. Second, I try things out.""" start="00:00:31.580" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So it usually means that I write code.""" start="00:00:33.760" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And third, I communicate.""" start="00:00:36.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I prepare papers, presentations,""" start="00:00:38.739" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""memos, and so on and so forth.""" start="00:00:41.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And so The workflow problem I had is""" start="00:00:44.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""sometimes all this does not really fit into a""" start="00:00:49.160" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""concept of a single repository per project.""" start="00:00:53.000" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I might want to have,""" start="00:00:56.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for example, a source code in 1 repository""" start="00:00:58.180" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and then I would like to have a paper in""" start="00:01:01.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""another 1 and then I want to have a""" start="00:01:03.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""collection of notes somewhere unrelated to""" start="00:01:05.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""those 2. Emacs is pretty good at supporting""" start="00:01:08.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""your workflows and I figured I should share""" start="00:01:12.500" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""what I used and what works for me.""" start="00:01:16.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So, from the technical perspective,""" start="00:01:20.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""things are pretty easy.""" start="00:01:26.479" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I use a collection of pretty standard""" start="00:01:27.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""components of Emacs. So it's a projectile org""" start="00:01:30.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""mode with this capture templates and other""" start="00:01:33.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""things. Then I sustained a collection of""" start="00:01:35.360" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""nodes in something that is called org-roam,""" start="00:01:38.100" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""which is essentially it's a glorified""" start="00:01:40.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""collection of org mode files.""" start="00:01:43.580" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Then I used directory local variables,""" start="00:01:46.100" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""maybe a C text to jump through the source""" start="00:01:48.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""code and very, very little LELisp glue to""" start="00:01:51.140" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""make this all work, but that's not really""" start="00:01:54.920" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""rocket science. So that's the workflow I""" start="00:01:58.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""would like to talk about today.""" start="00:02:00.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So what I mean by all that,""" start="00:02:04.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""it's pretty straightforward to make Emacs,""" start="00:02:07.960" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""to make it easy to jump around a single""" start="00:02:10.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""repository in Emacs. So if I,""" start="00:02:12.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Now I have Doom Emacs,""" start="00:02:15.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""but that's not really specific to a Doom""" start="00:02:16.640" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that'll work in any Emacs configuration.""" start="00:02:19.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Well, key bindings might be different,""" start="00:02:23.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""but that's not the point,""" start="00:02:27.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I guess, for the workflow.""" start="00:02:28.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So if I hit space 2 times,""" start="00:02:30.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I have all the list of files within my""" start="00:02:31.960" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""project, right? So if I create a couple of""" start="00:02:34.640" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""custom shortcuts, so if I press a magic""" start="00:02:38.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""button, hyper-OP, don't worry about""" start="00:02:42.780" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""hyper-key. So I want it to have a modifier""" start="00:02:45.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""key all to myself, so that would,""" start="00:02:47.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""no program on my computer would use that""" start="00:02:50.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""except Emacs. Emacs would use that only when""" start="00:02:53.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I tell it to, so I have a hyper key instead""" start="00:02:55.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""of caps lock. That's pretty easy to do in GNU""" start="00:02:57.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Linux system. So when I press this magic""" start="00:03:00.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""keys, I have a menu that's a normal key""" start="00:03:04.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""binding. Yeah, essentially an Emacs.""" start="00:03:07.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And if I hit, for example,""" start="00:03:10.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""R, I end up in a readme file within this""" start="00:03:12.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""specific repository I was sitting in,""" start="00:03:15.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So if I want to document something""" start="00:03:17.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""real quick, I go to the readme file.""" start="00:03:19.000" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Then I could go to a change log file,""" start="00:03:21.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So I have a list of changes and the""" start="00:03:25.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""way it works usually, for example,""" start="00:03:27.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""if I'm working in some code,""" start="00:03:29.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I created a couple of dummy files in there,""" start="00:03:32.220" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so I'm working in some code and then I""" start="00:03:34.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""implemented something and I can just use the""" start="00:03:36.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""org mode capture mechanisms to keep track of""" start="00:03:42.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""what I want to discuss with colleagues next""" start="00:03:46.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""time. For example, I could just hit capture""" start="00:03:48.880" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""repo specific changelog entry and I""" start="00:03:52.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""implemented a feature and I can continue""" start="00:03:56.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""working without this context switching.""" start="00:04:02.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And then if I want to go to the change log,""" start="00:04:04.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""well, it is there. And next time I talk to""" start="00:04:06.880" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""the colleagues about the source code,""" start="00:04:11.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I can open the change log and go through""" start="00:04:12.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""entries 1 by 1 and discuss what I haven't""" start="00:04:14.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""implemented last time.""" start="00:04:16.800" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I could go to project specific,""" start="00:04:19.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""sorry, to repo specific to-do list.""" start="00:04:24.100" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And I have list of to-dos that would leave""" start="00:04:26.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""within a repository. And for example,""" start="00:04:29.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I could have a high level structure here,""" start="00:04:31.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""work distribution between team members and""" start="00:04:34.640" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""other things that sort of face outer world,""" start="00:04:36.460" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so to speak. And of course,""" start="00:04:39.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""there are very many ways to jump through the""" start="00:04:42.840" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""source code conveniently.""" start="00:04:45.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I ended up not using language servers I use a""" start="00:04:46.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""special program called ctags and so the way""" start="00:04:49.960" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""it works is just I call projectile regenerate""" start="00:04:53.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""tags and it creates the special tags file""" start="00:04:56.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""within the repository and then I can again""" start="00:05:00.460" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""run it I usually just hit a single keystroke""" start="00:05:06.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and here is all the symbols that are there in""" start="00:05:11.520" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""my source code, regardless of the language,""" start="00:05:14.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So I can jump to the main function and""" start="00:05:17.160" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that'll be a C++ file.""" start="00:05:19.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Or I could go to the super function,""" start="00:05:21.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""which I had in my Python file.""" start="00:05:22.740" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And this comes in pretty convenient if I have""" start="00:05:25.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""a mixture of languages.""" start="00:05:27.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Sometimes I can have some algorithm specific""" start="00:05:28.360" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""code in Julia, and then I can have some""" start="00:05:30.800" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Python glue within the same source code""" start="00:05:33.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""repository, it makes it really convenient to""" start="00:05:35.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""jump between all of those.""" start="00:05:39.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""But I have a few problems here.""" start="00:05:43.080" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So just to give you a little bit of context,""" start="00:05:47.360" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for example, here is a real project that""" start="00:05:49.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""corresponds to real paper.""" start="00:05:53.100" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I have a single note about that project where""" start="00:05:55.840" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I keep all the things related to that project""" start="00:05:59.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""here, but that's a private note.""" start="00:06:01.780" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So for example, again,""" start="00:06:03.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I hit a special key that invokes my org-roam""" start="00:06:04.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""function that gives me a menu of my notes.""" start="00:06:08.640" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And so here is the paper,""" start="00:06:13.080" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""essentially. And I can have a paper timeline,""" start="00:06:15.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and I can have a list of all the dates what""" start="00:06:17.900" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""happened to the paper with links to my email,""" start="00:06:21.180" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So for example if I hit this link that""" start="00:06:24.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""will open a specific email and that doesn't""" start="00:06:27.700" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""work outside of my computer,""" start="00:06:30.160" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""doesn't make any sense to keep it in the""" start="00:06:31.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""outer world facing repository,""" start="00:06:33.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for example. So that's something to myself,""" start="00:06:35.500" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? Sometimes I want to have like this""" start="00:06:37.360" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""list of working notes,""" start="00:06:41.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right, that contain like,""" start="00:06:43.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for example, yeah, I might produce this kind""" start="00:06:45.780" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""of things for internal discussion,""" start="00:06:49.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? It has some marks,""" start="00:06:50.640" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""it has some margin notes and things like""" start="00:06:52.500" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that. Maybe again, health-based ideas that""" start="00:06:54.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""may or may not end up in a repository,""" start="00:06:57.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""in the final paper or in a source code,""" start="00:07:01.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""but still I want to have it somewhere.""" start="00:07:03.220" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And well, long story short,""" start="00:07:07.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I need a project folder that would be""" start="00:07:08.800" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""unrelated to the source code or to the source""" start="00:07:11.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""code repository or to the paper itself or a""" start="00:07:16.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""final report, right? And 1 way,""" start="00:07:19.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""as usual, there are multiple ways to achieve""" start="00:07:22.960" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that, I suppose. And 1 way to do that is,""" start="00:07:24.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so I create a special folder within my""" start="00:07:29.040" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""org-roam storage. So it's a special folder""" start="00:07:33.160" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""outside of Henry Postories that got backed up""" start="00:07:38.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""to my hard drive with certain redundancy,""" start="00:07:40.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""but I don't really need like version control,""" start="00:07:44.080" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""full blown version control for that.""" start="00:07:46.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I'm okay with just having a couple of""" start="00:07:48.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""backups, right? So this is the folder you see""" start="00:07:49.760" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""here. So PKB stands for personal knowledge""" start="00:07:52.900" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""base, and I have a folder project notes in""" start="00:07:55.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""there, right? So, and How does it work?""" start="00:07:58.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I have a folder per project in there,""" start="00:08:01.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""essentially. And here I can have all the""" start="00:08:05.020" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""stuff that kind of belongs to me and I do not""" start="00:08:07.900" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""publish it anywhere. And then,""" start="00:08:11.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""For example, a source code repository knows""" start="00:08:15.420" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""about that folder and a paper repository""" start="00:08:20.460" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""knows about that folder.""" start="00:08:23.460" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And anything else that might leave in""" start="00:08:25.120" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""separate places all over my system can know""" start="00:08:26.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""about that folder. How do I achieve that?""" start="00:08:28.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Well, essentially this is 1 of the use cases""" start="00:08:30.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for the directory local variables,""" start="00:08:34.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So for example,""" start="00:08:36.360" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""how does it work from the user perspective?""" start="00:08:39.520" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So if I hit a special key,""" start="00:08:41.580" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""oh, sorry, if I hit a special key,""" start="00:08:44.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that would be open project.""" start="00:08:48.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And then for example, org mode file,""" start="00:08:51.680" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So this is my personal notes about the""" start="00:08:55.920" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""maxconf, not specifically about this very""" start="00:08:58.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""talk, but I can have, you know,""" start="00:09:01.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""the house baked ideas here again,""" start="00:09:02.580" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""presentation tools and things like that.""" start="00:09:04.760" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And how does that happen?""" start="00:09:07.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""If we try to like look at the code,""" start="00:09:09.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""the e-list magic here,""" start="00:09:13.080" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""what is happening is it's just a couple of""" start="00:09:15.040" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""lines of code, in fact,""" start="00:09:17.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so let me just press Control,""" start="00:09:18.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""help key. And so the key I was pressing is""" start="00:09:22.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""open project or my file.""" start="00:09:28.140" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And so what we see here,""" start="00:09:30.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""there is a single, so it's just a call to a""" start="00:09:32.220" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""find file function. So I opened that file and""" start="00:09:34.760" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""there is a special function that figures out""" start="00:09:37.200" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""what is the like umbrella project nose file""" start="00:09:40.580" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and that's, again, that's very easy.""" start="00:09:44.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So essentially if a variable describing this,""" start="00:09:47.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""the name for that project is defined,""" start="00:09:51.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""then I use that as my project folder name.""" start="00:09:54.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""If not, I take the project name from the""" start="00:09:57.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""project tile. Well, that's pretty much it.""" start="00:10:00.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And how do I define this variable?""" start="00:10:03.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Is essentially there is this magical file in""" start="00:10:09.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""a folder called dear locals,""" start="00:10:12.500" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""elist. And I just put it there.""" start="00:10:14.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And then whenever I go into that folder or""" start="00:10:17.440" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""any of its children folders,""" start="00:10:20.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I get this variable defined.""" start="00:10:22.300" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And that's pretty much it.""" start="00:10:24.840" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""That's how it works for me.""" start="00:10:26.280" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""I guess 1 thing that I wanted to emphasize""" start="00:10:31.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""specifically about that is of course,""" start="00:10:35.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""it is a time tracking,""" start="00:10:37.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""right? So what is I find especially important""" start="00:10:39.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""when I work in something and I want to clock""" start="00:10:42.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""time, I usually do not want this information""" start="00:10:44.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""to be in a source code repository or in a""" start="00:10:47.800" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""paper repository because other people I work""" start="00:10:50.340" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""with will not be particularly happy about""" start="00:10:52.600" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""that, especially if most of them do not use""" start="00:10:54.840" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Emacs and they'll see this long list of org""" start="00:10:57.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""clocked data and that doesn't look nice in a""" start="00:11:00.720" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""plain text format. So what I usually do if I""" start="00:11:03.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""want to clock in some time and then later""" start="00:11:07.540" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""analyze what I've been spending time on,""" start="00:11:10.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so I go to my org mode file and I go to the,""" start="00:11:12.560" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""my current project to-dos and I clock in""" start="00:11:16.880" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""there. And that's how it works.""" start="00:11:21.820" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So again, what comes in handy,""" start="00:11:23.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""if I hit Control O, I just go back to the""" start="00:11:28.860" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""file I jumped in into and that's I jumped""" start="00:11:31.500" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""from so that's also pretty handy.""" start="00:11:34.240" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So again no no rocket science in there.""" start="00:11:36.220" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I create a directory local variable that""" start="00:11:40.380" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""helps me to figure out what umbrella project""" start="00:11:42.660" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""does this particular folder belongs to.""" start="00:11:46.620" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And this way I make Emacs aware of,""" start="00:11:49.940" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""for example, facts like,""" start="00:11:53.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""so this source code belongs to that project.""" start="00:11:54.480" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And this paper, this repository with a paper""" start="00:11:56.740" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""also belongs to that project.""" start="00:11:59.180" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And I can have capture templates that would""" start="00:12:01.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""save my notes into the my private notes file""" start="00:12:04.060" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and my to-dos and go to my private note files""" start="00:12:07.800" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""and so on and so forth.""" start="00:12:10.920" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""So I find it pretty simple but that really""" start="00:12:12.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""helps to reduce this context switching.""" start="00:12:15.520" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And I don't believe it allows me to save""" start="00:12:19.600" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""time, but that probably helps me to stay""" start="00:12:22.040" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""focused. And this is what is really""" start="00:12:26.260" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""important, I believe. So thank you very much.""" start="00:12:28.420" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""And if you have any comments or suggestions""" start="00:12:31.400" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""to that, please do jump into the discussion.""" start="00:12:33.320" video="mainVideo-unentangling" id="subtitle"]] +[[!template text="""Yeah, after the talk, thank you.""" start="00:12:37.120" video="mainVideo-unentangling" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20unentangling%3A%20%28Un%29entangling%20projects%20and%20repos) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/unentangling-before.md b/2023/info/unentangling-before.md new file mode 100644 index 00000000..d8a2318c --- /dev/null +++ b/2023/info/unentangling-before.md @@ -0,0 +1,12 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 13-min talk; Q&A: Etherpad +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="unentangling-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 12:39 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/wLxyZBoFAad575Lp4PGyoF">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/unentangling-nav.md b/2023/info/unentangling-nav.md new file mode 100644 index 00000000..24e0a4b0 --- /dev/null +++ b/2023/info/unentangling-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a> +Next by track: <a href="/2023/talks/devel">Emacs development updates</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/uni-after.md b/2023/info/uni-after.md new file mode 100644 index 00000000..2bfe8152 --- /dev/null +++ b/2023/info/uni-after.md @@ -0,0 +1,971 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="uni-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Hello everyone. I'm James Howell.""" start="00:00:00.000" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I teach biochemistry and""" start="00:00:01.940" video="mainVideo-uni" id="subtitle"]] +[[!template text="""molecular biology at Penn State University.""" start="00:00:03.540" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'm going to talk today""" start="00:00:07.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""about using Emacs to make all of""" start="00:00:08.880" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the materials for presenting""" start="00:00:11.480" video="mainVideo-uni" id="subtitle"]] +[[!template text="""course meetings in my courses.""" start="00:00:13.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Everything that you're going to see today is""" start="00:00:15.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""what I've made using""" start="00:00:18.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the methods that I'm going to describe.""" start="00:00:20.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""The main point is that you can take""" start="00:00:26.200" video="mainVideo-uni" id="subtitle"]] +[[!template text="""an Org document and""" start="00:00:29.720" video="mainVideo-uni" id="subtitle"]] +[[!template text="""with a single Emacs document,""" start="00:00:32.080" video="mainVideo-uni" id="subtitle"]] +[[!template text="""make both a pretty text document""" start="00:00:34.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that a student can have""" start="00:00:39.080" video="mainVideo-uni" id="subtitle"]] +[[!template text="""on the desk and take notes on.""" start="00:00:40.380" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And also, I hope,""" start="00:00:42.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""fairly useful and attractive slides""" start="00:00:44.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""like the ones that I'm presenting right now.""" start="00:00:49.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Both of these""" start="00:00:51.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""from a single source document.""" start="00:00:52.860" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Okay. If you'd like""" start="00:00:56.660" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to see the handout that goes along with this,""" start="00:00:59.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""you can download it""" start="00:01:00.920" video="mainVideo-uni" id="subtitle"]] +[[!template text="""at the [Sourcehut] repository where""" start="00:01:02.800" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've put— everything's here.""" start="00:01:04.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So if you'd like to go look at it,""" start="00:01:05.960" video="mainVideo-uni" id="subtitle"]] +[[!template text="""you can follow with the handout.""" start="00:01:07.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So I promised to talk about""" start="00:01:09.940" video="mainVideo-uni" id="subtitle"]] +[[!template text="""both authoring and presenting.""" start="00:01:11.240" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Presenting""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""And first I'm going to talk about presenting.""" start="00:01:12.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'm not the only one who does this.""" start="00:01:14.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You might have seen System Crafters [David Wilson]""" start="00:01:16.600" video="mainVideo-uni" id="subtitle"]] +[[!template text="""or Prot's [Protesilaos Stavrou's] channel or""" start="00:01:19.300" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Mike Zemansky's channel on Youtube.""" start="00:01:20.640" video="mainVideo-uni" id="subtitle"]] +[[!template text="""(Prot actually is going to be presenting tomorrow.)""" start="00:01:23.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Maybe you've seen this""" start="00:01:26.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""chemical engineer at Carnegie Mellon,""" start="00:01:28.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""John Kitchin or Eric Fraga""" start="00:01:30.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""or Olivier Berger all have made""" start="00:01:32.160" video="mainVideo-uni" id="subtitle"]] +[[!template text="""blog posts about using Org mode""" start="00:01:34.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to produce course materials.""" start="00:01:36.520" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This pair Ro and Namkoon""" start="00:01:39.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""actually published a peer reviewed paper.""" start="00:01:41.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's prior art here""" start="00:01:43.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that I'd like to acknowledge.""" start="00:01:45.740" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Hardware""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Let me talk about my practices:""" start="00:01:47.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""First, the hardware.""" start="00:01:50.840" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is the hardware that I'm using to""" start="00:01:51.520" video="mainVideo-uni" id="subtitle"]] +[[!template text="""record this recording at the very moment,""" start="00:01:55.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but also I carry these""" start="00:01:59.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""into every course meeting.""" start="00:02:01.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've done this for quite a while,""" start="00:02:05.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this entire semester,""" start="00:02:07.120" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and a few previous semesters""" start="00:02:09.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""where everything fits in a backpack.""" start="00:02:11.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I do every meeting with this tablet—""" start="00:02:14.240" video="mainVideo-uni" id="subtitle"]] +[[!template text="""it's a Microsoft Surface that I put""" start="00:02:18.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a Linux distribution on—and this laptop.""" start="00:02:20.840" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've got a bag full of""" start="00:02:26.600" video="mainVideo-uni" id="subtitle"]] +[[!template text="""dongles and connectors and so forth.""" start="00:02:29.600" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It all fits in a backpack.""" start="00:02:34.080" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is very mobile.""" start="00:02:35.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I can set it up and tear it down""" start="00:02:36.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""before and after every class""" start="00:02:38.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""with just a couple minutes.""" start="00:02:39.700" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's the laptop and the""" start="00:02:41.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""tablet with a stylus.""" start="00:02:42.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Where's my stylus?""" start="00:02:45.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So that I can draw...""" start="00:02:46.580" video="mainVideo-uni" id="subtitle"]] +[[!template text="""... which is very useful.""" start="00:02:51.500" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Obviously, I need a camera.""" start="00:02:52.520" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Today, I'm using a desk mic,""" start="00:02:55.860" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but when I'm remote,""" start="00:02:57.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I use a lapel mic.""" start="00:02:59.100" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and a video converter,""" start="00:03:01.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and I'll show you why that's important.""" start="00:03:02.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And then all of the ancillary equipment.""" start="00:03:04.380" video="mainVideo-uni" id="subtitle"]] +[[!template text="""One thing that's nice about using""" start="00:03:09.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a completely free software stack is""" start="00:03:11.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that it tends to run""" start="00:03:14.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""on underpowered hardware,""" start="00:03:15.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and none of the software cost anything.""" start="00:03:18.320" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I could have spent much less than this""" start="00:03:20.540" video="mainVideo-uni" id="subtitle"]] +[[!template text="""on a used computer and""" start="00:03:23.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a used tablet. And everything else,""" start="00:03:25.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""these are high estimates.""" start="00:03:28.200" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I spent way less than""" start="00:03:30.300" video="mainVideo-uni" id="subtitle"]] +[[!template text="""$1,000 for all of this equipment.""" start="00:03:31.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And it's my equipment,""" start="00:03:34.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""so I have hardware""" start="00:03:35.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and software control over it,""" start="00:03:37.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Which is nice.""" start="00:03:38.960" video="mainVideo-uni" id="subtitle"]] +[[!template text="""If you have an attitude of upcycling and building,""" start="00:03:41.100" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and [if] this is a hobby anyway,""" start="00:03:43.240" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this is an easy way—""" start="00:03:45.190" video="mainVideo-uni" id="subtitle"]] +[[!template text="""what I'm saying is—""" start="00:03:47.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the entry into using these things,""" start="00:03:48.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there's certainly a very low cost barrier.""" start="00:03:51.370" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Because the hardware is so weak,""" start="00:03:58.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I have the tablet for doing tablet stuff,""" start="00:04:01.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and then I use the laptop to""" start="00:04:05.250" video="mainVideo-uni" id="subtitle"]] +[[!template text="""do all of the streaming and recording.""" start="00:04:06.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I take the video output""" start="00:04:08.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""of the tablet and convert it to""" start="00:04:11.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""USB input into the laptop.""" start="00:04:13.830" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Just to give you a diagram here,""" start="00:04:19.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there's a laptop and there's a tablet.""" start="00:04:21.930" video="mainVideo-uni" id="subtitle"]] +[[!template text="""The tablet has a stylus.""" start="00:04:23.710" video="mainVideo-uni" id="subtitle"]] +[[!template text="""They both run GNU/Linux distributions.""" start="00:04:25.930" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You've got a webcam that""" start="00:04:29.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""goes into the laptop.""" start="00:04:30.950" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You've got video output""" start="00:04:32.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""from the tablet that goes into the laptop.""" start="00:04:33.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's a microphone that""" start="00:04:37.890" video="mainVideo-uni" id="subtitle"]] +[[!template text="""goes into the laptop,""" start="00:04:39.350" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and then audio and video come out of""" start="00:04:40.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the laptop and go into""" start="00:04:43.210" video="mainVideo-uni" id="subtitle"]] +[[!template text="""some AV system or another.""" start="00:04:44.410" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Example setup""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Okay. This was Wednesday,""" start="00:04:46.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""teaching microbiology.""" start="00:04:49.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's the tablet, there's the laptop.""" start="00:04:51.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's the external screen""" start="00:04:53.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""in the podium here you can""" start="00:04:55.370" video="mainVideo-uni" id="subtitle"]] +[[!template text="""plug into the AV system.""" start="00:04:57.210" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There it is. From where I stand,""" start="00:05:00.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this is what the screen looks like.""" start="00:05:04.210" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is what students are seeing,""" start="00:05:06.010" video="mainVideo-uni" id="subtitle"]] +[[!template text="""on the live stream""" start="00:05:08.225" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and later on the recording.""" start="00:05:09.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And students in the room""" start="00:05:10.780" video="mainVideo-uni" id="subtitle"]] +[[!template text="""can see this as well.""" start="00:05:11.720" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So you notice this is kind of meta,""" start="00:05:12.640" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but the camera and""" start="00:05:15.100" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the contents of the screen are""" start="00:05:17.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there when I wander around,""" start="00:05:18.760" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and when I stand in front of the screen,""" start="00:05:20.500" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the students who aren't in the room can""" start="00:05:22.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""still see what I'm pointing to on the screen.""" start="00:05:23.940" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Nobody gets left out.""" start="00:05:27.400" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Presentation software: flexibility in function""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Let's talk about""" start="00:05:30.520" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the software that I use.""" start="00:05:31.480" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's a lot of different things that""" start="00:05:33.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I want to be able to show.""" start="00:05:35.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And so I need a few different""" start="00:05:37.640" video="mainVideo-uni" id="subtitle"]] +[[!template text="""software packages— besides Emacs.""" start="00:05:39.300" video="mainVideo-uni" id="subtitle"]] +[[!template text="""For drawing on the tablet, I use""" start="00:05:42.400" video="mainVideo-uni" id="subtitle"]] +[[!template text="""(I don't know quite how this is pronounced:""" start="00:05:45.080" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I think it's) Xournal++""" start="00:05:48.360" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I use the web quite a bit,""" start="00:05:51.200" video="mainVideo-uni" id="subtitle"]] +[[!template text="""especially if I want to just""" start="00:05:54.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""spontaneously look something up.""" start="00:05:55.720" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Often I use video,""" start="00:05:57.760" video="mainVideo-uni" id="subtitle"]] +[[!template text="""especially molecular animations.""" start="00:05:59.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And that's incredibly powerful.""" start="00:06:01.500" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And then now and again, I want to look at text.""" start="00:06:04.700" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Especially in""" start="00:06:06.940" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the English course that I teach,""" start="00:06:08.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there's quite a bit of text.""" start="00:06:09.800" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'll use Emacs for that.""" start="00:06:11.840" video="mainVideo-uni" id="subtitle"]] +[[!template text="""The video compositor, the thing that""" start="00:06:15.000" video="mainVideo-uni" id="subtitle"]] +[[!template text="""puts this video and me in the green screen.""" start="00:06:18.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and all of this stuff together, is called""" start="00:06:22.480" video="mainVideo-uni" id="subtitle"]] +[[!template text="""OBS Studio—and that also does recording.""" start="00:06:25.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's ALMOST a completely free software stack.""" start="00:06:34.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I use Zoom to do""" start="00:06:37.510" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the streaming and video""" start="00:06:38.750" video="mainVideo-uni" id="subtitle"]] +[[!template text="""conferencing because all of""" start="00:06:39.930" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the students are forced to use it for""" start="00:06:41.030" video="mainVideo-uni" id="subtitle"]] +[[!template text="""their other classes and""" start="00:06:42.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've gone along with it.""" start="00:06:44.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But a good alternative is""" start="00:06:45.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Jitsi Meet. There are others.""" start="00:06:46.670" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Okay. Again, here's""" start="00:06:48.860" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the hardware setup. On the tablet,""" start="00:06:50.730" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'm running Xournal++. On the laptop,""" start="00:06:53.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've got Firefox and VLC, and Emacs.""" start="00:06:56.590" video="mainVideo-uni" id="subtitle"]] +[[!template text="""OBS is compositing that together.""" start="00:07:00.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And I use Zoom, but you could use Jitsi.""" start="00:07:02.890" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Live demonstration""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""All right, let's""" start="00:07:05.950" video="mainVideo-uni" id="subtitle"]] +[[!template text="""demonstrate this live. Here we go.""" start="00:07:07.930" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Here goes, nothing. The drawing program""" start="00:07:09.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is really good because I can draw""" start="00:07:13.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""with the stylus on a tablet.""" start="00:07:15.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's a remarkable thing—""" start="00:07:17.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I teach in these big lecture halls,""" start="00:07:20.090" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and I guess they want them to be fancy?""" start="00:07:22.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And so they don't have blackboards and""" start="00:07:24.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""whiteboards! If I want to be able to draw,""" start="00:07:25.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""if I want to do anything approaching analog,""" start="00:07:29.010" video="mainVideo-uni" id="subtitle"]] +[[!template text="""it has to be with this software!""" start="00:07:32.170" video="mainVideo-uni" id="subtitle"]] +[[!template text="""In this presentation, I""" start="00:07:35.290" video="mainVideo-uni" id="subtitle"]] +[[!template text="""don't have very many diagrams,""" start="00:07:37.810" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but in my courses, most of""" start="00:07:39.490" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the slides are complicated diagrams.""" start="00:07:41.510" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Being able to annotate them""" start="00:07:44.250" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is really important.""" start="00:07:45.810" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is why I don't use Emacs for""" start="00:07:47.550" video="mainVideo-uni" id="subtitle"]] +[[!template text="""presenting these kinds of documents,""" start="00:07:50.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""because I want to be able""" start="00:07:54.530" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to mark them up visually.""" start="00:07:55.810" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I can show you what that looks like.""" start="00:07:57.450" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""OBS""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""By the way, here's how OBS works:""" start="00:07:59.850" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I can go from different "scenes"""" start="00:08:02.830" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So I can just do just me,""" start="00:08:04.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""or I can show you the slides,""" start="00:08:06.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""or I can show you what I see on the tablet.""" start="00:08:08.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""On the tablet, I can go""" start="00:08:10.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""through all of the— notice here,""" start="00:08:12.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'm scrolling through all""" start="00:08:14.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""of the different slides.""" start="00:08:16.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I've got all kinds of different markup tools,""" start="00:08:17.350" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and tools for controlling""" start="00:08:19.990" video="mainVideo-uni" id="subtitle"]] +[[!template text="""zoom and what page I'm on,""" start="00:08:23.170" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but you don't have to see that.""" start="00:08:24.830" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Firefox""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Okay. Firefox, boy, I do a lot of this.""" start="00:08:27.190" video="mainVideo-uni" id="subtitle"]] +[[!template text="""All of the quizzes,""" start="00:08:32.390" video="mainVideo-uni" id="subtitle"]] +[[!template text="""quizzes and exams in my courses""" start="00:08:36.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""are online on this""" start="00:08:38.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""web platform called Canvas,""" start="00:08:40.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""which is good enough.""" start="00:08:43.370" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's based on a GPL3 package,""" start="00:08:45.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but this one is proprietary for Penn State.""" start="00:08:49.590" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Notice that there's a quiz""" start="00:08:53.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""every day, and this quiz,""" start="00:08:55.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""every quiz has a recording from""" start="00:08:57.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that day and you notice""" start="00:08:59.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there's a picture of me teaching,""" start="00:09:00.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""pointing to the slides.""" start="00:09:01.890" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's the slides themselves.""" start="00:09:05.030" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I use OBS to composite in""" start="00:09:06.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the Zoom chat because I teach this hybrid.""" start="00:09:09.590" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's people in the room""" start="00:09:12.770" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and there's people at""" start="00:09:13.710" video="mainVideo-uni" id="subtitle"]] +[[!template text="""other campuses who are in this course.""" start="00:09:14.570" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Having the Zoom chat in""" start="00:09:17.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the live feed is very useful.""" start="00:09:19.390" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then the quiz—""" start="00:09:22.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""at the next class meeting,""" start="00:09:25.730" video="mainVideo-uni" id="subtitle"]] +[[!template text="""we'll go through this quiz.""" start="00:09:26.670" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Here's some experimental data""" start="00:09:27.890" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and here's a question where they're""" start="00:09:30.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""supposed to interpret these data.""" start="00:09:31.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""We can in class together,""" start="00:09:36.590" video="mainVideo-uni" id="subtitle"]] +[[!template text="""we can review those.""" start="00:09:38.850" video="mainVideo-uni" id="subtitle"]] +[[!template text="""That's why Firefox is useful.""" start="00:09:41.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Being able to inhabit,""" start="00:09:47.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""being able to inhabit""" start="00:09:50.570" video="mainVideo-uni" id="subtitle"]] +[[!template text="""figures like this is incredibly powerful.""" start="00:09:52.830" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is the silver lining of being""" start="00:09:56.870" video="mainVideo-uni" id="subtitle"]] +[[!template text="""forced to teach online during the pandemic,""" start="00:09:59.350" video="mainVideo-uni" id="subtitle"]] +[[!template text="""because I couldn't do""" start="00:10:02.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this before I had a green screen.""" start="00:10:03.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But even more powerful than this—""" start="00:10:05.760" video="mainVideo-uni" id="subtitle"]] +[[!template text="""For years, I showed students""" start="00:10:09.540" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this figure by standing in front""" start="00:10:10.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""of it or by having a""" start="00:10:12.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""projector screen above me.""" start="00:10:13.700" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And I said, "This is the B form of DNA."""" start="00:10:15.240" video="mainVideo-uni" id="subtitle"]] +[[!template text=""""This is the most common form of DNA."""" start="00:10:18.460" video="mainVideo-uni" id="subtitle"]] +[[!template text=""""You see here that there's this minor groove."""" start="00:10:20.380" video="mainVideo-uni" id="subtitle"]] +[[!template text=""""And then this feature""" start="00:10:22.580" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is called the major groove."""" start="00:10:23.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And students couldn't see it.""" start="00:10:24.420" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Animation""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""But if you animate it—""" start="00:10:26.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""if you just have it""" start="00:10:29.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""move, the apparent movement,""" start="00:10:30.280" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's not really movement,""" start="00:10:33.320" video="mainVideo-uni" id="subtitle"]] +[[!template text="""it's apparent movement.""" start="00:10:34.400" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And it tricks your visual cortex into""" start="00:10:35.380" video="mainVideo-uni" id="subtitle"]] +[[!template text="""adding three dimensional structure to this.""" start="00:10:37.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You can see this feature is""" start="00:10:40.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the major groove and that feature""" start="00:10:42.580" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is the minor groove. And a static""" start="00:10:45.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""image just can't provide""" start="00:10:47.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that understanding, while moving image can.""" start="00:10:48.320" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Emacs""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""I use Emacs to look at text.""" start="00:10:55.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Where's Emacs? Here's Emacs! We read""" start="00:10:58.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Vonnegut in this English class that I""" start="00:11:02.520" video="mainVideo-uni" id="subtitle"]] +[[!template text="""teach and I'm going to tab over to Emacs.""" start="00:11:04.280" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's nice to be able""" start="00:11:07.760" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to have text jump""" start="00:11:09.860" video="mainVideo-uni" id="subtitle"]] +[[!template text="""around and be dynamic, right?""" start="00:11:12.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""If you, if you want to look""" start="00:11:14.160" video="mainVideo-uni" id="subtitle"]] +[[!template text="""at this passage and I'll""" start="00:11:16.860" video="mainVideo-uni" id="subtitle"]] +[[!template text="""have somebody read it aloud.""" start="00:11:18.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And then we talk about why he chose""" start="00:11:19.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this word and why he chose that word,""" start="00:11:20.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and the cadence, and the alliteration.""" start="00:11:22.500" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then we can go to another particular excerpt""" start="00:11:25.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and pick that apart on the screen together.""" start="00:11:30.840" video="mainVideo-uni" id="subtitle"]] +[[!template text="""That would be difficult to do with""" start="00:11:33.440" video="mainVideo-uni" id="subtitle"]] +[[!template text="""other software that would be very tedious""" start="00:11:34.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to do on the chalkboard.""" start="00:11:36.820" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So Emacs is really good for that sort of thing.""" start="00:11:39.400" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Making slides and handouts with Org Mode""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""Mostly what I use Emacs for is not to""" start="00:11:42.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""present but to make slides and handouts.""" start="00:11:45.380" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Okay. Again, the thing that I want to""" start="00:11:50.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""stress is that the slides""" start="00:11:52.360" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and the handouts can be produced from""" start="00:11:54.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a single Org mode document.""" start="00:11:56.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This entire presentation""" start="00:12:01.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""was assembled in Emacs.""" start="00:12:04.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'll show you how I did that.""" start="00:12:05.700" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I think everybody""" start="00:12:08.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""probably knows what Org mode is.""" start="00:12:11.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But for our purposes, it's a way""" start="00:12:13.160" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to write documents in plain text.""" start="00:12:14.640" video="mainVideo-uni" id="subtitle"]] +[[!template text="""That's very important because one of""" start="00:12:16.120" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the biggest advantages of this is""" start="00:12:19.840" video="mainVideo-uni" id="subtitle"]] +[[!template text="""being able to do version control.""" start="00:12:22.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I don't have Powerpoint decks""" start="00:12:24.740" video="mainVideo-uni" id="subtitle"]] +[[!template text="""everywhere with slides that""" start="00:12:27.780" video="mainVideo-uni" id="subtitle"]] +[[!template text="""there's no way to keep track of them.""" start="00:12:29.360" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Having these be plain text""" start="00:12:31.240" video="mainVideo-uni" id="subtitle"]] +[[!template text="""means that I can just put them in""" start="00:12:32.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a git repository.""" start="00:12:33.580" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Very clean and human readable markup""" start="00:12:36.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""including handling tables""" start="00:12:37.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""which is just incredibly powerful.""" start="00:12:41.160" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You can manage projects and tasks.""" start="00:12:43.340" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But the fact that it's an outline""" start="00:12:45.460" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that you can produce a document that's""" start="00:12:47.300" video="mainVideo-uni" id="subtitle"]] +[[!template text="""hierarchical and fold and""" start="00:12:48.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""reveal different parts of it.""" start="00:12:51.280" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But to produce a book length lectures for""" start="00:12:52.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""an entire semester and use""" start="00:12:57.120" video="mainVideo-uni" id="subtitle"]] +[[!template text="""those to produce both slides and handouts,""" start="00:12:58.920" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that's very powerful,""" start="00:13:01.400" video="mainVideo-uni" id="subtitle"]] +[[!template text="""at least for my brain. To be able to""" start="00:13:03.180" video="mainVideo-uni" id="subtitle"]] +[[!template text="""put it all together and have it be""" start="00:13:05.000" video="mainVideo-uni" id="subtitle"]] +[[!template text="""discursive rather""" start="00:13:06.780" video="mainVideo-uni" id="subtitle"]] +[[!template text="""than having to be graphical.""" start="00:13:08.400" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You can export to""" start="00:13:09.920" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a million different formats including""" start="00:13:11.880" video="mainVideo-uni" id="subtitle"]] +[[!template text="""PDF documents like the handouts as""" start="00:13:15.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""LaTeX, and slides like these through Beamer export.""" start="00:13:17.000" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Pedagogy first""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""The approach is to think""" start="00:13:22.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""about pedagogy rather than thinking""" start="00:13:24.920" video="mainVideo-uni" id="subtitle"]] +[[!template text="""about software or thinking""" start="00:13:26.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""about graphic design.""" start="00:13:28.280" video="mainVideo-uni" id="subtitle"]] +[[!template text="""To think about how can""" start="00:13:31.000" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I make the best argument?""" start="00:13:32.600" video="mainVideo-uni" id="subtitle"]] +[[!template text="""How can I make the best,""" start="00:13:34.380" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the most effective sequence of ideas?""" start="00:13:35.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""All I've done is make a few tweaks to""" start="00:13:40.880" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the export backends for LaTeX and""" start="00:13:45.000" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Beamer to customize them""" start="00:13:47.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""for my particular needs.""" start="00:13:49.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And I'll show you what I've done.""" start="00:13:51.500" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You've seen this already. I'll put""" start="00:13:54.600" video="mainVideo-uni" id="subtitle"]] +[[!template text="""one idea in big text on the screen.""" start="00:13:58.060" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I find it to be effective to""" start="00:14:00.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""make a single idea explicit at one time.""" start="00:14:04.620" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Now, some concepts can""" start="00:14:09.120" video="mainVideo-uni" id="subtitle"]] +[[!template text="""be explained with words or text,""" start="00:14:12.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but many ideas are best just illustrated.""" start="00:14:14.800" video="mainVideo-uni" id="subtitle"]] +[[!template text="""In contrast, we've""" start="00:14:20.260" video="mainVideo-uni" id="subtitle"]] +[[!template text="""all used Powerpoint, right?""" start="00:14:22.540" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And Edward Tufte has taught us""" start="00:14:23.980" video="mainVideo-uni" id="subtitle"]] +[[!template text="""about how Powerpoint is so""" start="00:14:25.700" video="mainVideo-uni" id="subtitle"]] +[[!template text="""terrible from a cognitive point of""" start="00:14:27.480" video="mainVideo-uni" id="subtitle"]] +[[!template text="""view and from a communications point of view.""" start="00:14:29.240" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So using Org mode is much better.""" start="00:14:31.800" video="mainVideo-uni" id="subtitle"]] +[[!template text="""How is it better?""" start="00:14:35.400" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Well, Tufte also tells us that""" start="00:14:36.760" video="mainVideo-uni" id="subtitle"]] +[[!template text="""any oral presentation that is substantive at all""" start="00:14:42.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""has to have some physical handout""" start="00:14:49.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that the audience can use to take notes on.""" start="00:14:52.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Slides are terrible handouts.""" start="00:14:55.710" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And notes are usually terrible slides.""" start="00:14:59.030" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Having one document where you""" start="00:15:02.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""can produce both and have them be,""" start="00:15:03.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""have the same organization,""" start="00:15:05.850" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but different structures and""" start="00:15:08.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""different visual organization is""" start="00:15:10.350" video="mainVideo-uni" id="subtitle"]] +[[!template text="""something that I wanted""" start="00:15:14.750" video="mainVideo-uni" id="subtitle"]] +[[!template text="""for a long time and I can only do it""" start="00:15:16.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""with Emacs.""" start="00:15:18.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Being able""" start="00:15:20.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""also for my brain to""" start="00:15:21.410" video="mainVideo-uni" id="subtitle"]] +[[!template text="""separate the work of writing and developing""" start="00:15:22.730" video="mainVideo-uni" id="subtitle"]] +[[!template text="""ideas and developing explanations""" start="00:15:25.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and developing arguments""" start="00:15:28.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and scaffolding them.""" start="00:15:30.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""That's jargon in pedagogy""" start="00:15:31.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""for bringing the student along.""" start="00:15:33.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Separate that work from wrangling slides.""" start="00:15:36.890" video="mainVideo-uni" id="subtitle"]] +[[!template text="""That's super helpful for me.""" start="00:15:41.350" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Again, you have""" start="00:15:44.530" video="mainVideo-uni" id="subtitle"]] +[[!template text="""an Org document that makes""" start="00:15:46.710" video="mainVideo-uni" id="subtitle"]] +[[!template text="""both the handouts and the slides.""" start="00:15:48.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""What's beautiful about it is""" start="00:15:51.370" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that everything is an outline.""" start="00:15:53.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And again, it's very discursive.""" start="00:15:54.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Here's Tufte's famous poster where he's making""" start="00:15:56.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""fun of the psychology of Powerpoint.""" start="00:15:59.110" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I don't know about you, but I have the kind of brain""" start="00:16:02.010" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and I'm in the kind of job""" start="00:16:05.750" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and I'm at the age where I don't have extra""" start="00:16:07.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""cognitive function! You know?""" start="00:16:09.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""So streamlining this workflow""" start="00:16:12.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""has been really helpful.""" start="00:16:15.730" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""org-teach""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""All right, so let me show""" start="00:16:17.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""you what I've developed.""" start="00:16:19.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Let's look at the Org doc.""" start="00:16:21.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Okay. So what you see is you have""" start="00:16:24.490" video="mainVideo-uni" id="subtitle"]] +[[!template text="""a typical Org mode buffer.""" start="00:16:25.830" video="mainVideo-uni" id="subtitle"]] +[[!template text="""There's two headings here.""" start="00:16:30.770" video="mainVideo-uni" id="subtitle"]] +[[!template text="""One of them is stuff that I've deleted and""" start="00:16:32.850" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the other is the talk.""" start="00:16:35.530" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And so all of these subheadings have""" start="00:16:39.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""various things underneath including""" start="00:16:43.110" video="mainVideo-uni" id="subtitle"]] +[[!template text="""these macros that I wrote like `include-slide`,""" start="00:16:46.390" video="mainVideo-uni" id="subtitle"]] +[[!template text="""`impact-slide`, `subsection-slide`,""" start="00:16:48.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""et cetera, and then a bunch of stuff.""" start="00:16:51.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then I've got this include""" start="00:16:54.950" video="mainVideo-uni" id="subtitle"]] +[[!template text="""file that just has""" start="00:16:59.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the macros that I've written.""" start="00:17:01.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""You can look at this on the repo.""" start="00:17:03.290" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I'm not going to take""" start="00:17:05.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the time to walk through it and""" start="00:17:06.290" video="mainVideo-uni" id="subtitle"]] +[[!template text="""explain what all the LaTeX means.""" start="00:17:07.570" video="mainVideo-uni" id="subtitle"]] +[[!template text="""But the upshot is""" start="00:17:10.370" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that by including that file""" start="00:17:16.510" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that has all the macro definitions,""" start="00:17:20.550" video="mainVideo-uni" id="subtitle"]] +[[!template text="""you get things like this macro pause""" start="00:17:22.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""or newline or whitespace-break,""" start="00:17:25.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""which just allow—""" start="00:17:27.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""pause splits a slide into two frames,""" start="00:17:30.810" video="mainVideo-uni" id="subtitle"]] +[[!template text="""so you can get these overlays,""" start="00:17:33.010" video="mainVideo-uni" id="subtitle"]] +[[!template text="""so you can go through paragraphs one by one.""" start="00:17:34.570" video="mainVideo-uni" id="subtitle"]] +[[!template text="""These just put""" start="00:17:36.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""white space in.""" start="00:17:38.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Text-slides: This thing here, this title""" start="00:17:44.650" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is level three heading.""" start="00:17:47.110" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Figure-slides:""" start="00:17:49.170" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the same thing are level three headings.""" start="00:17:50.190" video="mainVideo-uni" id="subtitle"]] +[[!template text="""One of the most powerful things""" start="00:17:52.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""is that I can take other files,""" start="00:17:54.010" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I can take other Org files that have level""" start="00:17:56.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""three headings that are slides and those can""" start="00:18:00.150" video="mainVideo-uni" id="subtitle"]] +[[!template text="""be in some other repository.""" start="00:18:02.790" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I only need to have one version of""" start="00:18:06.210" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that slide that I""" start="00:18:08.510" video="mainVideo-uni" id="subtitle"]] +[[!template text="""can use in multiple courses.""" start="00:18:09.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Just that functionality is""" start="00:18:13.230" video="mainVideo-uni" id="subtitle"]] +[[!template text="""incredibly helpful for keeping""" start="00:18:17.110" video="mainVideo-uni" id="subtitle"]] +[[!template text="""track of work from a few years ago.""" start="00:18:19.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""All of these I'm going to""" start="00:18:22.810" video="mainVideo-uni" id="subtitle"]] +[[!template text="""explain in the next few slides.""" start="00:18:24.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""The section slides""" start="00:18:25.930" video="mainVideo-uni" id="subtitle"]] +[[!template text="""correspond to course modules.""" start="00:18:27.710" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Each of these is going to""" start="00:18:29.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""be a few weeks of a course.""" start="00:18:31.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This is a major division of a course.""" start="00:18:32.550" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I have some macros so that I can decorate""" start="00:18:34.630" video="mainVideo-uni" id="subtitle"]] +[[!template text="""this with relevant information.""" start="00:18:36.910" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then for every subsection,""" start="00:18:41.390" video="mainVideo-uni" id="subtitle"]] +[[!template text="""level two headline, that""" start="00:18:43.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""corresponds to a major""" start="00:18:45.570" video="mainVideo-uni" id="subtitle"]] +[[!template text="""course topic in the module.""" start="00:18:46.730" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then text slides, again,""" start="00:18:48.590" video="mainVideo-uni" id="subtitle"]] +[[!template text="""level three headlines become""" start="00:18:50.210" video="mainVideo-uni" id="subtitle"]] +[[!template text="""titles for the slide,""" start="00:18:52.850" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and level four headlines become text elements.""" start="00:18:53.970" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Most of my slides look like this.""" start="00:18:58.900" video="mainVideo-uni" id="subtitle"]] +[[!template text="""They're figures.""" start="00:19:01.680" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Here's the glycolytic pathway.""" start="00:19:03.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Level three gives you the title.""" start="00:19:06.020" video="mainVideo-uni" id="subtitle"]] +[[!template text="""It's missing here actually,""" start="00:19:11.420" video="mainVideo-uni" id="subtitle"]] +[[!template text="""but there's a way you can put in captions.""" start="00:19:14.280" video="mainVideo-uni" id="subtitle"]] +[[!template text="""This line here just tells""" start="00:19:16.720" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the LaTeX export backend""" start="00:19:18.960" video="mainVideo-uni" id="subtitle"]] +[[!template text="""how big you want it and stuff like that.""" start="00:19:21.040" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Impact slides, they have to go under H1 or H2.""" start="00:19:24.220" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And they just give you one of these text slides.""" start="00:19:29.140" video="mainVideo-uni" id="subtitle"]] +[[!template text="""For an entire slide being an image,""" start="00:19:32.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""you can use this image-slide macro.""" start="00:19:35.650" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Blank slides""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""I often put in blank slides to""" start="00:19:38.330" video="mainVideo-uni" id="subtitle"]] +[[!template text="""remind myself that this is a time to stop.""" start="00:19:41.130" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Often there's something for me to""" start="00:19:43.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""draw here with the stylus.""" start="00:19:44.790" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Animations""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""I often use— it used to be Powerpoint,""" start="00:19:50.050" video="mainVideo-uni" id="subtitle"]] +[[!template text="""now I use LibreOffice Impress—to make""" start="00:19:53.150" video="mainVideo-uni" id="subtitle"]] +[[!template text="""multi slide animations like""" start="00:19:56.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the sphere and the donut and the GI tract.""" start="00:19:58.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""And this hardware thing""" start="00:20:01.310" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that I did for you today,""" start="00:20:03.250" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I export those animations as PDFs.""" start="00:20:05.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Then I can just slurp them up into the slides.""" start="00:20:07.950" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Just into the slides, not into""" start="00:20:14.470" video="mainVideo-uni" id="subtitle"]] +[[!template text="""the handouts with this macro.""" start="00:20:16.670" video="mainVideo-uni" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]] + +[[!template text="""I hope that you find this useful.""" start="00:20:19.270" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I hope you share it with""" start="00:20:21.490" video="mainVideo-uni" id="subtitle"]] +[[!template text="""other educators that you know.""" start="00:20:22.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Here is the sourcehut repo,""" start="00:20:24.090" video="mainVideo-uni" id="subtitle"]] +[[!template text="""here's how to get in touch with me.""" start="00:20:27.150" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I look forward to addressing your questions.""" start="00:20:29.070" video="mainVideo-uni" id="subtitle"]] +[[!template text="""I want to say thank you""" start="00:20:32.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to Sacha [Chua] and the organizers,""" start="00:20:34.990" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and to everyone who made this possible and""" start="00:20:36.610" video="mainVideo-uni" id="subtitle"]] +[[!template text="""to all of you in the community.""" start="00:20:38.450" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Because as we all know,""" start="00:20:40.690" video="mainVideo-uni" id="subtitle"]] +[[!template text="""that that's what makes Emacs such a strong""" start="00:20:42.770" video="mainVideo-uni" id="subtitle"]] +[[!template text="""and powerful package is""" start="00:20:47.430" video="mainVideo-uni" id="subtitle"]] +[[!template text="""all of the people behind it.""" start="00:20:50.090" video="mainVideo-uni" id="subtitle"]] +[[!template text="""Thanks everybody.""" start="00:20:51.330" video="mainVideo-uni" id="subtitle"]] + +<a name="uni-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: You can hear us. Can you perhaps do it for""" start="00:00:00.000" video="qanda-uni" id="subtitle"]] +[[!template text="""me? Great. The little angels in the""" start="00:00:01.839" video="qanda-uni" id="subtitle"]] +[[!template text="""background have done it for me.""" start="00:00:03.740" video="qanda-uni" id="subtitle"]] +[[!template text="""So now finally that everything is ready.""" start="00:00:05.240" video="qanda-uni" id="subtitle"]] +[[!template text="""Hi James, how are you doing?""" start="00:00:07.759" video="qanda-uni" id="subtitle"]] +[[!template text="""Good morning. Hello. Well,""" start="00:00:13.780" video="qanda-uni" id="subtitle"]] +[[!template text="""thank you for your talk and sorry for the""" start="00:00:14.599" video="qanda-uni" id="subtitle"]] +[[!template text="""little hiccup at the middle we had to pull""" start="00:00:16.320" video="qanda-uni" id="subtitle"]] +[[!template text="""out a fire with the audio going out in the""" start="00:00:19.240" video="qanda-uni" id="subtitle"]] +[[!template text="""middle and sorry about this.""" start="00:00:20.900" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: It's no trouble.""" start="00:00:23.140" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: So James, you've obviously told us about your""" start="00:00:25.240" video="qanda-uni" id="subtitle"]] +[[!template text="""very fancy setup with the green screen and""" start="00:00:28.680" video="qanda-uni" id="subtitle"]] +[[!template text="""I'm sad to see that you haven't put out the""" start="00:00:30.220" video="qanda-uni" id="subtitle"]] +[[!template text="""green screen for your BBB session right now.""" start="00:00:32.840" video="qanda-uni" id="subtitle"]] +[[!template text="""Do you have it in the background just for""" start="00:00:35.579" video="qanda-uni" id="subtitle"]] +[[!template text="""you? Right, okay, it wasn't that far.""" start="00:00:37.060" video="qanda-uni" id="subtitle"]] +[[!template text="""Great. So I'm just going to ask,""" start="00:00:40.600" video="qanda-uni" id="subtitle"]] +[[!template text="""so this is the first live Q&A that we have""" start="00:00:44.180" video="qanda-uni" id="subtitle"]] +[[!template text="""for the session so things might be coming""" start="00:00:47.440" video="qanda-uni" id="subtitle"]] +[[!template text="""into place so pardon us if we take a little""" start="00:00:49.300" video="qanda-uni" id="subtitle"]] +[[!template text="""bit of time to put the questions on the""" start="00:00:51.600" video="qanda-uni" id="subtitle"]] +[[!template text="""screen and all of this.""" start="00:00:54.340" video="qanda-uni" id="subtitle"]] +[[!template text="""What I'm going to do, I'm just going to load""" start="00:00:56.400" video="qanda-uni" id="subtitle"]] +[[!template text="""up the pad. I would invite James to also open""" start="00:00:57.940" video="qanda-uni" id="subtitle"]] +[[!template text="""the pad on his hand. So yeah,""" start="00:01:02.660" video="qanda-uni" id="subtitle"]] +[[!template text="""I've got people talking in my ears and it's""" start="00:01:04.200" video="qanda-uni" id="subtitle"]] +[[!template text="""been a while since I've last had this.""" start="00:01:05.740" video="qanda-uni" id="subtitle"]] +[[!template text="""And okay, so opening the talks right now,""" start="00:01:08.260" video="qanda-uni" id="subtitle"]] +[[!template text="""opening the pad if I can find it.""" start="00:01:12.100" video="qanda-uni" id="subtitle"]] +[[!template text="""Open up the pad. Okay.""" start="00:01:14.120" video="qanda-uni" id="subtitle"]] +[[!template text="""So have you got a pad open on your end,""" start="00:01:19.200" video="qanda-uni" id="subtitle"]] +[[!template text="""James? So I can read the question.""" start="00:01:21.240" video="qanda-uni" id="subtitle"]] +[[!template text="""So, okay, great. Opening it on my end as""" start="00:01:23.119" video="qanda-uni" id="subtitle"]] +[[!template text="""well. What I'm going to do,""" start="00:01:26.740" video="qanda-uni" id="subtitle"]] +[[!template text="""folks, I see some of you have joined us.""" start="00:01:28.360" video="qanda-uni" id="subtitle"]] +[[!template text="""I'm going to start doing is first taking""" start="00:01:39.900" video="qanda-uni" id="subtitle"]] +[[!template text="""questions in the other part because it's a""" start="00:01:42.500" video="qanda-uni" id="subtitle"]] +[[!template text="""little faster to ask questions like this.""" start="00:01:44.220" video="qanda-uni" id="subtitle"]] +[[!template text="""And then as soon as we've finished,""" start="00:01:46.520" video="qanda-uni" id="subtitle"]] +[[!template text="""feel free to unmute yourself and ask your""" start="00:01:48.160" video="qanda-uni" id="subtitle"]] +[[!template text="""questions. All right so I've got some""" start="00:01:49.920" video="qanda-uni" id="subtitle"]] +[[!template text="""reactions about OBS being cool and yes both""" start="00:01:54.180" video="qanda-uni" id="subtitle"]] +[[!template text="""James and I will be able to tell you that""" start="00:01:57.660" video="qanda-uni" id="subtitle"]] +[[!template text="""it's very cool we do very fancy stuff like""" start="00:01:59.340" video="qanda-uni" id="subtitle"]] +[[!template text="""when I need to talk to production in the""" start="00:02:04.060" video="qanda-uni" id="subtitle"]] +[[!template text="""background and all the stuff obviously that""" start="00:02:05.640" video="qanda-uni" id="subtitle"]] +[[!template text="""James has been able to show you with a green""" start="00:02:07.540" video="qanda-uni" id="subtitle"]] +[[!template text="""screen. So I don't see a whole lot of""" start="00:02:09.160" video="qanda-uni" id="subtitle"]] +[[!template text="""questions so far. I see a lot of reactions on""" start="00:02:12.800" video="qanda-uni" id="subtitle"]] +[[!template text="""publishing lectures book and of a classic""" start="00:02:16.020" video="qanda-uni" id="subtitle"]] +[[!template text="""example is John Kitchens obviously.""" start="00:02:17.760" video="qanda-uni" id="subtitle"]] +[[!template text="""Pedagogy first developments.""" start="00:02:20.900" video="qanda-uni" id="subtitle"]] +[[!template text="""Macros are a cool idea.""" start="00:02:23.360" video="qanda-uni" id="subtitle"]] +[[!template text="""Okay questions. So how do you overlap""" start="00:02:25.680" video="qanda-uni" id="subtitle"]] +[[!template text="""yourself with a presentation.""" start="00:02:28.820" video="qanda-uni" id="subtitle"]] +[[!template text="""It's so cool. It's quite simple.""" start="00:02:30.420" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: OBS provides filters for every...""" start="00:02:36.420" video="qanda-uni" id="subtitle"]] +[[!template text="""You can have a separate filter for each video""" start="00:02:40.200" video="qanda-uni" id="subtitle"]] +[[!template text="""feed and 1 of the filters that's available is""" start="00:02:42.440" video="qanda-uni" id="subtitle"]] +[[!template text="""chroma key. You just choose a color to make""" start="00:02:44.960" video="qanda-uni" id="subtitle"]] +[[!template text="""transparent and just make sure that the""" start="00:02:47.840" video="qanda-uni" id="subtitle"]] +[[!template text="""webcam is at the top of the composition.""" start="00:02:52.020" video="qanda-uni" id="subtitle"]] +[[!template text="""And the thing that surprised me the most was""" start="00:02:57.180" video="qanda-uni" id="subtitle"]] +[[!template text="""how quickly my brain was able to mirror""" start="00:03:00.900" video="qanda-uni" id="subtitle"]] +[[!template text="""everything and control my body from a""" start="00:03:05.420" video="qanda-uni" id="subtitle"]] +[[!template text="""separate point of view like the way weather""" start="00:03:07.360" video="qanda-uni" id="subtitle"]] +[[!template text="""broadcasts are done. It took seconds to be""" start="00:03:10.720" video="qanda-uni" id="subtitle"]] +[[!template text="""able to do that. Well,""" start="00:03:15.300" video="qanda-uni" id="subtitle"]] +[[!template text="""and now I have years of practice because that""" start="00:03:16.980" video="qanda-uni" id="subtitle"]] +[[!template text="""set up that you saw that I used to record""" start="00:03:20.320" video="qanda-uni" id="subtitle"]] +[[!template text="""this video. I used for years during the""" start="00:03:22.740" video="qanda-uni" id="subtitle"]] +[[!template text="""pandemic for 4 or 5 semesters to because my""" start="00:03:26.960" video="qanda-uni" id="subtitle"]] +[[!template text="""courses are all have 2,""" start="00:03:32.180" video="qanda-uni" id="subtitle"]] +[[!template text="""3, 400 students, except for the English""" start="00:03:33.760" video="qanda-uni" id="subtitle"]] +[[!template text="""class, which has, you know,""" start="00:03:36.440" video="qanda-uni" id="subtitle"]] +[[!template text="""30 students. And so during the pandemic,""" start="00:03:38.200" video="qanda-uni" id="subtitle"]] +[[!template text="""and even after lockdowns were no longer""" start="00:03:41.200" video="qanda-uni" id="subtitle"]] +[[!template text="""mandated, I taught online just because I""" start="00:03:44.040" video="qanda-uni" id="subtitle"]] +[[!template text="""didn't want to have so many students in the""" start="00:03:46.160" video="qanda-uni" id="subtitle"]] +[[!template text="""room at the same time.""" start="00:03:48.340" video="qanda-uni" id="subtitle"]] +[[!template text="""So I've yeah, I'm it. I have a lot of""" start="00:03:49.600" video="qanda-uni" id="subtitle"]] +[[!template text="""practice doing that.""" start="00:03:53.680" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: But it pays off because it looks so natural,""" start="00:03:56.120" video="qanda-uni" id="subtitle"]] +[[!template text="""you know, it feels like it's the same thing""" start="00:03:58.300" video="qanda-uni" id="subtitle"]] +[[!template text="""with weathercasters, you know,""" start="00:04:00.140" video="qanda-uni" id="subtitle"]] +[[!template text="""it sounds very it looks very easy to do,""" start="00:04:01.520" video="qanda-uni" id="subtitle"]] +[[!template text="""but it also takes quite a bit of practice.""" start="00:04:03.940" video="qanda-uni" id="subtitle"]] +[[!template text="""1 of the things that you also need to""" start="00:04:07.020" video="qanda-uni" id="subtitle"]] +[[!template text="""remember if you're using a chroma key that""" start="00:04:08.300" video="qanda-uni" id="subtitle"]] +[[!template text="""James has explained is that you need to have""" start="00:04:10.160" video="qanda-uni" id="subtitle"]] +[[!template text="""very good lighting, basically for the color""" start="00:04:11.880" video="qanda-uni" id="subtitle"]] +[[!template text="""to pop out in the background and for your""" start="00:04:14.440" video="qanda-uni" id="subtitle"]] +[[!template text="""body to be easily highlightable.""" start="00:04:16.320" video="qanda-uni" id="subtitle"]] +[[!template text="""Okay, were you finished with this question?""" start="00:04:19.399" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, let's take another 1.""" start="00:04:23.240" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure. So how do you deal with video in Beam?""" start="00:04:25.640" video="qanda-uni" id="subtitle"]] +[[!template text="""I found it so hard to do that.""" start="00:04:28.700" video="qanda-uni" id="subtitle"]] +[[!template text="""PPT on the other end is easier to achieve.""" start="00:04:30.720" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, so remember that the slides get""" start="00:04:36.380" video="qanda-uni" id="subtitle"]] +[[!template text="""produced from Org Mode as PDFs.""" start="00:04:41.480" video="qanda-uni" id="subtitle"]] +[[!template text="""Well, and in fact, I even before when I was""" start="00:04:47.540" video="qanda-uni" id="subtitle"]] +[[!template text="""using other software to produce slides,""" start="00:04:50.080" video="qanda-uni" id="subtitle"]] +[[!template text="""I produced them as PDFs,""" start="00:04:52.580" video="qanda-uni" id="subtitle"]] +[[!template text="""precisely because I wanted to be able to mark""" start="00:04:54.720" video="qanda-uni" id="subtitle"]] +[[!template text="""them up on on the screen with the stylus.""" start="00:04:56.840" video="qanda-uni" id="subtitle"]] +[[!template text="""And so I don't do video in the slides.""" start="00:05:02.100" video="qanda-uni" id="subtitle"]] +[[!template text="""I use OBS to switch from static slides that I""" start="00:05:06.140" video="qanda-uni" id="subtitle"]] +[[!template text="""mark up with the stylus over to some kind of""" start="00:05:09.140" video="qanda-uni" id="subtitle"]] +[[!template text="""video viewer and then back.""" start="00:05:12.840" video="qanda-uni" id="subtitle"]] +[[!template text="""And again, that's how I can use Firefox.""" start="00:05:15.620" video="qanda-uni" id="subtitle"]] +[[!template text="""I use OBS to switch between Firefox and video""" start="00:05:17.900" video="qanda-uni" id="subtitle"]] +[[!template text="""and the Shornell plus plus program where I""" start="00:05:22.360" video="qanda-uni" id="subtitle"]] +[[!template text="""can mark up slides. So those functionalities""" start="00:05:26.380" video="qanda-uni" id="subtitle"]] +[[!template text="""are that's why I use different software and""" start="00:05:31.160" video="qanda-uni" id="subtitle"]] +[[!template text="""pull it all together with OBS so that I can""" start="00:05:35.140" video="qanda-uni" id="subtitle"]] +[[!template text="""have lots of functional flexibility.""" start="00:05:37.440" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Great. Do you ever use things like""" start="00:05:44.660" video="qanda-uni" id="subtitle"]] +[[!template text="""org-present and stay for the PowerPoint""" start="00:05:47.700" video="qanda-uni" id="subtitle"]] +[[!template text="""slides? I'm not sure exactly how to read this""" start="00:05:51.060" video="qanda-uni" id="subtitle"]] +[[!template text="""particular question but at least we can focus""" start="00:05:53.200" video="qanda-uni" id="subtitle"]] +[[!template text="""on org-present. Are you familiar with what it""" start="00:05:54.860" video="qanda-uni" id="subtitle"]] +[[!template text="""is?""" start="00:05:56.840" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: I have played around with org-present and""" start="00:05:58.080" video="qanda-uni" id="subtitle"]] +[[!template text="""again I guess you could use org-present to""" start="00:06:02.380" video="qanda-uni" id="subtitle"]] +[[!template text="""show images and to show headings as slides.""" start="00:06:07.640" video="qanda-uni" id="subtitle"]] +[[!template text="""But again, because I'm it's such a crucial""" start="00:06:13.140" video="qanda-uni" id="subtitle"]] +[[!template text="""functionality to be able to mark them up with""" start="00:06:18.100" video="qanda-uni" id="subtitle"]] +[[!template text="""stylus. I didn't really show this very much,""" start="00:06:22.120" video="qanda-uni" id="subtitle"]] +[[!template text="""but I also highlight things the way I would""" start="00:06:25.760" video="qanda-uni" id="subtitle"]] +[[!template text="""highlight using a laser pointer on the""" start="00:06:27.780" video="qanda-uni" id="subtitle"]] +[[!template text="""screen. And again, I don't see Emacs being""" start="00:06:30.080" video="qanda-uni" id="subtitle"]] +[[!template text="""able to do that for another couple of""" start="00:06:36.300" video="qanda-uni" id="subtitle"]] +[[!template text="""generations. So really the only thing I use""" start="00:06:38.560" video="qanda-uni" id="subtitle"]] +[[!template text="""Emacs for during presentations is to narrow""" start="00:06:42.800" video="qanda-uni" id="subtitle"]] +[[!template text="""headings that we can focus on particular text""" start="00:06:48.940" video="qanda-uni" id="subtitle"]] +[[!template text="""excerpts.""" start="00:06:52.600" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. Yeah. A lot of our presentation at""" start="00:06:55.680" video="qanda-uni" id="subtitle"]] +[[!template text="""EmacsConf are usually,""" start="00:06:59.200" video="qanda-uni" id="subtitle"]] +[[!template text="""especially the Org Mode ones are done with""" start="00:07:00.420" video="qanda-uni" id="subtitle"]] +[[!template text="""OrgPresent. And. Sorry,""" start="00:07:02.260" video="qanda-uni" id="subtitle"]] +[[!template text="""I had again someone talk to me in a year.""" start="00:07:06.740" video="qanda-uni" id="subtitle"]] +[[!template text="""You know, the problem with EmacsConf is that""" start="00:07:09.240" video="qanda-uni" id="subtitle"]] +[[!template text="""every year, you know, you have to relearn a""" start="00:07:11.680" video="qanda-uni" id="subtitle"]] +[[!template text="""lot of skills. And by the time we finished by""" start="00:07:13.440" video="qanda-uni" id="subtitle"]] +[[!template text="""Sunday evening we are masters of it and then""" start="00:07:16.780" video="qanda-uni" id="subtitle"]] +[[!template text="""we forget everything by the time the next""" start="00:07:19.900" video="qanda-uni" id="subtitle"]] +[[!template text="""year comes around. What I was going to say is""" start="00:07:21.820" video="qanda-uni" id="subtitle"]] +[[!template text="""that org-present is often used by people""" start="00:07:24.280" video="qanda-uni" id="subtitle"]] +[[!template text="""inside Emacs conf presenting about org-mode""" start="00:07:27.440" video="qanda-uni" id="subtitle"]] +[[!template text="""but yeah whenever you need to do something a""" start="00:07:31.100" video="qanda-uni" id="subtitle"]] +[[!template text="""little more visual, it gets a little more""" start="00:07:32.800" video="qanda-uni" id="subtitle"]] +[[!template text="""complicated. Some people have tried to do""" start="00:07:34.340" video="qanda-uni" id="subtitle"]] +[[!template text="""fancy stuff with SVG, which is probably the""" start="00:07:36.540" video="qanda-uni" id="subtitle"]] +[[!template text="""path forward for this type of stuff.""" start="00:07:39.200" video="qanda-uni" id="subtitle"]] +[[!template text="""But yeah, if you need to draw,""" start="00:07:41.400" video="qanda-uni" id="subtitle"]] +[[!template text="""if you need to highlight,""" start="00:07:43.380" video="qanda-uni" id="subtitle"]] +[[!template text="""it is pretty complicated.""" start="00:07:44.760" video="qanda-uni" id="subtitle"]] +[[!template text="""Perhaps something that you might want to be""" start="00:07:46.820" video="qanda-uni" id="subtitle"]] +[[!template text="""interested, James, in checking out is PDF""" start="00:07:48.340" video="qanda-uni" id="subtitle"]] +[[!template text="""tools, which is a way to open up a PDF in""" start="00:07:50.940" video="qanda-uni" id="subtitle"]] +[[!template text="""Emacs. And this allows you to have basic PDF""" start="00:07:56.040" video="qanda-uni" id="subtitle"]] +[[!template text="""annotations, like putting a little bit of a""" start="00:07:59.440" video="qanda-uni" id="subtitle"]] +[[!template text="""Nikon on it. Perhaps you've already played""" start="00:08:01.560" video="qanda-uni" id="subtitle"]] +[[!template text="""with it.""" start="00:08:04.160" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: I have used that. PDF tools is an incredible""" start="00:08:06.260" video="qanda-uni" id="subtitle"]] +[[!template text="""package but until it allows me to make a mark""" start="00:08:10.080" video="qanda-uni" id="subtitle"]] +[[!template text="""on the screen that shows up in a video""" start="00:08:14.560" video="qanda-uni" id="subtitle"]] +[[!template text="""compositor. It's not going to replace""" start="00:08:18.280" video="qanda-uni" id="subtitle"]] +[[!template text="""Shortenel.""" start="00:08:21.420" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Definitely. All right.""" start="00:08:23.240" video="qanda-uni" id="subtitle"]] +[[!template text="""Moving on to the next question.""" start="00:08:24.600" video="qanda-uni" id="subtitle"]] +[[!template text="""Is the triple-accolade syntax an Org Mode""" start="00:08:26.400" video="qanda-uni" id="subtitle"]] +[[!template text="""core feature that I missed so far or did you""" start="00:08:28.900" video="qanda-uni" id="subtitle"]] +[[!template text="""program that and thank you for the great""" start="00:08:31.360" video="qanda-uni" id="subtitle"]] +[[!template text="""talk.""" start="00:08:33.120" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you very much. No,""" start="00:08:36.659" video="qanda-uni" id="subtitle"]] +[[!template text="""it's just part of all of the export backends.""" start="00:08:38.360" video="qanda-uni" id="subtitle"]] +[[!template text="""Actually, I think the way it works is it""" start="00:08:43.299" video="qanda-uni" id="subtitle"]] +[[!template text="""precedes all of the export backends.""" start="00:08:45.060" video="qanda-uni" id="subtitle"]] +[[!template text="""When you export, the first thing that happens""" start="00:08:47.040" video="qanda-uni" id="subtitle"]] +[[!template text="""is expansion of macros.""" start="00:08:50.280" video="qanda-uni" id="subtitle"]] +[[!template text="""And that's a built-in org mode feature.""" start="00:08:52.720" video="qanda-uni" id="subtitle"]] +[[!template text="""It's definitely beyond my Emacs Lisp powers""" start="00:08:56.640" video="qanda-uni" id="subtitle"]] +[[!template text="""to be able to have made something that""" start="00:08:59.690" video="qanda-uni" id="subtitle"]] +[[!template text="""powerful. That's right.""" start="00:09:01.360" video="qanda-uni" id="subtitle"]] +[[!template text="""I have come a long way.""" start="00:09:07.020" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: For now. You know, we always,""" start="00:09:02.640" video="qanda-uni" id="subtitle"]] +[[!template text="""you know, most of the people who show up to""" start="00:09:11.720" video="qanda-uni" id="subtitle"]] +[[!template text="""Max Conf. Especially talking about stuff that""" start="00:09:13.380" video="qanda-uni" id="subtitle"]] +[[!template text="""has to do with presentations or what they do""" start="00:09:15.480" video="qanda-uni" id="subtitle"]] +[[!template text="""in academia. You know,""" start="00:09:18.260" video="qanda-uni" id="subtitle"]] +[[!template text="""they always say, oh, but,""" start="00:09:19.160" video="qanda-uni" id="subtitle"]] +[[!template text="""you know, I couldn't have done all this,""" start="00:09:20.600" video="qanda-uni" id="subtitle"]] +[[!template text="""you know, it's just far away.""" start="00:09:22.589" video="qanda-uni" id="subtitle"]] +[[!template text="""And then they come back 1 year or 2 years""" start="00:09:24.260" video="qanda-uni" id="subtitle"]] +[[!template text="""later and then, oh, I've made my entire""" start="00:09:26.320" video="qanda-uni" id="subtitle"]] +[[!template text="""library for presentation and stuff like this.""" start="00:09:27.980" video="qanda-uni" id="subtitle"]] +[[!template text="""So Be hopeful about what the future holds for""" start="00:09:29.680" video="qanda-uni" id="subtitle"]] +[[!template text="""you in terms of coming up with crazy new""" start="00:09:32.980" video="qanda-uni" id="subtitle"]] +[[!template text="""features for the entire ecosystem.""" start="00:09:34.960" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, let me tell you,""" start="00:09:37.740" video="qanda-uni" id="subtitle"]] +[[!template text="""since the pandemic, I have written,""" start="00:09:39.560" video="qanda-uni" id="subtitle"]] +[[!template text="""I wrote my first major mode.""" start="00:09:42.980" video="qanda-uni" id="subtitle"]] +[[!template text="""It's trivial, but it provides functionality""" start="00:09:44.760" video="qanda-uni" id="subtitle"]] +[[!template text="""that is very useful to me and it's it's going""" start="00:09:47.220" video="qanda-uni" id="subtitle"]] +[[!template text="""to sound like I'm just trying to butter""" start="00:09:52.660" video="qanda-uni" id="subtitle"]] +[[!template text="""everyone up but seeing a lot of the names in""" start="00:09:54.380" video="qanda-uni" id="subtitle"]] +[[!template text="""the IRC channel people who have taught me so""" start="00:09:57.260" video="qanda-uni" id="subtitle"]] +[[!template text="""much on their YouTube channels and in their""" start="00:10:00.820" video="qanda-uni" id="subtitle"]] +[[!template text="""blog posts and on Reddit and on Mastodon.""" start="00:10:05.220" video="qanda-uni" id="subtitle"]] +[[!template text="""Without many of the people who are here today""" start="00:10:09.600" video="qanda-uni" id="subtitle"]] +[[!template text="""watching my talk, it's very fun to have""" start="00:10:12.620" video="qanda-uni" id="subtitle"]] +[[!template text="""people who have helped me learn so much about""" start="00:10:15.820" video="qanda-uni" id="subtitle"]] +[[!template text="""Emacs. So thanks to all of you.""" start="00:10:18.160" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, and yeah, and now you're becoming part""" start="00:10:21.580" video="qanda-uni" id="subtitle"]] +[[!template text="""of this crew of people inspiring others to do""" start="00:10:24.140" video="qanda-uni" id="subtitle"]] +[[!template text="""very much the same. So thank you for joining""" start="00:10:27.380" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you very much.""" start="00:10:31.460" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: the crew. Great. Moving on to the 2 last""" start="00:10:29.160" video="qanda-uni" id="subtitle"]] +[[!template text="""questions and then we'll open up the mic to""" start="00:10:35.020" video="qanda-uni" id="subtitle"]] +[[!template text="""other people on Big Blue Button.""" start="00:10:36.660" video="qanda-uni" id="subtitle"]] +[[!template text="""What kind of comparative feedback are""" start="00:10:39.160" video="qanda-uni" id="subtitle"]] +[[!template text="""students giving you regarding your approach?""" start="00:10:40.900" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, my gosh. Students were ready to during""" start="00:10:44.960" video="qanda-uni" id="subtitle"]] +[[!template text="""the pandemic especially when most of the""" start="00:10:48.340" video="qanda-uni" id="subtitle"]] +[[!template text="""courses were just being taught over zoom by""" start="00:10:53.040" video="qanda-uni" id="subtitle"]] +[[!template text="""people sharing their screen.""" start="00:10:55.880" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: Just a second. Sorry. Sorry for the""" start="00:10:57.340" video="qanda-uni" id="subtitle"]] +[[!template text="""interruption. Very rude interruption.""" start="00:10:58.660" video="qanda-uni" id="subtitle"]] +[[!template text="""We've got the intro for the next talk playing""" start="00:10:59.800" video="qanda-uni" id="subtitle"]] +[[!template text="""and I'm not sure what's going on.""" start="00:11:01.220" video="qanda-uni" id="subtitle"]] +[[!template text="""Give me just a second.""" start="00:11:02.520" video="qanda-uni" id="subtitle"]] +[[!template text="""Sasha.""" start="00:11:04.440" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay.""" start="00:11:05.060" video="qanda-uni" id="subtitle"]] +[[!template text="""Yeah, I think it's started.""" start="00:11:19.320" video="qanda-uni" id="subtitle"]] +[[!template text="""Okay so yeah I think it's not a""" start="00:11:26.716" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: sure 1 I got the times wrong apparently""" start="00:11:34.860" video="qanda-uni" id="subtitle"]] +[[!template text="""because of the little delay we had getting""" start="00:11:37.760" video="qanda-uni" id="subtitle"]] +[[!template text="""the audio fixed up. The good news is that""" start="00:11:40.240" video="qanda-uni" id="subtitle"]] +[[!template text="""we're still recording the talk right now and""" start="00:11:43.740" video="qanda-uni" id="subtitle"]] +[[!template text="""we still have James around.""" start="00:11:45.880" video="qanda-uni" id="subtitle"]] +[[!template text="""Obviously James you're no longer on being""" start="00:11:47.180" video="qanda-uni" id="subtitle"]] +[[!template text="""broadcast on General but if you want to keep""" start="00:11:49.740" video="qanda-uni" id="subtitle"]] +[[!template text="""answering questions or if you want to anyone""" start="00:11:53.040" video="qanda-uni" id="subtitle"]] +[[!template text="""in the room right now wants to ask you""" start="00:11:55.800" video="qanda-uni" id="subtitle"]] +[[!template text="""questions feel free to do so.""" start="00:11:57.340" video="qanda-uni" id="subtitle"]] +[[!template text="""I'm going to need to hop off because I need""" start="00:11:59.440" video="qanda-uni" id="subtitle"]] +[[!template text="""to get other things ready for the next talks""" start="00:12:01.060" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: But James, thank you so much.""" start="00:12:04.280" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 0]: sadly. Right and so sorry I'm a little tense""" start="00:12:03.080" video="qanda-uni" id="subtitle"]] +[[!template text="""obviously because I was not expecting this to""" start="00:12:10.020" video="qanda-uni" id="subtitle"]] +[[!template text="""happen and that led to a very abrupt end to""" start="00:12:12.660" video="qanda-uni" id="subtitle"]] +[[!template text="""this discussion but people afterwards on""" start="00:12:15.960" video="qanda-uni" id="subtitle"]] +[[!template text="""emacsmo.org slash 2023 slash talks will be""" start="00:12:18.480" video="qanda-uni" id="subtitle"]] +[[!template text="""able to find all the content here.""" start="00:12:21.980" video="qanda-uni" id="subtitle"]] +[[!template text="""So I'll have to leave now.""" start="00:12:24.020" video="qanda-uni" id="subtitle"]] +[[!template text="""Thank you so much James for doing the""" start="00:12:25.840" video="qanda-uni" id="subtitle"]] +[[!template text="""difficult task of opening up EmacsConf and""" start="00:12:28.020" video="qanda-uni" id="subtitle"]] +[[!template text="""I'll probably see you later.""" start="00:12:30.060" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you, Leo. Bye bye.""" start="00:12:32.780" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: On your journal program.""" start="00:12:52.020" video="qanda-uni" id="subtitle"]] +[[!template text="""Yes. You are using the tablet as a monitor,""" start="00:12:58.360" video="qanda-uni" id="subtitle"]] +[[!template text="""right? Touch screen monitor with that?""" start="00:13:03.520" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: That's exactly right. So it's a tablet so you""" start="00:13:06.480" video="qanda-uni" id="subtitle"]] +[[!template text="""know I can. It has a touch screen and so.""" start="00:13:08.800" video="qanda-uni" id="subtitle"]] +[[!template text="""So basically the functionality that that""" start="00:13:13.080" video="qanda-uni" id="subtitle"]] +[[!template text="""program provides is to be able to just mark""" start="00:13:15.580" video="qanda-uni" id="subtitle"]] +[[!template text="""up PDFs with a stylus,""" start="00:13:20.580" video="qanda-uni" id="subtitle"]] +[[!template text="""you know, in the way that you would use any""" start="00:13:23.360" video="qanda-uni" id="subtitle"]] +[[!template text="""other tablet. And to be able to take that""" start="00:13:25.280" video="qanda-uni" id="subtitle"]] +[[!template text="""video signal and put it into another machine.""" start="00:13:30.600" video="qanda-uni" id="subtitle"]] +[[!template text="""That was the that was the key.""" start="00:13:33.840" video="qanda-uni" id="subtitle"]] +[[!template text="""That's the killer app.""" start="00:13:36.100" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: I've thought about grabbing 1 for the purpose""" start="00:13:39.340" video="qanda-uni" id="subtitle"]] +[[!template text="""of like changing my laptop into a tablet to""" start="00:13:41.940" video="qanda-uni" id="subtitle"]] +[[!template text="""read manga, browse the web and kind of""" start="00:13:45.460" video="qanda-uni" id="subtitle"]] +[[!template text="""curious if it works well like as a wireless""" start="00:13:49.640" video="qanda-uni" id="subtitle"]] +[[!template text="""monitor with a tablet or how well it like you""" start="00:13:52.300" video="qanda-uni" id="subtitle"]] +[[!template text="""can use Emacs with it in a tablet mode or""" start="00:13:57.440" video="qanda-uni" id="subtitle"]] +[[!template text="""were you just""" start="00:14:02.080" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: or you just use the tablet that I use is this""" start="00:14:03.820" video="qanda-uni" id="subtitle"]] +[[!template text="""is it it's just a Microsoft Surface and so it""" start="00:14:10.800" video="qanda-uni" id="subtitle"]] +[[!template text="""comes with a keyboard so you can take the""" start="00:14:14.340" video="qanda-uni" id="subtitle"]] +[[!template text="""keyboard off. Yeah, but I use it.""" start="00:14:17.780" video="qanda-uni" id="subtitle"]] +[[!template text="""I use it with the keyboard as well.""" start="00:14:20.940" video="qanda-uni" id="subtitle"]] +[[!template text="""And I just.""" start="00:14:24.560" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: You're cutting off right now""" start="00:14:30.060" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Audio Your audio is cutting off right now.""" start="00:14:53.880" video="qanda-uni" id="subtitle"]] +[[!template text="""I bumped the mute button on the mic.""" start="00:15:32.680" video="qanda-uni" id="subtitle"]] +[[!template text="""Yeah. So again, this is,""" start="00:15:36.820" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: is the 16 mute buttons you use.""" start="00:15:38.500" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: this It's just the surface pro 3 that I got""" start="00:15:38.300" video="qanda-uni" id="subtitle"]] +[[!template text="""used and it runs Emacs.""" start="00:15:45.660" video="qanda-uni" id="subtitle"]] +[[!template text="""I mean it runs. You know Linux really well.""" start="00:15:49.280" video="qanda-uni" id="subtitle"]] +[[!template text="""And the trouble is that the hard drive you""" start="00:15:54.940" video="qanda-uni" id="subtitle"]] +[[!template text="""know the SSE drive is small and the RAM is""" start="00:15:59.720" video="qanda-uni" id="subtitle"]] +[[!template text="""small, but it works for the purposes.""" start="00:16:02.920" video="qanda-uni" id="subtitle"]] +[[!template text="""Basically, if I had a couple thousand""" start="00:16:07.580" video="qanda-uni" id="subtitle"]] +[[!template text="""dollars, I could probably buy a touchscreen""" start="00:16:10.080" video="qanda-uni" id="subtitle"]] +[[!template text="""machine where I could run everything on it""" start="00:16:14.280" video="qanda-uni" id="subtitle"]] +[[!template text="""and do the streaming and do the video capture""" start="00:16:17.680" video="qanda-uni" id="subtitle"]] +[[!template text="""and do the PDF markup.""" start="00:16:21.380" video="qanda-uni" id="subtitle"]] +[[!template text="""But since both of these are so,""" start="00:16:26.020" video="qanda-uni" id="subtitle"]] +[[!template text="""the hardware that I use is so old and cheap""" start="00:16:28.860" video="qanda-uni" id="subtitle"]] +[[!template text="""and weak I have to split it across 2""" start="00:16:31.980" video="qanda-uni" id="subtitle"]] +[[!template text="""machines.""" start="00:16:33.800" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: There's also a beauty in making the stuff""" start="00:16:35.020" video="qanda-uni" id="subtitle"]] +[[!template text="""having specific purposes for specific things""" start="00:16:37.660" video="qanda-uni" id="subtitle"]] +[[!template text="""where it's just not. Yeah it's like I don't""" start="00:16:40.080" video="qanda-uni" id="subtitle"]] +[[!template text="""want a smart TV that plays Netflix I want a""" start="00:16:46.020" video="qanda-uni" id="subtitle"]] +[[!template text="""smart TV that has all the smarts that I turn""" start="00:16:50.140" video="qanda-uni" id="subtitle"]] +[[!template text="""my smart TV into a TV monitor I don't want to""" start="00:16:53.860" video="qanda-uni" id="subtitle"]] +[[!template text="""yeah""" start="00:16:58.780" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: I totally feel that ethic I totally I totally""" start="00:17:02.200" video="qanda-uni" id="subtitle"]] +[[!template text="""feel that ethic. Oh, on""" start="00:17:08.659" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: the some other things like if you want you to""" start="00:17:11.760" video="qanda-uni" id="subtitle"]] +[[!template text="""do highlighting in an org mode document.""" start="00:17:15.300" video="qanda-uni" id="subtitle"]] +[[!template text="""You can use org web tools.""" start="00:17:17.300" video="qanda-uni" id="subtitle"]] +[[!template text="""I wrote this in the notes,""" start="00:17:19.060" video="qanda-uni" id="subtitle"]] +[[!template text="""but you can use org web tools to download a""" start="00:17:20.020" video="qanda-uni" id="subtitle"]] +[[!template text="""web page and then you can use org remark to""" start="00:17:21.940" video="qanda-uni" id="subtitle"]] +[[!template text="""start highlighting in the org mode web page""" start="00:17:25.400" video="qanda-uni" id="subtitle"]] +[[!template text="""and then because an org mode document now you""" start="00:17:28.860" video="qanda-uni" id="subtitle"]] +[[!template text="""can just edit it directly.""" start="00:17:30.860" video="qanda-uni" id="subtitle"]] +[[!template text="""If you want other people to join in on an""" start="00:17:35.600" video="qanda-uni" id="subtitle"]] +[[!template text="""Emacs session you could use a package like""" start="00:17:38.240" video="qanda-uni" id="subtitle"]] +[[!template text="""what's it called? CRDT.EL""" start="00:17:40.680" video="qanda-uni" id="subtitle"]] +[[!template text="""that will allow 2 people with 2 different""" start="00:17:47.020" video="qanda-uni" id="subtitle"]] +[[!template text="""Emacs configurations to edit the same buffer.""" start="00:17:50.160" video="qanda-uni" id="subtitle"]] +[[!template text="""And you have a host that can host a buffer""" start="00:17:54.140" video="qanda-uni" id="subtitle"]] +[[!template text="""too. It works with, and they have 1 optional""" start="00:17:58.980" video="qanda-uni" id="subtitle"]] +[[!template text="""extension for org mode that will synchronize""" start="00:18:06.000" video="qanda-uni" id="subtitle"]] +[[!template text="""the folding of the org drawers.""" start="00:18:08.680" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: Interesting. I will look into that.""" start="00:18:12.320" video="qanda-uni" id="subtitle"]] +[[!template text="""Like""" start="00:18:15.060" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 2]: having I don't like if you want students like""" start="00:18:19.660" video="qanda-uni" id="subtitle"]] +[[!template text="""you have each highlight line mode these are""" start="00:18:22.720" video="qanda-uni" id="subtitle"]] +[[!template text="""just some ideas like you can have like""" start="00:18:25.740" video="qanda-uni" id="subtitle"]] +[[!template text="""highlight line mode so people can easily see""" start="00:18:27.620" video="qanda-uni" id="subtitle"]] +[[!template text="""which line you're on cursor tracking and then""" start="00:18:30.060" video="qanda-uni" id="subtitle"]] +[[!template text="""you can have other people join in students or""" start="00:18:35.040" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 1]: yeah that's just a possible idea.""" start="00:18:43.180" video="qanda-uni" id="subtitle"]] +[[!template text="""Is there anyone else in the in the big blue""" start="00:18:45.300" video="qanda-uni" id="subtitle"]] +[[!template text="""button room who has a question?""" start="00:18:49.680" video="qanda-uni" id="subtitle"]] +[[!template text="""All right, I'm going to go over to the pad""" start="00:19:01.360" video="qanda-uni" id="subtitle"]] +[[!template text="""and see if there are any pending questions I""" start="00:19:03.280" video="qanda-uni" id="subtitle"]] +[[!template text="""can address. Thanks, Plasma Strike.""" start="00:19:05.280" video="qanda-uni" id="subtitle"]] +[[!template text="""[Speaker 3]: Yep. Which could be PDF,""" start="00:19:27.500" video="qanda-uni" id="subtitle"]] +[[!template text="""could be Markdown, could be OpenOffice,""" start="00:19:33.340" video="qanda-uni" id="subtitle"]] +[[!template text="""could be a notebook format.""" start="00:19:38.560" video="qanda-uni" id="subtitle"]] +[[!template text="""This methodology was conceived by Donald""" start="00:19:40.960" video="qanda-uni" id="subtitle"]] +[[!template text="""Knuth in 1984. The main purpose of literal""" start="00:19:43.340" video="qanda-uni" id="subtitle"]] +[[!template text="""programming is not only to make code or""" start="00:19:51.980" video="qanda-uni" id="subtitle"]] +[[!template text="""documentation or output more manageable,""" start="00:19:54.700" video="qanda-uni" id="subtitle"]] +[[!template text="""but to allow humans to create a data story to""" start="00:19:57.800" video="qanda-uni" id="subtitle"]] +[[!template text="""be used from a single source.""" start="00:20:01.240" video="qanda-uni" id="subtitle"]] +[[!template text="""What you see on the slide on the left-hand""" start="00:20:04.540" video="qanda-uni" id="subtitle"]] +[[!template text="""side is the story and code inside an org-mod""" start="00:20:06.300" video="qanda-uni" id="subtitle"]] +[[!template text="""file. The file starts with some""" start="00:20:09.400" video="qanda-uni" id="subtitle"]] +[[!template text="""documentation, then you write back down this""" start="00:20:14.440" video="qanda-uni" id="subtitle"]] +[[!template text="""code, and at the bottom you see the output""" start="00:20:18.420" video="qanda-uni" id="subtitle"]] +[[!template text="""file, which is not shown in the slide itself.""" start="00:20:22.060" video="qanda-uni" id="subtitle"]] +[[!template text="""In the middle you have the source code,""" start="00:20:26.800" video="qanda-uni" id="subtitle"]] +[[!template text="""which is the result of tangling or opening a""" start="00:20:28.440" video="qanda-uni" id="subtitle"]] +[[!template text="""buffer inside offload.""" start="00:20:33.980" video="qanda-uni" id="subtitle"]] +[[!template text="""On the very right hand side we have a PDF,""" start="00:20:37.660" video="qanda-uni" id="subtitle"]] +[[!template text="""actually this HTML, very same file that you""" start="00:20:42.580" video="qanda-uni" id="subtitle"]] +[[!template text="""see in memory language.""" start="00:20:47.740" video="qanda-uni" id="subtitle"]] +[[!template text="""So the humans look at some of this code and""" start="00:20:49.600" video="qanda-uni" id="subtitle"]] +[[!template text="""the machines look at other parts of the code.""" start="00:20:53.080" video="qanda-uni" id="subtitle"]] +[[!template text="""I actually did all my programming in the""" start="00:20:56.260" video="qanda-uni" id="subtitle"]] +[[!template text="""literary world even in the early 1990s,""" start="00:20:58.320" video="qanda-uni" id="subtitle"]] +[[!template text="""not using Org Mode, which didn't exist yet,""" start="00:21:00.920" video="qanda-uni" id="subtitle"]] +[[!template text="""but using Norman Ramsey's Norep preprocessor.""" start="00:21:03.040" video="qanda-uni" id="subtitle"]] +[[!template text="""They still use it inside the Org-Mode today.""" start="00:21:07.240" video="qanda-uni" id="subtitle"]] +[[!template text="""This preprocessor, Norep,""" start="00:21:10.400" video="qanda-uni" id="subtitle"]] +[[!template text="""allows you to tangle code from within an""" start="00:21:11.920" video="qanda-uni" id="subtitle"]] +[[!template text="""Org-Mode file that is self-standing file,""" start="00:21:14.240" video="qanda-uni" id="subtitle"]] +[[!template text="""much like Org-mode's edit functions,""" start="00:21:16.360" video="qanda-uni" id="subtitle"]] +[[!template text="""which export code blocks into buffers in""" start="00:21:19.540" video="qanda-uni" id="subtitle"]] +[[!template text="""whatever language the code blocks.""" start="00:21:21.900" video="qanda-uni" id="subtitle"]] +[[!template text="""In data science, these interactive notebooks,""" start="00:21:25.940" video="qanda-uni" id="subtitle"]] +[[!template text="""in 1 of the interpreted languages like Julia,""" start="00:21:29.640" video="qanda-uni" id="subtitle"]] +[[!template text="""Python, or R dominating?""" start="00:21:32.776" video="qanda-uni" id="subtitle"]] +[[!template text="""The basic technology is that of Jupyter""" start="00:21:34.680" video="qanda-uni" id="subtitle"]] +[[!template text="""notebooks, which take their name from Julia,""" start="00:21:37.420" video="qanda-uni" id="subtitle"]] +[[!template text="""Python, and R. And these notebooks use a""" start="00:21:39.860" video="qanda-uni" id="subtitle"]] +[[!template text="""spruce-dark shell, for example,""" start="00:21:43.040" video="qanda-uni" id="subtitle"]] +[[!template text="""IPython, and an option to add SQL cells.""" start="00:21:44.920" video="qanda-uni" id="subtitle"]] +[[!template text="""All good inside Emacs has a large number of""" start="00:21:50.460" video="qanda-uni" id="subtitle"]] +[[!template text="""advantages. Some of them are listed here over""" start="00:21:53.340" video="qanda-uni" id="subtitle"]] +[[!template text="""these notebooks. 2 of these stand out""" start="00:21:56.800" video="qanda-uni" id="subtitle"]] +[[!template text="""particularly. Different languages can be""" start="00:21:59.180" video="qanda-uni" id="subtitle"]] +[[!template text="""mixed as shown in the image.""" start="00:22:02.860" video="qanda-uni" id="subtitle"]] +[[!template text="""While in Jupyter notebooks,""" start="00:22:06.460" video="qanda-uni" id="subtitle"]] +[[!template text="""a notebook is limited to running a kernel in""" start="00:22:07.920" video="qanda-uni" id="subtitle"]] +[[!template text="""1 language only. The content of the notebook,""" start="00:22:10.900" video="qanda-uni" id="subtitle"]] +[[!template text="""its document code or output part can be""" start="00:22:14.440" video="qanda-uni" id="subtitle"]] +[[!template text="""exported in a variety of forms.""" start="00:22:16.980" video="qanda-uni" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20uni%3A%20Authoring%20and%20presenting%20university%20courses%20with%20Emacs%20and%20a%20full%20libre%20software%20stack) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/uni-before.md b/2023/info/uni-before.md new file mode 100644 index 00000000..6ac65fe2 --- /dev/null +++ b/2023/info/uni-before.md @@ -0,0 +1,35 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 21-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="uni-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="uni-mainVideo" data=""" +00:00.000 Introduction +01:12.440 Presenting +01:47.820 Hardware +04:46.610 Example setup +05:30.520 Presentation software: flexibility in function +07:05.950 Live demonstration +07:59.850 OBS +10:26.060 Animation +10:55.790 Emacs +11:42.260 Making slides and handouts with Org Mode +13:22.680 Pedagogy first +16:17.790 org-teach +19:38.330 Blank slides +19:50.050 Animations +20:19.270 Conclusion + +"""]]<div></div>Duration: 20:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li><li><a href="https://toobnix.org/w/mAnNW7jnPq5qhUPH2dzVQf">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="uni-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="uni-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus"></audio></div><div></div>Duration: 22:32 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/uni-nav.md b/2023/info/uni-nav.md new file mode 100644 index 00000000..6694d47e --- /dev/null +++ b/2023/info/uni-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a> +Next by track: <a href="/2023/talks/teaching">Teaching computer and data science with literate programming tools</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/voice-after.md b/2023/info/voice-after.md new file mode 100644 index 00000000..32de9a2c --- /dev/null +++ b/2023/info/voice-after.md @@ -0,0 +1,1473 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="voice-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""Hi, I'm Blaine Mooers. I'm an associate professor""" start="00:00:00.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""of biochemistry at the University of Oklahoma""" start="00:00:04.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Health Sciences Center in Oklahoma City.""" start="00:00:06.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""My lab studies the role of RNA structure in RNA editing.""" start="00:00:09.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""We use X-ray crystallography to study the structures""" start="00:00:12.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""of these RNAs. We spend a lot of time in the lab""" start="00:00:17.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""preparing our samples for structural studies,""" start="00:00:19.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and then we also spend a lot of time at the computer""" start="00:00:22.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""analyzing the resulting data.""" start="00:00:26.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I was seeking ways of using voice computing""" start="00:00:29.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to try to enhance my productivity.""" start="00:00:33.040" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Three activities in voice computing""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""I divide voice computing into three activities,""" start="00:00:37.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""speech-to-text or dictation, speech-to-commands,""" start="00:00:41.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and speech-to-code. I'll be talking about""" start="00:00:44.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""speech-to-text and speech-to-commands today""" start="00:00:47.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""because these are two activities""" start="00:00:50.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that are probably most broadly applicable""" start="00:00:55.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to the workflows of people attending this conference.""" start="00:00:57.320" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Talk is not about ... and about ...""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""This talk will not be about Emacspeak.""" start="00:01:02.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This is a venerated program for converting text to speech.""" start="00:01:06.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""We're talking about the flow of information""" start="00:01:11.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in the opposite direction, speech-to-text.""" start="00:01:13.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""We need an Emacs Listens. We don't have one,""" start="00:01:16.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""so I had to seek help from outside the Emacs world""" start="00:01:20.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""via the Voice In Plus. This runs in""" start="00:01:25.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the Google Chrome web browser,""" start="00:01:30.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and it's very good for speech-to-text""" start="00:01:33.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and very easy to learn how to use.""" start="00:01:36.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It also has some speech-to-commands.""" start="00:01:39.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""However, Talon Voice is much better""" start="00:01:42.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""with the speech-to-commands,""" start="00:01:44.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and it's also great at speech-to-code.""" start="00:01:47.560" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Motivations""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""The motivations are, obviously, as I mentioned already,""" start="00:01:53.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for improved productivity.""" start="00:01:57.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So, if you're a fast typist""" start="00:01:59.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""who types faster than they can speak,""" start="00:02:00.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""then nonetheless you might still benefit""" start="00:02:05.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""from voice computing when you grow tired of""" start="00:02:07.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""using the keyboard. On the other hand,""" start="00:02:09.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""you might be a slow typist who talks faster""" start="00:02:12.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""than they can type.""" start="00:02:15.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""In this case, you're definitely going to""" start="00:02:17.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""benefit from dictation because you'll be able to""" start="00:02:19.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""encode more words in text documents in a given day.""" start="00:02:22.860" video="mainVideo-voice" id="subtitle"]] +[[!template text="""If you're a coder, then you may get a kick out of""" start="00:02:29.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""opening programs and websites and coding projects""" start="00:02:33.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""by using your voice.""" start="00:02:37.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Then there are health-related reasons.""" start="00:02:39.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You may have impaired use of your hands, eyes, or both""" start="00:02:41.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""due to accident or disease, or you may suffer from""" start="00:02:44.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a repetitive stress injury. Many of us have this""" start="00:02:49.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in a mild but chronic form of it.""" start="00:02:53.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""We can't take a three-month sabbatical from the keyboard""" start="00:02:55.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""without losing our jobs, so these injuries tend to persist.""" start="00:02:59.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""And then you may have learned""" start="00:03:05.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that it's not good for your health to sit""" start="00:03:06.680" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for prolonged periods of time""" start="00:03:09.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""with your staring at a computer screen.""" start="00:03:11.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can actually dictate to your computer from 20 feet away""" start="00:03:14.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""while looking out the window,""" start="00:03:21.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""thereby giving your lower body a break""" start="00:03:25.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and your eyes a break.""" start="00:03:27.780" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Data""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""I'm not God, so I have to bring data.""" start="00:03:33.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I have two data points here,""" start="00:03:35.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the number of words that I wrote in June and July this year""" start="00:03:38.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and in September and October.""" start="00:03:42.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I adopted the use of voice computing""" start="00:03:45.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in the middle of August. As you can see,""" start="00:03:49.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I got an over three-fold increase in my output.""" start="00:03:53.920" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Voice In in the Chrome Store""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""So this is the Chrome store website for voice-in.""" start="00:03:58.680" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It's only available for Google Chrome.""" start="00:04:07.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You just hit the install button to install it.""" start="00:04:11.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""To configure it, you need to select a language.""" start="00:04:13.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It has support for 40 languages""" start="00:04:16.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and it supports about a dozen different dialects of English,""" start="00:04:19.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""including Australian.""" start="00:04:23.120" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Works in web pages with text areas""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""It works on web pages with text areas,""" start="00:04:25.628" video="mainVideo-voice" id="subtitle"]] +[[!template text="""so it works. I use it regularly""" start="00:04:29.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""on Overleaf and 750words.com,""" start="00:04:33.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a distraction-free environment for writing.""" start="00:04:37.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It also works in webmails. It works in Google.""" start="00:04:42.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It works in Jupyter Lab, of course,""" start="00:04:46.780" video="mainVideo-voice" id="subtitle"]] +[[!template text="""because that runs in the browser.""" start="00:04:51.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It also works in Jupyter Notebook and Colab Notebook.""" start="00:04:52.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It should work in Cloudmacs.""" start="00:04:58.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I've mapped option-L to opening Voice In""" start="00:05:01.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""when the cursor is on a web page that has a text area.""" start="00:05:04.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So [the presence of a text area is] the main limiting factor.""" start="00:05:09.120" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Built-in commands in Voice In Plus""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""[Voice In] has a number of built-in commands.""" start="00:05:16.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can turn it off by saying "stop dictation".""" start="00:05:19.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It doesn't distinguish between""" start="00:05:24.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a command mode and a dictation mode.""" start="00:05:26.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It has undo command. You use the command""" start="00:05:28.800" video="mainVideo-voice" id="subtitle"]] +[[!template text=""""copy that" to copy a selection.""" start="00:05:33.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""The "press" commands are used in the browser.""" start="00:05:36.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You [say] "press enter" to issue a command or [submit] text""" start="00:05:40.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that has been written in a web form,""" start="00:05:44.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and then "press tab" will open up the next tab""" start="00:05:50.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in a web browser. The scroll up and down""" start="00:05:55.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""will allow you to navigate a web page.""" start="00:05:58.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I've put together a quiz about these commands""" start="00:06:02.380" video="mainVideo-voice" id="subtitle"]] +[[!template text="""so that you can go through this quiz several times""" start="00:06:05.820" video="mainVideo-voice" id="subtitle"]] +[[!template text="""until you get at least 90 percent of them correct,""" start="00:06:09.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""90 percent of the questions correct.""" start="00:06:14.700" video="mainVideo-voice" id="subtitle"]] +[[!template text="""In order to boost your recall of the commands,""" start="00:06:16.680" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I have a Python script that you can probably""" start="00:06:20.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""pound through the quiz with""" start="00:06:23.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in less than a minute, once you know the commands.""" start="00:06:26.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I also provide an Elisp version of this quiz,""" start="00:06:32.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""but it's a little slower to operate.""" start="00:06:35.600" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Common errors made by Voice In""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""These are some common errors""" start="00:06:41.740" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that I've run into with Voice In.""" start="00:06:43.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It likes to contract statements like "I will" into "I'll".""" start="00:06:45.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Contractions are not used in formal writing,""" start="00:06:50.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and most of my writing is formal writing, so this annoys me.""" start="00:06:55.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I will show you how I corrected for that problem.""" start="00:07:00.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It also drops the first word in sentences quite often.""" start="00:07:04.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This might be some speech issue that I have.""" start="00:07:10.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It inserts the wrong word because it's not in the dictionary""" start="00:07:13.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that was used to train it. So, for example,""" start="00:07:17.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the word PyMOL is the name of a molecular graphics program""" start="00:07:22.620" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that we use in our field. It doesn't recognize PyMOL.""" start="00:07:26.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Instead, it substitutes in the word "primal".""" start="00:07:31.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Since I don't use "primal" very often,""" start="00:07:34.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I've mapped the word "primal" to "PyMOL"""" start="00:07:38.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in some custom commands I'll talk about in a minute.""" start="00:07:42.300" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Then there's a problem that the commands that exist""" start="00:07:45.660" video="mainVideo-voice" id="subtitle"]] +[[!template text="""might get executed when you speak them when, in fact,""" start="00:07:50.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""you wanted to use the words in those commands""" start="00:07:54.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""during your dictation.""" start="00:07:58.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So this is a problem, a pitfall of Voice In,""" start="00:08:01.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in that it doesn't have a command mode""" start="00:08:07.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that's separate from a dictation mode.""" start="00:08:08.920" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Custom speech-to-text commands""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""You can set up through a very easy-to-use GUI""" start="00:08:14.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""custom voice commands mapped to what you want inserted,""" start="00:08:20.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""so this is how misinterpreted words can be corrected.""" start="00:08:26.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You just map the misinterpreted word to the intended word.""" start="00:08:32.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can also map the contractions to their expansions.""" start="00:08:35.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I did this for 94 English contractions,""" start="00:08:42.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and you can find these on GitHub.""" start="00:08:46.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can also insert acronyms and expand those acronyms.""" start="00:08:50.140" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I apply the same approach to the first names of colleagues.""" start="00:08:56.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I say "expand Fred", for example,""" start="00:09:00.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to get Fred's first and last name""" start="00:09:03.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""with the [correct] spelling of his very long German name.""" start="00:09:07.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can also insert other trivia like favorite URLs.""" start="00:09:12.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can insert LaTeX snippets.""" start="00:09:19.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It handles correctly multi-line snippets.""" start="00:09:24.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You just have to enclose them in double quotes.""" start="00:09:34.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can even insert BibTeX cite keys for references""" start="00:09:39.420" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that you use frequently. All fields""" start="00:09:45.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""have certain key references for certain methods or topics.""" start="00:09:46.880" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Custom speech-to-commands""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""Then it has a set of commands that you can customize""" start="00:09:59.420" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for the purpose of speech-to-commands""" start="00:10:05.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to get the computer to do something""" start="00:10:08.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""like open up a specific website or save the current writing.""" start="00:10:09.680" video="mainVideo-voice" id="subtitle"]] +[[!template text="""In this case, we have "press: command-s"""" start="00:10:15.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for saving current writing.""" start="00:10:23.541" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can change the language [with "lang:"],""" start="00:10:27.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and you can change the case of the text [with "case:"].""" start="00:10:28.100" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Introducing Talon Voice""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""But the speech-to-command repertoire is quite limited""" start="00:10:37.540" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in Voice In, so it's now time to pick up on Talon Voice.""" start="00:10:41.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This is an open source project. It's free.""" start="00:10:49.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It is highly configurable via TalonScript,""" start="00:10:54.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""which is a subset of Python.""" start="00:10:57.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can use either TalonScript or Python to configure it,""" start="00:10:58.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""but it's easier to code up your configuration""" start="00:11:03.040" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in TalonScript.""" start="00:11:06.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It has a Python interpreter embedded in it,""" start="00:11:08.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""so you don't have to mess around with installing""" start="00:11:10.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""yet another Python interpreter.""" start="00:11:13.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It runs on all platforms, and it has a dictation mode""" start="00:11:14.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that's separate from a command mode.""" start="00:11:21.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You can activate it,""" start="00:11:24.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and it'll be in a listening state asleep.""" start="00:11:25.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You just bark out "Talon Wake" to start to wake it up,""" start="00:11:31.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and "Talon Sleep" to have it go into a listening state.""" start="00:11:36.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It has a very welcoming community""" start="00:11:43.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in the Talon Slack channel.""" start="00:11:47.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Then I need to point out that there's several packages""" start="00:11:50.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that others have developed that run on top of Talon,""" start="00:11:56.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""but one of particular note is by Pokey Rule.""" start="00:11:59.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""He has on his website some really well-done videos""" start="00:12:03.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that demonstrate how he uses Cursorless""" start="00:12:08.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to move the cursor around using voice commands.""" start="00:12:11.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This, however, runs on VS Code.""" start="00:12:17.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""At least that's the text editor""" start="00:12:20.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for which he's primarily developing Cursorless.""" start="00:12:23.360" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Talon GUI""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""I followed the [install] protocol outlined by Tara Roys.""" start="00:12:28.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""She has a collection of tutorials""" start="00:12:35.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""on YouTube as well as on GitHub that are quite helpful.""" start="00:12:38.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I followed her tutorial for installing""" start="00:12:44.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Talon on macOS without any issues,""" start="00:12:49.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""but allow for half an hour to an hour""" start="00:12:51.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to go through the process. When you're done,""" start="00:12:55.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""you'll have this Talon icon appear in the toolbar""" start="00:12:57.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""on the Mac. When it has this diagonal line across it,""" start="00:13:02.200" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that means it's in the sleep state.""" start="00:13:06.120" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So, this leads to cascading pull-down menus.""" start="00:13:09.540" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This is it for the GUI.""" start="00:13:13.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""One of your first tasks is to select""" start="00:13:19.640" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a language model that will be used to interpret""" start="00:13:26.520" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the sounds that you generate as words.""" start="00:13:30.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""And the other kind of key feature is that there's a,""" start="00:13:35.180" video="mainVideo-voice" id="subtitle"]] +[[!template text="""under scripting, there's a view log pull-down""" start="00:13:38.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that opens up a window displaying the log file.""" start="00:13:43.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Whenever you make a change in a Talon configuration file,""" start="00:13:48.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that change is implemented immediately.""" start="00:13:52.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You do not have to restart Talon""" start="00:13:55.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to get the change to take effect.""" start="00:13:57.600" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Talon file with web scope""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""This is an example of a Talon file.""" start="00:14:02.540" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It has two components. It has a header above the dash that describes""" start="00:14:04.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the scope of the commands contained below the dash.""" start="00:14:10.500" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Each command is separated by a blank line.""" start="00:14:14.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""If a voice command is mapped to multiple actions,""" start="00:14:19.740" video="mainVideo-voice" id="subtitle"]] +[[!template text="""these are listed separately on indented lines""" start="00:14:24.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""below the first line.""" start="00:14:31.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""The words that are in square brackets are optional.""" start="00:14:33.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So, I have mapped the word toggle voice in,""" start="00:14:39.420" video="mainVideo-voice" id="subtitle"]] +[[!template text="""or the phrase toggle voice in,""" start="00:14:44.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to the keyboard shortcut Alt L""" start="00:14:46.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in order to toggle on or off voice in.""" start="00:14:51.280" video="mainVideo-voice" id="subtitle"]] +[[!template text="""If I toggle voice in on,""" start="00:14:55.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I need to immediately toggle off Talon,""" start="00:14:57.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and this is done through this key command for Control T,""" start="00:15:01.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""which is mapped to speech toggle.""" start="00:15:09.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""Speech toggle. Then there are,""" start="00:15:11.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""there's a couple other examples.""" start="00:15:20.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""So, if there's no header present,""" start="00:15:24.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""it's an optional feature of Talon files,""" start="00:15:26.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""then the commands in the file will apply in all situations,""" start="00:15:29.600" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in all modes.""" start="00:15:32.640" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Terminals on remote and virtual machines""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""Here we have two restrictions.""" start="00:15:34.015" video="mainVideo-voice" id="subtitle"]] +[[!template text="""These commands will only work""" start="00:15:36.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""when using the iTerm2 [ccc] terminal emulator for the Mac,""" start="00:15:38.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and then only when the title of the window in iTerm2""" start="00:15:42.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""has this particular address,""" start="00:15:48.240" video="mainVideo-voice" id="subtitle"]] +[[!template text="""which is what appears when I've logged into""" start="00:15:52.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the supercomputer at the University of Oklahoma.""" start="00:15:55.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""One of the commands in this file is checkjobs.""" start="00:16:00.060" video="mainVideo-voice" id="subtitle"]] +[[!template text="""It's mapped to an alias,""" start="00:16:03.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a bash alias called cj for "check jobs",""" start="00:16:05.540" video="mainVideo-voice" id="subtitle"]] +[[!template text="""which in turn is mapped to a script called checkjobs.sh""" start="00:16:10.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""that, when it's run, returns a listing""" start="00:16:17.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""of the pending and running jobs on the supercomputer""" start="00:16:20.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in a format that I find pleasing.""" start="00:16:23.220" video="mainVideo-voice" id="subtitle"]] +[[!template text="""This `\n` after cj, the new line character,""" start="00:16:26.081" video="mainVideo-voice" id="subtitle"]] +[[!template text="""enters the command, so I don't have to do that""" start="00:16:34.560" video="mainVideo-voice" id="subtitle"]] +[[!template text="""as an additional step. Likewise,""" start="00:16:39.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""here's a similar setup for interacting with""" start="00:16:43.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""a Ubuntu virtual machine.""" start="00:16:46.800" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Recommendations""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""In terms of picking up voice computing,""" start="00:16:52.500" video="mainVideo-voice" id="subtitle"]] +[[!template text="""these are my recommendations.""" start="00:16:55.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You're going to run into more errors""" start="00:16:57.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""than you may like initially,""" start="00:16:59.760" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and so you need some patience in dealing with those.""" start="00:17:01.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""And also, it'll take you a while""" start="00:17:07.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to get your head wrapped around Talon and how it works.""" start="00:17:09.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You'll definitely want to use these custom commands""" start="00:17:16.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""to correct the errors or shortcomings""" start="00:17:19.440" video="mainVideo-voice" id="subtitle"]] +[[!template text="""of the language models. And you've seen how,""" start="00:17:21.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""by opening up projects by voice commands,""" start="00:17:26.920" video="mainVideo-voice" id="subtitle"]] +[[!template text="""you can reduce friction""" start="00:17:29.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""in terms of restarting work on a project.""" start="00:17:31.360" video="mainVideo-voice" id="subtitle"]] +[[!template text="""You've seen how Voice In is preferred""" start="00:17:36.660" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for more accurate dictation.""" start="00:17:40.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I think my error rate is about 1 to 2 percent.""" start="00:17:44.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""That is, 1 to 2 out of 100 words are incorrect""" start="00:17:48.080" video="mainVideo-voice" id="subtitle"]] +[[!template text="""versus Talon Voice where I think""" start="00:17:53.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""the error rate is closer to 5 percent.""" start="00:17:56.320" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I have put together [a library of English] contractions""" start="00:18:00.840" video="mainVideo-voice" id="subtitle"]] +[[!template text="""[and their expansion] for Talon [too],""" start="00:18:03.508" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and they can be found here on GitHub.""" start="00:18:04.881" video="mainVideo-voice" id="subtitle"]] +[[!template text="""And I also have [posted] a quiz of 600 questions""" start="00:18:07.480" video="mainVideo-voice" id="subtitle"]] +[[!template text="""about some basic Talon commands.""" start="00:18:12.960" video="mainVideo-voice" id="subtitle"]] + +[[!template new="1" text="""Acknowledgements""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]] + +[[!template text="""I'd like to thank the people who've helped me out""" start="00:18:17.720" video="mainVideo-voice" id="subtitle"]] +[[!template text="""on the Talon Slack channel""" start="00:18:21.000" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and members of the Oklahoma Data Science Workshop""" start="00:18:22.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""where I gave an hour-long talk on this topic""" start="00:18:25.800" video="mainVideo-voice" id="subtitle"]] +[[!template text="""several weeks ago.""" start="00:18:29.880" video="mainVideo-voice" id="subtitle"]] +[[!template text="""I'd like to thank my friends""" start="00:18:30.960" video="mainVideo-voice" id="subtitle"]] +[[!template text="""at the Berlin and Austin Emacs Meetup""" start="00:18:34.160" video="mainVideo-voice" id="subtitle"]] +[[!template text="""and at the M-x research Slack channel.""" start="00:18:37.400" video="mainVideo-voice" id="subtitle"]] +[[!template text="""And I thank these grant funding agencies""" start="00:18:42.660" video="mainVideo-voice" id="subtitle"]] +[[!template text="""for supporting my work. I'll be happy to take any questions.""" start="00:18:45.120" video="mainVideo-voice" id="subtitle"]] + +<a name="voice-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Dictation.""" start="00:00:00.480" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. All right I think we are live now.""" start="00:00:06.020" video="qanda-voice" id="subtitle"]] +[[!template text="""The stream is here. So folks if you would""" start="00:00:08.980" video="qanda-voice" id="subtitle"]] +[[!template text="""please post your questions on the pad and""" start="00:00:11.320" video="qanda-voice" id="subtitle"]] +[[!template text="""we'll take them up here.""" start="00:00:13.259" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Boy so I don't have myself set up with the""" start="00:00:20.500" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, I can read the questions to you if you""" start="00:00:25.140" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: pad. That would be fantastic.""" start="00:00:26.939" video="qanda-voice" id="subtitle"]] +[[!template text="""Thank you.""" start="00:00:27.900" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: would prefer that. Sure.""" start="00:00:28.779" video="qanda-voice" id="subtitle"]] +[[!template text="""Thanks.""" start="00:00:29.220" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Well, for the purpose of breaking the ice a""" start="00:00:58.380" video="qanda-voice" id="subtitle"]] +[[!template text="""little bit, I can provide a live""" start="00:01:01.400" video="qanda-voice" id="subtitle"]] +[[!template text="""demonstration of the use of this Voice In""" start="00:01:03.840" video="qanda-voice" id="subtitle"]] +[[!template text="""plugin for Google Chrome.""" start="00:01:06.300" video="qanda-voice" id="subtitle"]] +[[!template text="""So I have, let's see, say new sentence.""" start="00:01:11.080" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm on a website that is called 750 words.""" start="00:01:20.400" video="qanda-voice" id="subtitle"]] +[[!template text="""It provides a text area where without any""" start="00:01:25.080" video="qanda-voice" id="subtitle"]] +[[!template text="""other distracting icons for the purpose of""" start="00:01:30.580" video="qanda-voice" id="subtitle"]] +[[!template text="""writing and I'm using it for the purpose of""" start="00:01:34.040" video="qanda-voice" id="subtitle"]] +[[!template text="""capturing my words that I'm dictating and I""" start="00:01:38.680" video="qanda-voice" id="subtitle"]] +[[!template text="""have enabled the Voice In plugin by hitting""" start="00:01:42.979" video="qanda-voice" id="subtitle"]] +[[!template text="""the option L command. New sentence.""" start="00:01:48.280" video="qanda-voice" id="subtitle"]] +[[!template text="""So it interpreted that command new sentence""" start="00:01:54.479" video="qanda-voice" id="subtitle"]] +[[!template text="""even though I didn't pronounce it correctly,""" start="00:01:56.260" video="qanda-voice" id="subtitle"]] +[[!template text="""which is a pretty good demonstration of its""" start="00:01:59.440" video="qanda-voice" id="subtitle"]] +[[!template text="""accuracy. New sentence.""" start="00:02:00.920" video="qanda-voice" id="subtitle"]] +[[!template text="""Oops, that didn't work.""" start="00:02:06.420" video="qanda-voice" id="subtitle"]] +[[!template text="""Undo. New sentence. So new sentence is a""" start="00:02:15.040" video="qanda-voice" id="subtitle"]] +[[!template text="""combination of 2 commands,""" start="00:02:16.040" video="qanda-voice" id="subtitle"]] +[[!template text="""period and new line. So I've found it more""" start="00:02:23.820" video="qanda-voice" id="subtitle"]] +[[!template text="""convenient just to say new sentence than""" start="00:02:25.840" video="qanda-voice" id="subtitle"]] +[[!template text="""having to say period and new line.""" start="00:02:28.440" video="qanda-voice" id="subtitle"]] +[[!template text="""You can see that it's able to keep up with""" start="00:02:33.900" video="qanda-voice" id="subtitle"]] +[[!template text="""most of my speech, and it has to interpret""" start="00:02:41.840" video="qanda-voice" id="subtitle"]] +[[!template text="""the sounds that I'm making and convert those""" start="00:02:44.760" video="qanda-voice" id="subtitle"]] +[[!template text="""into words, so there's always going to be a""" start="00:02:47.600" video="qanda-voice" id="subtitle"]] +[[!template text="""lag. New sentence. But I've found that I can""" start="00:02:59.580" video="qanda-voice" id="subtitle"]] +[[!template text="""generate about 2,000, up to 2,000""" start="00:03:02.720" video="qanda-voice" id="subtitle"]] +[[!template text="""words an hour as I gather my thoughts and""" start="00:03:07.040" video="qanda-voice" id="subtitle"]] +[[!template text="""talk in my rather slow fashion of speaking.""" start="00:03:10.960" video="qanda-voice" id="subtitle"]] +[[!template text="""New sentence, if you're a really fast""" start="00:03:15.860" video="qanda-voice" id="subtitle"]] +[[!template text="""speaker, it might have trouble keeping up.""" start="00:03:18.560" video="qanda-voice" id="subtitle"]] +[[!template text="""New sentence. I like to write When I'm using""" start="00:03:30.860" video="qanda-voice" id="subtitle"]] +[[!template text="""the keyboard with 1 sentence per line,""" start="00:03:34.360" video="qanda-voice" id="subtitle"]] +[[!template text="""so that when I copy my text and paste it into""" start="00:03:38.520" video="qanda-voice" id="subtitle"]] +[[!template text="""Emacs, for example, I can resort the""" start="00:03:43.680" video="qanda-voice" id="subtitle"]] +[[!template text="""sentences very easily by just selecting 1""" start="00:03:47.300" video="qanda-voice" id="subtitle"]] +[[!template text="""line at a time. I like to keep the sentences""" start="00:03:50.600" video="qanda-voice" id="subtitle"]] +[[!template text="""unwrapped in that fashion because that""" start="00:03:53.480" video="qanda-voice" id="subtitle"]] +[[!template text="""greatly eases the rewriting phase.""" start="00:03:56.320" video="qanda-voice" id="subtitle"]] +[[!template text="""And I'm almost have sort of a hybrid reverse""" start="00:04:01.120" video="qanda-voice" id="subtitle"]] +[[!template text="""outlining approach by doing that.""" start="00:04:03.160" video="qanda-voice" id="subtitle"]] +[[!template text="""New sentence. Looks like I have gotten ahead""" start="00:04:14.340" video="qanda-voice" id="subtitle"]] +[[!template text="""of it a bit and it has not kept up.""" start="00:04:18.079" video="qanda-voice" id="subtitle"]] +[[!template text="""But generally, it does keep up pretty well.""" start="00:04:21.560" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Nice. Thanks for the demo.""" start="00:04:26.180" video="qanda-voice" id="subtitle"]] +[[!template text="""Let's see. I think we have.""" start="00:04:30.380" video="qanda-voice" id="subtitle"]] +[[!template text="""Yeah, sorry.""" start="00:04:31.480" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: You're welcome. Go ahead.""" start="00:04:33.520" video="qanda-voice" id="subtitle"]] +[[!template text="""You can see that it has this EN means English""" start="00:04:42.380" video="qanda-voice" id="subtitle"]] +[[!template text="""and then dash US. There's actually about 40""" start="00:04:46.880" video="qanda-voice" id="subtitle"]] +[[!template text="""languages that it supports,""" start="00:04:48.000" video="qanda-voice" id="subtitle"]] +[[!template text="""including several variants of German and""" start="00:04:52.280" video="qanda-voice" id="subtitle"]] +[[!template text="""about a dozen English dialects.""" start="00:04:54.640" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Nice. Let's see, I think we have some""" start="00:05:05.200" video="qanda-voice" id="subtitle"]] +[[!template text="""comments and questions trickling in.""" start="00:05:06.860" video="qanda-voice" id="subtitle"]] +[[!template text="""So someone is saying that there is a text to""" start="00:05:11.160" video="qanda-voice" id="subtitle"]] +[[!template text="""command application or utility called Clipia,""" start="00:05:14.700" video="qanda-voice" id="subtitle"]] +[[!template text="""C-L-I-P-I-A, that they think is awesome.""" start="00:05:19.395" video="qanda-voice" id="subtitle"]] +[[!template text="""Clipia that they think is awesome.""" start="00:05:19.860" video="qanda-voice" id="subtitle"]] +[[!template text="""And someone else is also saying that Sox,""" start="00:05:24.960" video="qanda-voice" id="subtitle"]] +[[!template text="""S-O-X is another good alternative.""" start="00:05:27.180" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: I've not explored those yet.""" start="00:05:34.560" video="qanda-voice" id="subtitle"]] +[[!template text="""So thank you very much for the suggestions.""" start="00:05:36.740" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: So I'll... I just dropped a link to the pad""" start="00:05:42.700" video="qanda-voice" id="subtitle"]] +[[!template text="""page here in the chat and on the big blue""" start="00:05:45.360" video="qanda-voice" id="subtitle"]] +[[!template text="""button if you'd like to open that up as well.""" start="00:05:47.320" video="qanda-voice" id="subtitle"]] +[[!template text="""But I'll continue reading the comments and""" start="00:05:50.280" video="qanda-voice" id="subtitle"]] +[[!template text="""questions. So the first question,""" start="00:05:54.340" video="qanda-voice" id="subtitle"]] +[[!template text="""I guess, is that could you comment on how""" start="00:05:56.420" video="qanda-voice" id="subtitle"]] +[[!template text="""speaking versus typing affects your logic or""" start="00:06:01.800" video="qanda-voice" id="subtitle"]] +[[!template text="""the content, quote unquote,""" start="00:06:03.260" video="qanda-voice" id="subtitle"]] +[[!template text="""that you write?""" start="00:06:05.020" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: I find that this is like the difference""" start="00:06:10.320" video="qanda-voice" id="subtitle"]] +[[!template text="""between writing your thoughts down on a blank""" start="00:06:15.600" video="qanda-voice" id="subtitle"]] +[[!template text="""piece of printer paper versus paper bound""" start="00:06:18.640" video="qanda-voice" id="subtitle"]] +[[!template text="""with a leather notebook.""" start="00:06:21.100" video="qanda-voice" id="subtitle"]] +[[!template text="""I don't think there's any real difference.""" start="00:06:24.300" video="qanda-voice" id="subtitle"]] +[[!template text="""I know that some people believe there is a""" start="00:06:27.980" video="qanda-voice" id="subtitle"]] +[[!template text="""solid certain difference,""" start="00:06:29.540" video="qanda-voice" id="subtitle"]] +[[!template text="""But this is for the purpose,""" start="00:06:32.580" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm using this for the purpose of generating""" start="00:06:34.540" video="qanda-voice" id="subtitle"]] +[[!template text="""the first draft because my skills with using""" start="00:06:40.340" video="qanda-voice" id="subtitle"]] +[[!template text="""my voice to edit my text is still not very""" start="00:06:44.160" video="qanda-voice" id="subtitle"]] +[[!template text="""well developed. I'm still more efficient""" start="00:06:46.240" video="qanda-voice" id="subtitle"]] +[[!template text="""using the keyboard for that stage.""" start="00:06:49.120" video="qanda-voice" id="subtitle"]] +[[!template text="""So the hardest part about writing generally""" start="00:06:52.200" video="qanda-voice" id="subtitle"]] +[[!template text="""is getting the first crappy draft written.""" start="00:06:55.160" video="qanda-voice" id="subtitle"]] +[[!template text="""And so I have found that dictation is""" start="00:07:00.040" video="qanda-voice" id="subtitle"]] +[[!template text="""perfectly fine for that phase.""" start="00:07:01.480" video="qanda-voice" id="subtitle"]] +[[!template text="""And I find it actually very conducive for""" start="00:07:07.060" video="qanda-voice" id="subtitle"]] +[[!template text="""just getting the text out.""" start="00:07:09.480" video="qanda-voice" id="subtitle"]] +[[!template text="""The biggest problem that most of us have is""" start="00:07:13.500" video="qanda-voice" id="subtitle"]] +[[!template text="""applying our internal editor.""" start="00:07:15.080" video="qanda-voice" id="subtitle"]] +[[!template text="""And that inhibits us from generating words in""" start="00:07:20.280" video="qanda-voice" id="subtitle"]] +[[!template text="""a free-flowing fashion.""" start="00:07:21.600" video="qanda-voice" id="subtitle"]] +[[!template text="""So I generally do my generative writing.""" start="00:07:26.000" video="qanda-voice" id="subtitle"]] +[[!template text="""So actually I divide my writing into 2""" start="00:07:28.740" video="qanda-voice" id="subtitle"]] +[[!template text="""categories, generative writing,""" start="00:07:30.240" video="qanda-voice" id="subtitle"]] +[[!template text="""generating the first crappy draft,""" start="00:07:32.320" video="qanda-voice" id="subtitle"]] +[[!template text="""and then rewriting. Rewriting is probably 80,""" start="00:07:35.920" video="qanda-voice" id="subtitle"]] +[[!template text="""90% of writing where you go back and rework""" start="00:07:38.520" video="qanda-voice" id="subtitle"]] +[[!template text="""the order of the sentences,""" start="00:07:40.600" video="qanda-voice" id="subtitle"]] +[[!template text="""order of paragraphs, the order of words in a""" start="00:07:43.840" video="qanda-voice" id="subtitle"]] +[[!template text="""sentence and so forth.""" start="00:07:44.700" video="qanda-voice" id="subtitle"]] +[[!template text="""The really hard work. That's best done later""" start="00:07:47.540" video="qanda-voice" id="subtitle"]] +[[!template text="""in the day when I'm more awake.""" start="00:07:49.740" video="qanda-voice" id="subtitle"]] +[[!template text="""I do my general writing first thing in the""" start="00:07:52.880" video="qanda-voice" id="subtitle"]] +[[!template text="""morning when I feel horrible.""" start="00:07:55.320" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm not very alert. That's when my internal""" start="00:07:59.440" video="qanda-voice" id="subtitle"]] +[[!template text="""editor is not very awake and I can get more""" start="00:08:03.340" video="qanda-voice" id="subtitle"]] +[[!template text="""words out, more words past that gatekeeper.""" start="00:08:05.760" video="qanda-voice" id="subtitle"]] +[[!template text="""And so I can do this sitting down,""" start="00:08:09.280" video="qanda-voice" id="subtitle"]] +[[!template text="""I can do this standing up,""" start="00:08:10.640" video="qanda-voice" id="subtitle"]] +[[!template text="""I can do this 20 feet away from my computer""" start="00:08:12.800" video="qanda-voice" id="subtitle"]] +[[!template text="""looking out the window to give my eyes a""" start="00:08:15.440" video="qanda-voice" id="subtitle"]] +[[!template text="""break. So I find it's actually very enjoyable""" start="00:08:19.540" video="qanda-voice" id="subtitle"]] +[[!template text="""to use it in this fashion.""" start="00:08:21.440" video="qanda-voice" id="subtitle"]] +[[!template text="""And the downside is that I wind up generating""" start="00:08:29.640" video="qanda-voice" id="subtitle"]] +[[!template text="""3 times as much text, and that makes for 3""" start="00:08:32.720" video="qanda-voice" id="subtitle"]] +[[!template text="""times as much work when it comes to rewriting""" start="00:08:35.140" video="qanda-voice" id="subtitle"]] +[[!template text="""the text. And that means I'm using the""" start="00:08:39.780" video="qanda-voice" id="subtitle"]] +[[!template text="""keyboard a lot later on in the day and I""" start="00:08:45.040" video="qanda-voice" id="subtitle"]] +[[!template text="""haven't made any progress on recovering from""" start="00:08:47.720" video="qanda-voice" id="subtitle"]] +[[!template text="""my own repetitive stress injury.""" start="00:08:49.760" video="qanda-voice" id="subtitle"]] +[[!template text="""I hope that I will add the use of voice""" start="00:08:56.880" video="qanda-voice" id="subtitle"]] +[[!template text="""commands, speech to commands,""" start="00:08:59.720" video="qanda-voice" id="subtitle"]] +[[!template text="""for editing the text in the future.""" start="00:09:02.800" video="qanda-voice" id="subtitle"]] +[[!template text="""And I'll eventually give my hands more of a""" start="00:09:06.880" video="qanda-voice" id="subtitle"]] +[[!template text="""break.""" start="00:09:07.040" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Right. Thanks. Yeah, that sounds like a nice""" start="00:09:12.280" video="qanda-voice" id="subtitle"]] +[[!template text="""flow of sort of being able to get your words""" start="00:09:15.360" video="qanda-voice" id="subtitle"]] +[[!template text="""out while your internal editor is still not""" start="00:09:18.740" video="qanda-voice" id="subtitle"]] +[[!template text="""inhibiting things. And then later in the day""" start="00:09:21.220" video="qanda-voice" id="subtitle"]] +[[!template text="""or days, get back to the actual rewriting and""" start="00:09:25.320" video="qanda-voice" id="subtitle"]] +[[!template text="""editing.""" start="00:09:25.520" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Cool. So this allows you to actually separate""" start="00:09:31.320" video="qanda-voice" id="subtitle"]] +[[!template text="""those 2 activities, not only by time.""" start="00:09:33.640" video="qanda-voice" id="subtitle"]] +[[!template text="""So many professional writers will spend""" start="00:09:36.840" video="qanda-voice" id="subtitle"]] +[[!template text="""several hours in the morning doing the""" start="00:09:39.000" video="qanda-voice" id="subtitle"]] +[[!template text="""generative part and then they'll spend the""" start="00:09:41.040" video="qanda-voice" id="subtitle"]] +[[!template text="""rest of the day rewriting.""" start="00:09:41.920" video="qanda-voice" id="subtitle"]] +[[!template text="""So they have separated those 2 activities""" start="00:09:46.000" video="qanda-voice" id="subtitle"]] +[[!template text="""temporally. What most people actually do is,""" start="00:09:49.340" video="qanda-voice" id="subtitle"]] +[[!template text="""you know, they do the generative part and""" start="00:09:51.540" video="qanda-voice" id="subtitle"]] +[[!template text="""then they write 1 sentence and they apply""" start="00:09:53.300" video="qanda-voice" id="subtitle"]] +[[!template text="""that internal editor right away because they""" start="00:09:55.460" video="qanda-voice" id="subtitle"]] +[[!template text="""want to write the first draft in a perfect,""" start="00:09:57.720" video="qanda-voice" id="subtitle"]] +[[!template text="""as a perfect version as the final draft And""" start="00:10:02.400" video="qanda-voice" id="subtitle"]] +[[!template text="""that slows them down dramatically.""" start="00:10:03.840" video="qanda-voice" id="subtitle"]] +[[!template text="""But this also allows you to separate these 2""" start="00:10:08.160" video="qanda-voice" id="subtitle"]] +[[!template text="""activities in terms of modality.""" start="00:10:10.320" video="qanda-voice" id="subtitle"]] +[[!template text="""You're going to do the generative writing by""" start="00:10:13.940" video="qanda-voice" id="subtitle"]] +[[!template text="""voice and the rewriting by keyboard.""" start="00:10:16.560" video="qanda-voice" id="subtitle"]] +[[!template text="""So I think this is 1 way that many people can""" start="00:10:22.200" video="qanda-voice" id="subtitle"]] +[[!template text="""get into using speech to text in a productive""" start="00:10:26.040" video="qanda-voice" id="subtitle"]] +[[!template text="""way.""" start="00:10:26.640" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Nice. Yeah, that sounds great.""" start="00:10:30.480" video="qanda-voice" id="subtitle"]] +[[!template text="""Let's see. I think we have about 3 or 4""" start="00:10:33.940" video="qanda-voice" id="subtitle"]] +[[!template text="""minutes live. So I think we have time for at""" start="00:10:37.840" video="qanda-voice" id="subtitle"]] +[[!template text="""least another question.""" start="00:10:38.560" video="qanda-voice" id="subtitle"]] +[[!template text="""Have you tried the chat GPT voice chat""" start="00:10:41.920" video="qanda-voice" id="subtitle"]] +[[!template text="""interface? And if so, how has been your""" start="00:10:44.540" video="qanda-voice" id="subtitle"]] +[[!template text="""experience of it? As someone experienced with""" start="00:10:47.020" video="qanda-voice" id="subtitle"]] +[[!template text="""voice control, interested to hear your""" start="00:10:48.640" video="qanda-voice" id="subtitle"]] +[[!template text="""thoughts, performance relative to the free""" start="00:10:51.940" video="qanda-voice" id="subtitle"]] +[[!template text="""software tools in particular?""" start="00:10:52.960" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't have much experience with that""" start="00:10:57.180" video="qanda-voice" id="subtitle"]] +[[!template text="""particular software. I have used Whisper a""" start="00:11:01.320" video="qanda-voice" id="subtitle"]] +[[!template text="""little bit. And so that's related.""" start="00:11:03.400" video="qanda-voice" id="subtitle"]] +[[!template text="""And of course you have this problem of lag so""" start="00:11:10.260" video="qanda-voice" id="subtitle"]] +[[!template text="""I find that it's a whisper is good for""" start="00:11:12.800" video="qanda-voice" id="subtitle"]] +[[!template text="""spitting out a sentence you know maybe for a""" start="00:11:16.380" video="qanda-voice" id="subtitle"]] +[[!template text="""doc string in a programming file.""" start="00:11:20.160" video="qanda-voice" id="subtitle"]] +[[!template text="""But I find that it's very prone to""" start="00:11:26.060" video="qanda-voice" id="subtitle"]] +[[!template text="""hallucinations. And I find myself spending""" start="00:11:30.060" video="qanda-voice" id="subtitle"]] +[[!template text="""half my time deleting the hallucinations,""" start="00:11:32.720" video="qanda-voice" id="subtitle"]] +[[!template text="""I feel like the net gain is diminished as a""" start="00:11:38.700" video="qanda-voice" id="subtitle"]] +[[!template text="""result. There's not much of a net gain in""" start="00:11:41.580" video="qanda-voice" id="subtitle"]] +[[!template text="""terms of what I'm getting out of it.""" start="00:11:43.340" video="qanda-voice" id="subtitle"]] +[[!template text="""Whereas I really appreciate the high level of""" start="00:11:45.800" video="qanda-voice" id="subtitle"]] +[[!template text="""accuracy that I'm getting from voice-in.""" start="00:11:48.780" video="qanda-voice" id="subtitle"]] +[[!template text="""I would use Talon Voice for dictation,""" start="00:11:53.400" video="qanda-voice" id="subtitle"]] +[[!template text="""but at this point, there's a significant""" start="00:11:56.680" video="qanda-voice" id="subtitle"]] +[[!template text="""difference between the level of accuracy of""" start="00:12:00.440" video="qanda-voice" id="subtitle"]] +[[!template text="""voice-in versus Talon voice.""" start="00:12:02.040" video="qanda-voice" id="subtitle"]] +[[!template text="""It's large enough of a difference that I'll""" start="00:12:06.260" video="qanda-voice" id="subtitle"]] +[[!template text="""probably use voice-in for a while until I can""" start="00:12:08.860" video="qanda-voice" id="subtitle"]] +[[!template text="""figure out how to get town voice to generate""" start="00:12:12.700" video="qanda-voice" id="subtitle"]] +[[!template text="""more accurate text.""" start="00:12:15.080" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool. Thank you. I think we have at least""" start="00:12:25.400" video="qanda-voice" id="subtitle"]] +[[!template text="""another 2 or 3 minutes.""" start="00:12:26.580" video="qanda-voice" id="subtitle"]] +[[!template text="""So if folks have any other questions Please""" start="00:12:29.100" video="qanda-voice" id="subtitle"]] +[[!template text="""feel free to post them on the pad and I'll""" start="00:12:31.080" video="qanda-voice" id="subtitle"]] +[[!template text="""check IRC now as well.""" start="00:12:32.560" video="qanda-voice" id="subtitle"]] +[[!template text="""Right, so I see 1 question on IRC asking,""" start="00:12:44.340" video="qanda-voice" id="subtitle"]] +[[!template text="""Are any of these voice command slash""" start="00:12:47.080" video="qanda-voice" id="subtitle"]] +[[!template text="""dictating dictation tools free Libre""" start="00:12:49.600" video="qanda-voice" id="subtitle"]] +[[!template text="""software? They cannot find that information""" start="00:12:52.260" video="qanda-voice" id="subtitle"]] +[[!template text="""Which I think is part of it.""" start="00:12:54.840" video="qanda-voice" id="subtitle"]] +[[!template text="""You just mentioned""" start="00:12:55.320" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: the voice in software.""" start="00:12:57.280" video="qanda-voice" id="subtitle"]] +[[!template text="""There's It's a freemium so The answer is no""" start="00:13:03.260" video="qanda-voice" id="subtitle"]] +[[!template text="""To be able to add the commands,""" start="00:13:05.640" video="qanda-voice" id="subtitle"]] +[[!template text="""the custom commands, you have to pay $48 a""" start="00:13:09.000" video="qanda-voice" id="subtitle"]] +[[!template text="""year. The Talon Voice software is free.""" start="00:13:12.040" video="qanda-voice" id="subtitle"]] +[[!template text="""And the only limitation there is access to""" start="00:13:20.080" video="qanda-voice" id="subtitle"]] +[[!template text="""the language model. If you want to get the""" start="00:13:23.560" video="qanda-voice" id="subtitle"]] +[[!template text="""beta version, you need to subscribe to""" start="00:13:26.720" video="qanda-voice" id="subtitle"]] +[[!template text="""Patreon to help support the developer.""" start="00:13:30.820" video="qanda-voice" id="subtitle"]] +[[!template text="""And I found, I did do that and I really""" start="00:13:36.180" video="qanda-voice" id="subtitle"]] +[[!template text="""didn't find much of an improvement.""" start="00:13:37.400" video="qanda-voice" id="subtitle"]] +[[!template text="""So I really don't intend to do that in the""" start="00:13:43.620" video="qanda-voice" id="subtitle"]] +[[!template text="""future. But otherwise,""" start="00:13:47.100" video="qanda-voice" id="subtitle"]] +[[!template text="""Town Voice, everything is open and free,""" start="00:13:50.680" video="qanda-voice" id="subtitle"]] +[[!template text="""and the Slack community is incredibly""" start="00:13:54.380" video="qanda-voice" id="subtitle"]] +[[!template text="""welcoming. The parallels with the Emacs""" start="00:13:58.340" video="qanda-voice" id="subtitle"]] +[[!template text="""community are pretty striking.""" start="00:14:00.060" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Excellent, thank you. Okay,""" start="00:14:09.520" video="qanda-voice" id="subtitle"]] +[[!template text="""I think we have about another minute on the""" start="00:14:11.800" video="qanda-voice" id="subtitle"]] +[[!template text="""live stream, but I believe the big blue""" start="00:14:13.780" video="qanda-voice" id="subtitle"]] +[[!template text="""button room here is open and will be open,""" start="00:14:16.560" video="qanda-voice" id="subtitle"]] +[[!template text="""So if folks want to join,""" start="00:14:19.860" video="qanda-voice" id="subtitle"]] +[[!template text="""if Blaine maybe has a couple of extra""" start="00:14:21.840" video="qanda-voice" id="subtitle"]] +[[!template text="""minutes. Awesome. Yeah,""" start="00:14:24.680" video="qanda-voice" id="subtitle"]] +[[!template text="""then you're welcome to join and chat with""" start="00:14:26.580" video="qanda-voice" id="subtitle"]] +[[!template text="""Blaine and ask any further questions or just""" start="00:14:28.980" video="qanda-voice" id="subtitle"]] +[[!template text="""do general chatting. Chatting.""" start="00:14:30.060" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So I see a question. How good is Talon""" start="00:14:44.020" video="qanda-voice" id="subtitle"]] +[[!template text="""compared to Whisper? So with Talon,""" start="00:14:53.040" video="qanda-voice" id="subtitle"]] +[[!template text="""I find that the first part of the sentence""" start="00:14:55.380" video="qanda-voice" id="subtitle"]] +[[!template text="""will be fairly accurate and then when I'm""" start="00:15:00.620" video="qanda-voice" id="subtitle"]] +[[!template text="""doing dictation And then towards the end,""" start="00:15:03.480" video="qanda-voice" id="subtitle"]] +[[!template text="""the errors start to accumulate.""" start="00:15:05.640" video="qanda-voice" id="subtitle"]] +[[!template text="""So in general, I think it's error rate is""" start="00:15:09.520" video="qanda-voice" id="subtitle"]] +[[!template text="""about 5 words out of a hundred or so will be""" start="00:15:12.880" video="qanda-voice" id="subtitle"]] +[[!template text="""wrong. And whisper, Whisper is wonderful""" start="00:15:17.560" video="qanda-voice" id="subtitle"]] +[[!template text="""because it will insert punctuation for you.""" start="00:15:21.000" video="qanda-voice" id="subtitle"]] +[[!template text="""But I guess its errors are longer and that""" start="00:15:26.120" video="qanda-voice" id="subtitle"]] +[[!template text="""it'll hallucinate full sentences for you.""" start="00:15:28.740" video="qanda-voice" id="subtitle"]] +[[!template text="""So they both have significant error rates.""" start="00:15:35.460" video="qanda-voice" id="subtitle"]] +[[!template text="""They're just different kinds of errors.""" start="00:15:37.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Interesting.""" start="00:15:42.340" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Hopefully both will improve over time.""" start="00:15:49.000" video="qanda-voice" id="subtitle"]] +[[!template text="""Right.""" start="00:15:50.740" video="qanda-voice" id="subtitle"]] +[[!template text="""Let's see. There's a question.""" start="00:16:04.620" video="qanda-voice" id="subtitle"]] +[[!template text="""Are the green block the author for this talk?""" start="00:16:09.060" video="qanda-voice" id="subtitle"]] +[[!template text="""Not sure what that question means.""" start="00:16:13.380" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Well, there is a green block of text that's I""" start="00:16:19.180" video="qanda-voice" id="subtitle"]] +[[!template text="""think being generated from voice to text,""" start="00:16:22.540" video="qanda-voice" id="subtitle"]] +[[!template text="""speech to text. At the top of the pad,""" start="00:16:25.560" video="qanda-voice" id="subtitle"]] +[[!template text="""I think that's the question.""" start="00:16:26.500" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So I have this Voicens software operating on""" start="00:16:40.060" video="qanda-voice" id="subtitle"]] +[[!template text="""this GitHub, on this 750words.com""" start="00:16:43.080" video="qanda-voice" id="subtitle"]] +[[!template text="""site where I do my generative writing at the""" start="00:16:51.960" video="qanda-voice" id="subtitle"]] +[[!template text="""start of the day. And it just provides a text""" start="00:16:57.340" video="qanda-voice" id="subtitle"]] +[[!template text="""area that's free of distractions.""" start="00:16:59.600" video="qanda-voice" id="subtitle"]] +[[!template text="""And you can see the text that's being""" start="00:17:03.220" video="qanda-voice" id="subtitle"]] +[[!template text="""recorded as I talk. I haven't been saying the""" start="00:17:08.440" video="qanda-voice" id="subtitle"]] +[[!template text="""command new sentence, so there isn't any""" start="00:17:12.440" video="qanda-voice" id="subtitle"]] +[[!template text="""punctuation over our discourse.""" start="00:17:15.980" video="qanda-voice" id="subtitle"]] +[[!template text="""1 thing that I do at the start of the day is""" start="00:17:24.380" video="qanda-voice" id="subtitle"]] +[[!template text="""I like to write in LaTeX.""" start="00:17:27.440" video="qanda-voice" id="subtitle"]] +[[!template text="""Ultimately, that's how I store my writing.""" start="00:17:33.600" video="qanda-voice" id="subtitle"]] +[[!template text="""So new sentence, new sentence.""" start="00:17:37.500" video="qanda-voice" id="subtitle"]] +[[!template text="""See, insert start day.""" start="00:17:51.680" video="qanda-voice" id="subtitle"]] +[[!template text="""So This is an example of a chunk of LaTeX""" start="00:17:58.960" video="qanda-voice" id="subtitle"]] +[[!template text="""code. So I have some reflections on,""" start="00:18:02.620" video="qanda-voice" id="subtitle"]] +[[!template text="""you know, what did I wake up this morning?""" start="00:18:04.640" video="qanda-voice" id="subtitle"]] +[[!template text="""And how do I feel? I have reflections on the""" start="00:18:08.000" video="qanda-voice" id="subtitle"]] +[[!template text="""prior day in terms of what did I get done""" start="00:18:10.680" video="qanda-voice" id="subtitle"]] +[[!template text="""yesterday? Do I remember what I did""" start="00:18:12.240" video="qanda-voice" id="subtitle"]] +[[!template text="""yesterday? What happened last night?""" start="00:18:14.140" video="qanda-voice" id="subtitle"]] +[[!template text="""Focus of today. What's to be done today?""" start="00:18:16.940" video="qanda-voice" id="subtitle"]] +[[!template text="""And so on. So I actually,""" start="00:18:23.180" video="qanda-voice" id="subtitle"]] +[[!template text="""I think I have more down here.""" start="00:18:24.840" video="qanda-voice" id="subtitle"]] +[[!template text="""Then I've set up these lists so that I can""" start="00:18:31.420" video="qanda-voice" id="subtitle"]] +[[!template text="""expand them easily. If I say item,""" start="00:18:33.760" video="qanda-voice" id="subtitle"]] +[[!template text="""then the cursor shows up at the start of an""" start="00:18:40.720" video="qanda-voice" id="subtitle"]] +[[!template text="""item. And I have it coded so that that new""" start="00:18:45.600" video="qanda-voice" id="subtitle"]] +[[!template text="""phrase that I speak will start with a capital""" start="00:18:48.700" video="qanda-voice" id="subtitle"]] +[[!template text="""letter. As you can see,""" start="00:18:52.480" video="qanda-voice" id="subtitle"]] +[[!template text="""so capitalize the word and.""" start="00:18:54.520" video="qanda-voice" id="subtitle"]] +[[!template text="""So in spite of its rather limited command""" start="00:19:02.860" video="qanda-voice" id="subtitle"]] +[[!template text="""syntax, There's some, it's enough to get""" start="00:19:06.000" video="qanda-voice" id="subtitle"]] +[[!template text="""started and maybe in the future,""" start="00:19:08.000" video="qanda-voice" id="subtitle"]] +[[!template text="""they'll add more features.""" start="00:19:09.360" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Cool, that's neat.""" start="00:19:14.540" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So I think this is very helpful for,""" start="00:19:21.440" video="qanda-voice" id="subtitle"]] +[[!template text="""you know, doing things like expanding the""" start="00:19:28.840" video="qanda-voice" id="subtitle"]] +[[!template text="""names of people. So you can do set up""" start="00:19:32.780" video="qanda-voice" id="subtitle"]] +[[!template text="""commands like expand the name of a colleague""" start="00:19:36.100" video="qanda-voice" id="subtitle"]] +[[!template text="""to go from their first name to their full""" start="00:19:40.520" video="qanda-voice" id="subtitle"]] +[[!template text="""name with a proper spelling of their last""" start="00:19:42.900" video="qanda-voice" id="subtitle"]] +[[!template text="""name, which, you know,""" start="00:19:45.240" video="qanda-voice" id="subtitle"]] +[[!template text="""you can wind up spending a lot of time trying""" start="00:19:47.420" video="qanda-voice" id="subtitle"]] +[[!template text="""to look that up. And so this voice in with""" start="00:19:53.400" video="qanda-voice" id="subtitle"]] +[[!template text="""the custom commands enables you to store hard""" start="00:19:57.560" video="qanda-voice" id="subtitle"]] +[[!template text="""to remember information like that.""" start="00:19:59.540" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Great. I see another question.""" start="00:20:08.040" video="qanda-voice" id="subtitle"]] +[[!template text="""How good is Talon compared to Whisper?""" start="00:20:11.140" video="qanda-voice" id="subtitle"]] +[[!template text="""I think you might have answered that already,""" start="00:20:13.140" video="qanda-voice" id="subtitle"]] +[[!template text="""at least partially, but...""" start="00:20:14.380" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Right, yeah. I talked about how it seems that""" start="00:20:19.860" video="qanda-voice" id="subtitle"]] +[[!template text="""Whisperer will carry out hallucinations,""" start="00:20:22.580" video="qanda-voice" id="subtitle"]] +[[!template text="""so it will generate long tracks of error,""" start="00:20:26.280" video="qanda-voice" id="subtitle"]] +[[!template text="""whereas Talon will tend to generate more""" start="00:20:30.340" video="qanda-voice" id="subtitle"]] +[[!template text="""errors towards the ends of sentences,""" start="00:20:31.960" video="qanda-voice" id="subtitle"]] +[[!template text="""in my experience. And the errors are""" start="00:20:36.820" video="qanda-voice" id="subtitle"]] +[[!template text="""generally shorter in extent.""" start="00:20:37.960" video="qanda-voice" id="subtitle"]] +[[!template text="""It doesn't hallucinate for long tracks.""" start="00:20:42.180" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Great. Okay, I think that's all the questions""" start="00:20:50.660" video="qanda-voice" id="subtitle"]] +[[!template text="""that we have on the pad.""" start="00:20:51.760" video="qanda-voice" id="subtitle"]] +[[!template text="""If folks want to join here on Big Blue Button""" start="00:20:54.720" video="qanda-voice" id="subtitle"]] +[[!template text="""for a few minutes and chat with Blaine,""" start="00:20:56.680" video="qanda-voice" id="subtitle"]] +[[!template text="""that also works. Let's see,""" start="00:21:00.260" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm probably going to have to drop in a few""" start="00:21:02.080" video="qanda-voice" id="subtitle"]] +[[!template text="""minutes to catch the next speaker.""" start="00:21:03.900" video="qanda-voice" id="subtitle"]] +[[!template text="""But many thanks, Blaine,""" start="00:21:07.860" video="qanda-voice" id="subtitle"]] +[[!template text="""for a great talk and for the interesting""" start="00:21:09.520" video="qanda-voice" id="subtitle"]] +[[!template text="""demos and the question and answer.""" start="00:21:11.180" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Thank you very much for hosting this.""" start="00:21:14.700" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: I appreciate it. glad to have you.""" start="00:21:16.640" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Cheers, Yeah, this is really amazing to hold""" start="00:21:25.680" video="qanda-voice" id="subtitle"]] +[[!template text="""this conference with people from all around""" start="00:21:28.740" video="qanda-voice" id="subtitle"]] +[[!template text="""the world connected together through web""" start="00:21:34.660" video="qanda-voice" id="subtitle"]] +[[!template text="""browsers.""" start="00:21:34.940" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it's very neat what technology can do""" start="00:21:41.020" video="qanda-voice" id="subtitle"]] +[[!template text="""if and when it's working correctly.""" start="00:21:42.400" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: I know it can be a little frustrating at""" start="00:21:47.680" video="qanda-voice" id="subtitle"]] +[[!template text="""times, but when it's working,""" start="00:21:48.760" video="qanda-voice" id="subtitle"]] +[[!template text="""it's wonderful. Yep.""" start="00:21:54.740" video="qanda-voice" id="subtitle"]] + +[[!template new="1" text="""Start of section to review""" start="00:21:59.540" video="qanda-voice" id="subtitle"]] + +[[!template text="""[Speaker 2]: Good purpose of computers is all the""" start="00:21:59.540" video="qanda-voice" id="subtitle"]] +[[!template text="""computers run the same code,""" start="00:22:01.100" video="qanda-voice" id="subtitle"]] +[[!template text="""so that people, you know,""" start="00:22:03.460" video="qanda-voice" id="subtitle"]] +[[!template text="""a lot of people work on the same thing and""" start="00:22:05.740" video="qanda-voice" id="subtitle"]] +[[!template text="""build upon each other's works.""" start="00:22:08.360" video="qanda-voice" id="subtitle"]] +[[!template text="""For journaling I found 1 good compromise""" start="00:22:16.460" video="qanda-voice" id="subtitle"]] +[[!template text="""between editing and stream-of-thought""" start="00:22:18.204" video="qanda-voice" id="subtitle"]] +[[!template text="""journaling. 1 good compromise between editing""" start="00:22:19.548" video="qanda-voice" id="subtitle"]] +[[!template text="""and stream of thought journaling.""" start="00:22:20.680" video="qanda-voice" id="subtitle"]] +[[!template text="""1 good compromise between editing and being""" start="00:22:23.940" video="qanda-voice" id="subtitle"]] +[[!template text="""able to do it again and just kind of helps me""" start="00:22:26.980" video="qanda-voice" id="subtitle"]] +[[!template text="""do my thoughts even when I do it is when you""" start="00:22:31.160" video="qanda-voice" id="subtitle"]] +[[!template text="""do org mode and you have the bullets it kind""" start="00:22:33.180" video="qanda-voice" id="subtitle"]] +[[!template text="""of allows you to naturally chart your""" start="00:22:35.280" video="qanda-voice" id="subtitle"]] +[[!template text="""thoughts in a way that's really easy to edit""" start="00:22:38.800" video="qanda-voice" id="subtitle"]] +[[!template text="""reorder I saw you kind of did that with your""" start="00:22:41.880" video="qanda-voice" id="subtitle"]] +[[!template text="""mac la tech macro where you said item and it""" start="00:22:47.160" video="qanda-voice" id="subtitle"]] +[[!template text="""would put you down to the next item.""" start="00:22:48.680" video="qanda-voice" id="subtitle"]] +[[!template text="""Does... How much do you do stuff like that?""" start="00:22:56.500" video="qanda-voice" id="subtitle"]] +[[!template text="""How much do you do stuff like that where you""" start="00:23:00.720" video="qanda-voice" id="subtitle"]] +[[!template text="""use like org mode headings and then you""" start="00:23:04.700" video="qanda-voice" id="subtitle"]] +[[!template text="""reorder them because like I did that with""" start="00:23:07.000" video="qanda-voice" id="subtitle"]] +[[!template text="""also the K outline from HyperBolt package for""" start="00:23:10.080" video="qanda-voice" id="subtitle"]] +[[!template text="""the for Emacs org mode later on after the""" start="00:23:15.140" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: stream. Yes. So I could actually set this up""" start="00:23:21.880" video="qanda-voice" id="subtitle"]] +[[!template text="""so I have a lot of snippets for Org Mode.""" start="00:23:26.800" video="qanda-voice" id="subtitle"]] +[[!template text="""I could have Org Mode version of my insert""" start="00:23:30.720" video="qanda-voice" id="subtitle"]] +[[!template text="""start day snippet and carry things out in org""" start="00:23:34.600" video="qanda-voice" id="subtitle"]] +[[!template text="""mode. So I use org mode from time to time.""" start="00:23:39.920" video="qanda-voice" id="subtitle"]] +[[!template text="""I often use it for the purpose of writing""" start="00:23:43.480" video="qanda-voice" id="subtitle"]] +[[!template text="""readme files for projects to outline the""" start="00:23:47.780" video="qanda-voice" id="subtitle"]] +[[!template text="""purpose of the project,""" start="00:23:48.700" video="qanda-voice" id="subtitle"]] +[[!template text="""and say for a director that contains a coding""" start="00:23:54.900" video="qanda-voice" id="subtitle"]] +[[!template text="""project. And I think this would,""" start="00:24:01.620" video="qanda-voice" id="subtitle"]] +[[!template text="""so the main limitation of VoiceIn is it only""" start="00:24:07.300" video="qanda-voice" id="subtitle"]] +[[!template text="""works in a web page and you have to have an""" start="00:24:10.600" video="qanda-voice" id="subtitle"]] +[[!template text="""Internet connection, whereas Talon voice is""" start="00:24:14.180" video="qanda-voice" id="subtitle"]] +[[!template text="""perfect for something like org mode in that""" start="00:24:17.220" video="qanda-voice" id="subtitle"]] +[[!template text="""you don't need an internet connection and it""" start="00:24:20.200" video="qanda-voice" id="subtitle"]] +[[!template text="""will operate anywhere that you can place a""" start="00:24:22.940" video="qanda-voice" id="subtitle"]] +[[!template text="""cursor. I haven't found a place where it""" start="00:24:24.840" video="qanda-voice" id="subtitle"]] +[[!template text="""doesn't work. It's amazing.""" start="00:24:26.760" video="qanda-voice" id="subtitle"]] +[[!template text="""So as you saw my talk,""" start="00:24:28.860" video="qanda-voice" id="subtitle"]] +[[!template text="""perhaps You can run it in a terminal or a""" start="00:24:35.400" video="qanda-voice" id="subtitle"]] +[[!template text="""remote computer. You can run it in a virtual""" start="00:24:38.320" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh yeah, it's definitely.""" start="00:24:44.120" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: machine. If you can put your cursor there,""" start="00:24:45.760" video="qanda-voice" id="subtitle"]] +[[!template text="""it will work. And so as you might imagine,""" start="00:24:50.820" video="qanda-voice" id="subtitle"]] +[[!template text="""if you use bash aliases,""" start="00:24:52.720" video="qanda-voice" id="subtitle"]] +[[!template text="""I've worked for, 1 of the first things I did""" start="00:24:55.920" video="qanda-voice" id="subtitle"]] +[[!template text="""was map Talend commands to bash aliases so""" start="00:25:00.720" video="qanda-voice" id="subtitle"]] +[[!template text="""that I can do all kinds of crazy things""" start="00:25:02.800" video="qanda-voice" id="subtitle"]] +[[!template text="""inside of the terminal.""" start="00:25:04.200" video="qanda-voice" id="subtitle"]] +[[!template text="""And there are, you know,""" start="00:25:12.040" video="qanda-voice" id="subtitle"]] +[[!template text="""there's some support already for using Talon""" start="00:25:15.260" video="qanda-voice" id="subtitle"]] +[[!template text="""in Emacs. There's some Emacs functionality""" start="00:25:20.280" video="qanda-voice" id="subtitle"]] +[[!template text="""that's built into Talon.""" start="00:25:21.960" video="qanda-voice" id="subtitle"]] +[[!template text="""So when you are in Emacs,""" start="00:25:25.160" video="qanda-voice" id="subtitle"]] +[[!template text="""there's some features that are automatically""" start="00:25:27.100" video="qanda-voice" id="subtitle"]] +[[!template text="""available. And then others have developed or""" start="00:25:30.520" video="qanda-voice" id="subtitle"]] +[[!template text="""are developing packages,""" start="00:25:32.320" video="qanda-voice" id="subtitle"]] +[[!template text="""which I don't think are available yet in""" start="00:25:34.920" video="qanda-voice" id="subtitle"]] +[[!template text="""ELPA. There's 1 that does the font locking or""" start="00:25:40.240" video="qanda-voice" id="subtitle"]] +[[!template text="""syntax highlighting of Talon files,""" start="00:25:42.780" video="qanda-voice" id="subtitle"]] +[[!template text="""and another that adds some additional""" start="00:25:46.240" video="qanda-voice" id="subtitle"]] +[[!template text="""functionality that I'm regrettably not yet""" start="00:25:50.380" video="qanda-voice" id="subtitle"]] +[[!template text="""familiar with.""" start="00:25:51.440" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, as an example with like how the""" start="00:25:55.680" video="qanda-voice" id="subtitle"]] +[[!template text="""sharding of the thoughts,""" start="00:25:56.760" video="qanda-voice" id="subtitle"]] +[[!template text="""like let's say, oh, how has my day went?""" start="00:25:59.800" video="qanda-voice" id="subtitle"]] +[[!template text="""It's went good for reasons 123,""" start="00:26:01.980" video="qanda-voice" id="subtitle"]] +[[!template text="""and bad for reasons ABC.""" start="00:26:04.860" video="qanda-voice" id="subtitle"]] +[[!template text="""And then later on, I might think,""" start="00:26:07.828" video="qanda-voice" id="subtitle"]] +[[!template text="""oh, there's an, I also,""" start="00:26:08.460" video="qanda-voice" id="subtitle"]] +[[!template text="""my day went good for reasons 456,""" start="00:26:10.520" video="qanda-voice" id="subtitle"]] +[[!template text="""then you, I can, then you jump up.""" start="00:26:14.540" video="qanda-voice" id="subtitle"]] +[[!template text="""And so the, like I found like,""" start="00:26:18.520" video="qanda-voice" id="subtitle"]] +[[!template text="""yeah, the org mode subheadings,""" start="00:26:19.760" video="qanda-voice" id="subtitle"]] +[[!template text="""because you're able to jump around,""" start="00:26:21.980" video="qanda-voice" id="subtitle"]] +[[!template text="""easily reorder them after the fact,""" start="00:26:25.040" video="qanda-voice" id="subtitle"]] +[[!template text="""the very streamlined approach to the stream""" start="00:26:32.520" video="qanda-voice" id="subtitle"]] +[[!template text="""of thought and the editing.""" start="00:26:33.620" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's right, extremely powerful.""" start="00:26:38.800" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: And even with the stream of thought,""" start="00:26:41.200" video="qanda-voice" id="subtitle"]] +[[!template text="""just because like, even when you're editing""" start="00:26:44.060" video="qanda-voice" id="subtitle"]] +[[!template text="""that in real time, like,""" start="00:26:45.200" video="qanda-voice" id="subtitle"]] +[[!template text="""oh, wait a minute, I thought of another""" start="00:26:47.320" video="qanda-voice" id="subtitle"]] +[[!template text="""reason that my day went good,""" start="00:26:48.960" video="qanda-voice" id="subtitle"]] +[[!template text="""even though I was talking about how it was""" start="00:26:50.640" video="qanda-voice" id="subtitle"]] +[[!template text="""going bad now. So you jump up.""" start="00:26:52.760" video="qanda-voice" id="subtitle"]] +[[!template text="""And then you do that. And then you have it.""" start="00:26:55.680" video="qanda-voice" id="subtitle"]] +[[!template text="""You easily summarize your thoughts and""" start="00:26:59.540" video="qanda-voice" id="subtitle"]] +[[!template text="""whatnot.""" start="00:27:00.060" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's right. And I think org mode is really""" start="00:27:07.200" video="qanda-voice" id="subtitle"]] +[[!template text="""ideal for that kind of interact.""" start="00:27:11.680" video="qanda-voice" id="subtitle"]] +[[!template text="""So yeah, I see your point in terms of that""" start="00:27:15.240" video="qanda-voice" id="subtitle"]] +[[!template text="""sort of a blend of generative writing and""" start="00:27:18.760" video="qanda-voice" id="subtitle"]] +[[!template text="""editing. And it's also kind of parallel to""" start="00:27:23.440" video="qanda-voice" id="subtitle"]] +[[!template text="""mind mapping. I use this mind mapping""" start="00:27:27.240" video="qanda-voice" id="subtitle"]] +[[!template text="""software called iThoughtsX where I'll""" start="00:27:32.660" video="qanda-voice" id="subtitle"]] +[[!template text="""generate all these children items,""" start="00:27:36.760" video="qanda-voice" id="subtitle"]] +[[!template text="""and then I'll drag them around and resort""" start="00:27:40.040" video="qanda-voice" id="subtitle"]] +[[!template text="""them. And they can have children of their own""" start="00:27:46.680" video="qanda-voice" id="subtitle"]] +[[!template text="""and grandchildren and so on,""" start="00:27:48.940" video="qanda-voice" id="subtitle"]] +[[!template text="""in terms of the levels of the nodes.""" start="00:27:50.800" video="qanda-voice" id="subtitle"]] +[[!template text="""And it's pretty much the same sort of thing""" start="00:27:54.920" video="qanda-voice" id="subtitle"]] +[[!template text="""with a nested hierarchy that you can have""" start="00:27:57.560" video="qanda-voice" id="subtitle"]] +[[!template text="""with org mode. I think having several""" start="00:28:02.660" video="qanda-voice" id="subtitle"]] +[[!template text="""alternate modes or modalities of playing with""" start="00:28:09.900" video="qanda-voice" id="subtitle"]] +[[!template text="""thoughts is useful. So sometimes I'll hit a""" start="00:28:13.100" video="qanda-voice" id="subtitle"]] +[[!template text="""wall and we're just not really generating""" start="00:28:17.180" video="qanda-voice" id="subtitle"]] +[[!template text="""anything in a text mode.""" start="00:28:21.260" video="qanda-voice" id="subtitle"]] +[[!template text="""But if I switch to using the mind mapping,""" start="00:28:25.000" video="qanda-voice" id="subtitle"]] +[[!template text="""just seeing it arranged with the connecting""" start="00:28:30.040" video="qanda-voice" id="subtitle"]] +[[!template text="""lines plays on a different part of the brain,""" start="00:28:34.920" video="qanda-voice" id="subtitle"]] +[[!template text="""I think, and it can be incredibly""" start="00:28:37.640" video="qanda-voice" id="subtitle"]] +[[!template text="""stimulatory. It can stimulate a lot of new""" start="00:28:40.600" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: That's something that I haven't messed around""" start="00:28:43.480" video="qanda-voice" id="subtitle"]] +[[!template text="""too much with is the mind mapping software,""" start="00:28:45.400" video="qanda-voice" id="subtitle"]] +[[!template text="""but...""" start="00:28:45.980" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: thoughts. Because the closest thing that we""" start="00:28:51.600" video="qanda-voice" id="subtitle"]] +[[!template text="""have to it in Emacs is Orgrimm in the in""" start="00:28:56.400" video="qanda-voice" id="subtitle"]] +[[!template text="""terms of like the 3D visualization of with""" start="00:29:00.860" video="qanda-voice" id="subtitle"]] +[[!template text="""Orgrimm GUI or""" start="00:29:03.720" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: UI. As well as being able to generate SVG""" start="00:29:10.120" video="qanda-voice" id="subtitle"]] +[[!template text="""diagrams and stuff like that,""" start="00:29:12.800" video="qanda-voice" id="subtitle"]] +[[!template text="""I think those 2 things would allow you stuff""" start="00:29:16.980" video="qanda-voice" id="subtitle"]] +[[!template text="""like Orgrimm or denote And then the diagrams""" start="00:29:20.240" video="qanda-voice" id="subtitle"]] +[[!template text="""would be the good ways of doing that in""" start="00:29:23.160" video="qanda-voice" id="subtitle"]] +[[!template text="""Emacs, but they don't have the mind map""" start="00:29:25.200" video="qanda-voice" id="subtitle"]] +[[!template text="""programs as well.""" start="00:29:27.160" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: They're not as well developed.""" start="00:29:30.140" video="qanda-voice" id="subtitle"]] +[[!template text="""There are a couple mind mapping packages,""" start="00:29:32.740" video="qanda-voice" id="subtitle"]] +[[!template text="""but they're not as advanced.""" start="00:29:37.200" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: The best ones were JavaScript web page that""" start="00:29:41.920" video="qanda-voice" id="subtitle"]] +[[!template text="""it that Emacs interacted with.""" start="00:29:43.840" video="qanda-voice" id="subtitle"]] +[[!template text="""Very well. And so they kind of,""" start="00:29:46.180" video="qanda-voice" id="subtitle"]] +[[!template text="""you know, worked around and had a little.""" start="00:29:49.120" video="qanda-voice" id="subtitle"]] +[[!template text="""Integration with the 2.""" start="00:29:51.620" video="qanda-voice" id="subtitle"]] +[[!template text="""So when you be jumping around your.""" start="00:29:53.420" video="qanda-voice" id="subtitle"]] +[[!template text="""When you'd be clicking on the web page it""" start="00:29:56.200" video="qanda-voice" id="subtitle"]] +[[!template text="""would be pointing you to different places and""" start="00:29:59.300" video="qanda-voice" id="subtitle"]] +[[!template text="""buffers okay like those are those the There's""" start="00:30:07.060" video="qanda-voice" id="subtitle"]] +[[!template text="""an like org-roam node program where it kind""" start="00:30:11.480" video="qanda-voice" id="subtitle"]] +[[!template text="""of shows the looks like a mind map.""" start="00:30:13.360" video="qanda-voice" id="subtitle"]] +[[!template text="""You can click and drag them a little bit,""" start="00:30:17.820" video="qanda-voice" id="subtitle"]] +[[!template text="""so it's a little interactive.""" start="00:30:18.680" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I'm not familiar with that.""" start="00:30:27.980" video="qanda-voice" id="subtitle"]] +[[!template text="""I'll have to look into that.""" start="00:30:30.160" video="qanda-voice" id="subtitle"]] +[[!template text="""That sounds very interesting.""" start="00:30:32.240" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I found that I didn't know better,""" start="00:30:36.820" video="qanda-voice" id="subtitle"]] +[[!template text="""though, than Org-ROM, so it doesn't.""" start="00:30:38.560" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Why is that?""" start="00:30:43.320" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, 1 of the things I'm,""" start="00:30:47.080" video="qanda-voice" id="subtitle"]] +[[!template text="""I want to be able to, I don't like the""" start="00:30:51.600" video="qanda-voice" id="subtitle"]] +[[!template text="""feeling of being trapped inside org-mode""" start="00:30:53.200" video="qanda-voice" id="subtitle"]] +[[!template text="""documents. Like I want to be able to write,""" start="00:30:56.040" video="qanda-voice" id="subtitle"]] +[[!template text="""even though I don't really use Markdown and I""" start="00:30:58.940" video="qanda-voice" id="subtitle"]] +[[!template text="""like org-mode better than that.""" start="00:31:00.800" video="qanda-voice" id="subtitle"]] +[[!template text="""Like for instance, I also use the Koutline""" start="00:31:02.720" video="qanda-voice" id="subtitle"]] +[[!template text="""from the Hyperbole package.""" start="00:31:04.280" video="qanda-voice" id="subtitle"]] +[[!template text="""That's what my I got a talk on the stream of""" start="00:31:08.160" video="qanda-voice" id="subtitle"]] +[[!template text="""thought journaling for with Koutline and I""" start="00:31:12.620" video="qanda-voice" id="subtitle"]] +[[!template text="""was like, I just don't like the feeling of""" start="00:31:14.060" video="qanda-voice" id="subtitle"]] +[[!template text="""being tracked in 1 document and denote has""" start="00:31:18.480" video="qanda-voice" id="subtitle"]] +[[!template text="""the ability to it renames the file so you get""" start="00:31:21.300" video="qanda-voice" id="subtitle"]] +[[!template text="""keywords in like a PDF file so you can take""" start="00:31:26.020" video="qanda-voice" id="subtitle"]] +[[!template text="""so you can link to that with your notes""" start="00:31:28.100" video="qanda-voice" id="subtitle"]] +[[!template text="""without it all disappearing because it's not""" start="00:31:30.540" video="qanda-voice" id="subtitle"]] +[[!template text="""an org mode document. Plus the ability of""" start="00:31:36.340" video="qanda-voice" id="subtitle"]] +[[!template text="""having it run on multiple computers or with""" start="00:31:38.520" video="qanda-voice" id="subtitle"]] +[[!template text="""multiple people, the database kind of gets""" start="00:31:42.660" video="qanda-voice" id="subtitle"]] +[[!template text="""screwed up when you try running it under sync""" start="00:31:46.480" video="qanda-voice" id="subtitle"]] +[[!template text="""thing. Sync. More fragile.""" start="00:31:50.500" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Very interesting. Yeah.""" start="00:31:56.000" video="qanda-voice" id="subtitle"]] +[[!template text="""How far are you? So are you a regular""" start="00:32:03.260" video="qanda-voice" id="subtitle"]] +[[!template text="""practitioner of the Zettelkasten approach?""" start="00:32:06.480" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Trying to be. Incrementally improving it.""" start="00:32:12.180" video="qanda-voice" id="subtitle"]] +[[!template text="""I partly work too much like testing out the""" start="00:32:16.780" video="qanda-voice" id="subtitle"]] +[[!template text="""org-roam versus the notes to use it too much.""" start="00:32:20.760" video="qanda-voice" id="subtitle"]] +[[!template text="""So part of it is I just tweak with it too""" start="00:32:23.300" video="qanda-voice" id="subtitle"]] +[[!template text="""much before using it and then.""" start="00:32:24.800" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, it's so fun to tweak it.""" start="00:32:28.740" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I think mostly it's as I have these tools,""" start="00:32:32.580" video="qanda-voice" id="subtitle"]] +[[!template text="""I know where they are.""" start="00:32:33.640" video="qanda-voice" id="subtitle"]] +[[!template text="""So whenever I do need them,""" start="00:32:35.760" video="qanda-voice" id="subtitle"]] +[[!template text="""I can use them, even though I don't always""" start="00:32:37.680" video="qanda-voice" id="subtitle"]] +[[!template text="""use them.""" start="00:32:38.440" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So I have about a thousand notes in my org""" start="00:32:43.680" video="qanda-voice" id="subtitle"]] +[[!template text="""room. Zettelkasten. I've actually,""" start="00:32:47.720" video="qanda-voice" id="subtitle"]] +[[!template text="""it's kind of cool that you can export it and""" start="00:32:50.140" video="qanda-voice" id="subtitle"]] +[[!template text="""move it into other programs.""" start="00:32:51.460" video="qanda-voice" id="subtitle"]] +[[!template text="""I have moved it to Obsidian and played with""" start="00:32:56.320" video="qanda-voice" id="subtitle"]] +[[!template text="""it in Obsidian for a while,""" start="00:32:57.720" video="qanda-voice" id="subtitle"]] +[[!template text="""maybe added to it in Obsidian,""" start="00:32:59.820" video="qanda-voice" id="subtitle"]] +[[!template text="""moved it back to Orgrim.""" start="00:33:01.480" video="qanda-voice" id="subtitle"]] +[[!template text="""But I'm not convinced.""" start="00:33:07.080" video="qanda-voice" id="subtitle"]] +[[!template text="""I mean, that I think that Nicholas Luhmann""" start="00:33:10.680" video="qanda-voice" id="subtitle"]] +[[!template text="""was very successful with it because he spent""" start="00:33:13.360" video="qanda-voice" id="subtitle"]] +[[!template text="""5 hours a day or whatever working with it.""" start="00:33:15.920" video="qanda-voice" id="subtitle"]] +[[!template text="""And I think I would have to do,""" start="00:33:18.560" video="qanda-voice" id="subtitle"]] +[[!template text="""put in a similar amount of effort to get this""" start="00:33:21.180" video="qanda-voice" id="subtitle"]] +[[!template text="""kind of benefits that he gained from it.""" start="00:33:23.600" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm waiting for somebody to do a scientific""" start="00:33:26.480" video="qanda-voice" id="subtitle"]] +[[!template text="""study, controlled trials to see,""" start="00:33:29.200" video="qanda-voice" id="subtitle"]] +[[!template text="""to prove whether there's a real benefit.""" start="00:33:31.720" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh, yeah. So with the Zettelkasten,""" start="00:33:37.900" video="qanda-voice" id="subtitle"]] +[[!template text="""one of the things where you have the 1 for the""" start="00:33:41.120" video="qanda-voice" id="subtitle"]] +[[!template text="""sections, and then the 1.1,""" start="00:33:42.180" video="qanda-voice" id="subtitle"]] +[[!template text="""or you know how the notes that it does that's""" start="00:33:47.160" video="qanda-voice" id="subtitle"]] +[[!template text="""different. The denote,""" start="00:33:48.740" video="qanda-voice" id="subtitle"]] +[[!template text="""it has the ability to use a hierarchy manage,""" start="00:33:52.880" video="qanda-voice" id="subtitle"]] +[[!template text="""which Org-ROM does everything it can to""" start="00:33:55.480" video="qanda-voice" id="subtitle"]] +[[!template text="""eliminate. But you can use them both in""" start="00:33:57.380" video="qanda-voice" id="subtitle"]] +[[!template text="""tandem. They call it signatures.""" start="00:33:59.140" video="qanda-voice" id="subtitle"]] +[[!template text="""And to me, 1 of the cool features of denote""" start="00:34:04.820" video="qanda-voice" id="subtitle"]] +[[!template text="""would be being able to use like the""" start="00:34:06.820" video="qanda-voice" id="subtitle"]] +[[!template text="""signatures for the things that make sense.""" start="00:34:09.780" video="qanda-voice" id="subtitle"]] +[[!template text="""Like 1 of the ideas is if you don't exactly""" start="00:34:13.440" video="qanda-voice" id="subtitle"]] +[[!template text="""know where this is, but you know,""" start="00:34:14.960" video="qanda-voice" id="subtitle"]] +[[!template text="""it goes to the section,""" start="00:34:15.920" video="qanda-voice" id="subtitle"]] +[[!template text="""you can just use the signature.""" start="00:34:17.060" video="qanda-voice" id="subtitle"]] +[[!template text="""Maybe don't even have too much of a file""" start="00:34:19.760" video="qanda-voice" id="subtitle"]] +[[!template text="""name. Like oh, this is just another thought""" start="00:34:22.679" video="qanda-voice" id="subtitle"]] +[[!template text="""on, well you wouldn't use it for this,""" start="00:34:28.199" video="qanda-voice" id="subtitle"]] +[[!template text="""but like my day went good for reasons 1,""" start="00:34:30.360" video="qanda-voice" id="subtitle"]] +[[!template text="""2, 3, 4, 5, and you could just use the denote""" start="00:34:33.040" video="qanda-voice" id="subtitle"]] +[[!template text="""signature to do 1, 2, 3,""" start="00:34:34.639" video="qanda-voice" id="subtitle"]] +[[!template text="""4, 5, just as you have new ideas on like a""" start="00:34:37.659" video="qanda-voice" id="subtitle"]] +[[!template text="""subject, or like cars are cars are not this""" start="00:34:41.840" video="qanda-voice" id="subtitle"]] +[[!template text="""car is nice because of reasons XYZ,""" start="00:34:43.659" video="qanda-voice" id="subtitle"]] +[[!template text="""or these types of four-wheelers are nice""" start="00:34:46.920" video="qanda-voice" id="subtitle"]] +[[!template text="""because of XYZ. And you could just keep on""" start="00:34:48.940" video="qanda-voice" id="subtitle"]] +[[!template text="""doing that rather than having to get a new""" start="00:34:50.760" video="qanda-voice" id="subtitle"]] +[[!template text="""name for each 1 of those files.""" start="00:34:52.120" video="qanda-voice" id="subtitle"]] +[[!template text="""Or you could choose not to have it,""" start="00:34:55.280" video="qanda-voice" id="subtitle"]] +[[!template text="""but the ability to have it optionally in,""" start="00:34:57.780" video="qanda-voice" id="subtitle"]] +[[!template text="""to me, sounds like a really nice combo.""" start="00:35:01.020" video="qanda-voice" id="subtitle"]] +[[!template text="""Because then you""" start="00:35:03.000" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: could read. I agree. Yeah,""" start="00:35:06.140" video="qanda-voice" id="subtitle"]] +[[!template text="""I've actually imposed a hierarchy in my""" start="00:35:08.800" video="qanda-voice" id="subtitle"]] +[[!template text="""Zettelkasten and Orgrim.""" start="00:35:10.320" video="qanda-voice" id="subtitle"]] +[[!template text="""I just, I can't imagine having random ideas.""" start="00:35:17.680" video="qanda-voice" id="subtitle"]] +[[!template text="""They need some kind of structure.""" start="00:35:21.200" video="qanda-voice" id="subtitle"]] +[[!template text="""Always have some kind of parent node to""" start="00:35:27.500" video="qanda-voice" id="subtitle"]] +[[!template text="""attach them to.""" start="00:35:28.420" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: With the workflow I'm trying to develop with""" start="00:35:32.740" video="qanda-voice" id="subtitle"]] +[[!template text="""it, part of it is I'm just trying to optimize""" start="00:35:34.440" video="qanda-voice" id="subtitle"]] +[[!template text="""the workflow before it feels really,""" start="00:35:36.820" video="qanda-voice" id="subtitle"]] +[[!template text="""really, really good, and I don't want to""" start="00:35:38.480" video="qanda-voice" id="subtitle"]] +[[!template text="""tweak with it, or I don't know.""" start="00:35:39.720" video="qanda-voice" id="subtitle"]] +[[!template text="""Or maybe I don't always need the tool,""" start="00:35:42.480" video="qanda-voice" id="subtitle"]] +[[!template text="""but some of the distinctions it seems like""" start="00:35:45.780" video="qanda-voice" id="subtitle"]] +[[!template text="""that I want is, I want a daily journal For""" start="00:35:52.400" video="qanda-voice" id="subtitle"]] +[[!template text="""your stream of thoughts,""" start="00:35:53.100" video="qanda-voice" id="subtitle"]] +[[!template text="""then I want a separate 1 for your to do list""" start="00:35:56.000" video="qanda-voice" id="subtitle"]] +[[!template text="""because what you like.""" start="00:35:57.980" video="qanda-voice" id="subtitle"]] +[[!template text="""You want very different properties for each""" start="00:36:01.240" video="qanda-voice" id="subtitle"]] +[[!template text="""of those. Like for to-do lists,""" start="00:36:03.040" video="qanda-voice" id="subtitle"]] +[[!template text="""you want hierarchical,""" start="00:36:04.820" video="qanda-voice" id="subtitle"]] +[[!template text="""limited. But if you have more than 3 priority""" start="00:36:11.260" video="qanda-voice" id="subtitle"]] +[[!template text="""items, you don't have a priority item and""" start="00:36:13.660" video="qanda-voice" id="subtitle"]] +[[!template text="""it's not a good to-do list.""" start="00:36:14.820" video="qanda-voice" id="subtitle"]] +[[!template text="""It's just unordered thoughts.""" start="00:36:18.480" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: it's a wishful list, because you won't get""" start="00:36:23.480" video="qanda-voice" id="subtitle"]] +[[!template text="""most of those things done beyond the first 3.""" start="00:36:26.000" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: You're trying to- So And then when you're""" start="00:36:28.180" video="qanda-voice" id="subtitle"]] +[[!template text="""trying to do the other stuff,""" start="00:36:30.600" video="qanda-voice" id="subtitle"]] +[[!template text="""the stream of thoughts,""" start="00:36:31.980" video="qanda-voice" id="subtitle"]] +[[!template text="""all that stuff I probably don't want to go""" start="00:36:34.640" video="qanda-voice" id="subtitle"]] +[[!template text="""straight into like my Zettelkasten because""" start="00:36:36.720" video="qanda-voice" id="subtitle"]] +[[!template text="""some of those problems,""" start="00:36:37.440" video="qanda-voice" id="subtitle"]] +[[!template text="""like it's noisy, it might be redundant,""" start="00:36:42.660" video="qanda-voice" id="subtitle"]] +[[!template text="""you don't know how it fits into it because""" start="00:36:45.300" video="qanda-voice" id="subtitle"]] +[[!template text="""you haven't done that processing on it.""" start="00:36:46.920" video="qanda-voice" id="subtitle"]] +[[!template text="""This hasn't been refined.""" start="00:36:47.960" video="qanda-voice" id="subtitle"]] +[[!template text="""So, like, you don't want to refine it.""" start="00:36:53.000" video="qanda-voice" id="subtitle"]] +[[!template text="""Like, I find that spell checking is""" start="00:36:54.960" video="qanda-voice" id="subtitle"]] +[[!template text="""detrimental to me. I don't want spell""" start="00:36:56.680" video="qanda-voice" id="subtitle"]] +[[!template text="""checking. I don't want spell checking.""" start="00:36:58.520" video="qanda-voice" id="subtitle"]] +[[!template text="""I don't want syntax highlighting.""" start="00:37:00.200" video="qanda-voice" id="subtitle"]] +[[!template text="""I just want to talk or to just write.""" start="00:37:04.040" video="qanda-voice" id="subtitle"]] +[[!template text="""If I have mistakes, I can turn on that later,""" start="00:37:07.020" video="qanda-voice" id="subtitle"]] +[[!template text="""do it. Because otherwise,""" start="00:37:08.800" video="qanda-voice" id="subtitle"]] +[[!template text="""it will distract me and makes that process""" start="00:37:13.340" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yep, yep, definitely interferes with the""" start="00:37:20.140" video="qanda-voice" id="subtitle"]] +[[!template text="""flow.""" start="00:37:20.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: worse. So yeah, when you're so yeah when""" start="00:37:24.840" video="qanda-voice" id="subtitle"]] +[[!template text="""you're doing the getting things done like""" start="00:37:28.080" video="qanda-voice" id="subtitle"]] +[[!template text="""that's why I want them would be want would""" start="00:37:30.040" video="qanda-voice" id="subtitle"]] +[[!template text="""want them in separate files is that you want""" start="00:37:32.360" video="qanda-voice" id="subtitle"]] +[[!template text="""them like ordered, numbered lists,""" start="00:37:34.160" video="qanda-voice" id="subtitle"]] +[[!template text="""smaller. And then with the other,""" start="00:37:38.980" video="qanda-voice" id="subtitle"]] +[[!template text="""with the stream of thought,""" start="00:37:40.440" video="qanda-voice" id="subtitle"]] +[[!template text="""with journaling, you'd want it just""" start="00:37:42.340" video="qanda-voice" id="subtitle"]] +[[!template text="""unordered. Thoughts land wherever they may.""" start="00:37:45.240" video="qanda-voice" id="subtitle"]] +[[!template text="""Maybe not even like machine-generated""" start="00:37:49.140" video="qanda-voice" id="subtitle"]] +[[!template text="""timestamps, So you don't even have to worry""" start="00:37:51.400" video="qanda-voice" id="subtitle"]] +[[!template text="""about the names of it,""" start="00:37:52.440" video="qanda-voice" id="subtitle"]] +[[!template text="""as an example. So yeah,""" start="00:37:55.080" video="qanda-voice" id="subtitle"]] +[[!template text="""very different properties for what you want""" start="00:37:56.960" video="qanda-voice" id="subtitle"]] +[[!template text="""for both of those modalities.""" start="00:37:58.260" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So you saw, perhaps, in that snippet that I""" start="00:38:06.340" video="qanda-voice" id="subtitle"]] +[[!template text="""had that at, you know,""" start="00:38:07.860" video="qanda-voice" id="subtitle"]] +[[!template text="""working on my to-do list at the start of the""" start="00:38:10.440" video="qanda-voice" id="subtitle"]] +[[!template text="""day, but in a certain sense that is not ideal""" start="00:38:13.080" video="qanda-voice" id="subtitle"]] +[[!template text="""time. I really haven't optimized the timing""" start="00:38:20.320" video="qanda-voice" id="subtitle"]] +[[!template text="""of assembly of the to-do list,""" start="00:38:22.640" video="qanda-voice" id="subtitle"]] +[[!template text="""I think, in retrospect.""" start="00:38:24.020" video="qanda-voice" id="subtitle"]] +[[!template text="""It's just by lifelong habit.""" start="00:38:27.540" video="qanda-voice" id="subtitle"]] +[[!template text="""I do that at the beginning of the day,""" start="00:38:29.060" video="qanda-voice" id="subtitle"]] +[[!template text="""but probably would be better to do it at""" start="00:38:32.860" video="qanda-voice" id="subtitle"]] +[[!template text="""night or the night before.""" start="00:38:34.360" video="qanda-voice" id="subtitle"]] +[[!template text="""And so you sort of prime your brain to go,""" start="00:38:38.000" video="qanda-voice" id="subtitle"]] +[[!template text="""just get up and go, go after those items.""" start="00:38:41.180" video="qanda-voice" id="subtitle"]] +[[!template text="""You were, you maybe you want to revise the""" start="00:38:46.360" video="qanda-voice" id="subtitle"]] +[[!template text="""items a little bit after sleeping on it,""" start="00:38:49.120" video="qanda-voice" id="subtitle"]] +[[!template text="""but after your subconscious has worked on""" start="00:38:52.360" video="qanda-voice" id="subtitle"]] +[[!template text="""those items. Do you have a daily routine that""" start="00:38:57.500" video="qanda-voice" id="subtitle"]] +[[!template text="""you follow in terms of generating those kind""" start="00:38:59.680" video="qanda-voice" id="subtitle"]] +[[!template text="""of lists?""" start="00:39:00.020" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: No. As I said, mostly I just got scaffolding""" start="00:39:05.660" video="qanda-voice" id="subtitle"]] +[[!template text="""for this stuff when I want to do it.""" start="00:39:08.040" video="qanda-voice" id="subtitle"]] +[[!template text="""I enjoy building the scaffolding and I know""" start="00:39:10.520" video="qanda-voice" id="subtitle"]] +[[!template text="""where the tools are when I need it.""" start="00:39:12.340" video="qanda-voice" id="subtitle"]] +[[!template text="""And I start using them when I need it,""" start="00:39:14.540" video="qanda-voice" id="subtitle"]] +[[!template text="""but I don't have it too consistent.""" start="00:39:17.040" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So OK, so you've looked so far at denote and""" start="00:39:29.720" video="qanda-voice" id="subtitle"]] +[[!template text="""org-roam, and you're using k-outline.""" start="00:39:35.300" video="qanda-voice" id="subtitle"]] +[[!template text="""And are there other tools that you've""" start="00:39:39.520" video="qanda-voice" id="subtitle"]] +[[!template text="""explored?""" start="00:39:39.840" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I've tried using whisper.el""" start="00:39:44.380" video="qanda-voice" id="subtitle"]] +[[!template text="""and nerd dictation to do What your talk was""" start="00:39:50.720" video="qanda-voice" id="subtitle"]] +[[!template text="""about? Speaking speech to text to see how""" start="00:39:53.560" video="qanda-voice" id="subtitle"]] +[[!template text="""that changes Because it does change what you""" start="00:39:56.720" video="qanda-voice" id="subtitle"]] +[[!template text="""think What you write down when you speak it""" start="00:40:01.020" video="qanda-voice" id="subtitle"]] +[[!template text="""rather than write it. Same thing as when""" start="00:40:05.080" video="qanda-voice" id="subtitle"]] +[[!template text="""you're thinking about when you eliminate the""" start="00:40:07.420" video="qanda-voice" id="subtitle"]] +[[!template text="""editing, it changes the way you write.""" start="00:40:08.940" video="qanda-voice" id="subtitle"]] +[[!template text="""When you have the spell checking,""" start="00:40:11.900" video="qanda-voice" id="subtitle"]] +[[!template text="""it changes the way you write to a much""" start="00:40:14.100" video="qanda-voice" id="subtitle"]] +[[!template text="""smaller degree. But that's the stuff I really""" start="00:40:20.280" video="qanda-voice" id="subtitle"]] +[[!template text="""haven't gotten working as well,""" start="00:40:23.560" video="qanda-voice" id="subtitle"]] +[[!template text="""or underdeveloped.""" start="00:40:25.120" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: So the dictated text winds up,""" start="00:40:30.160" video="qanda-voice" id="subtitle"]] +[[!template text="""I'll move it in. Often I move it into on""" start="00:40:37.740" video="qanda-voice" id="subtitle"]] +[[!template text="""Overleaf, this website for a lot of tech""" start="00:40:40.920" video="qanda-voice" id="subtitle"]] +[[!template text="""documents. I have a plug-in for Rightful,""" start="00:40:44.080" video="qanda-voice" id="subtitle"]] +[[!template text="""And I use that to clean up my word choices""" start="00:40:50.520" video="qanda-voice" id="subtitle"]] +[[!template text="""and some grammar. And I use Grammarly.""" start="00:40:56.160" video="qanda-voice" id="subtitle"]] +[[!template text="""I'll copy and paste. It just depends on the""" start="00:41:00.920" video="qanda-voice" id="subtitle"]] +[[!template text="""nature of the writing,""" start="00:41:01.680" video="qanda-voice" id="subtitle"]] +[[!template text="""how serious it is, how polished it has to be.""" start="00:41:05.720" video="qanda-voice" id="subtitle"]] +[[!template text="""If I, if it's really vital,""" start="00:41:12.620" video="qanda-voice" id="subtitle"]] +[[!template text="""like for a grant application or something,""" start="00:41:14.440" video="qanda-voice" id="subtitle"]] +[[!template text="""I'll paste that into Grammarly and work on""" start="00:41:16.880" video="qanda-voice" id="subtitle"]] +[[!template text="""trying to get the writing level to the lowest""" start="00:41:22.160" video="qanda-voice" id="subtitle"]] +[[!template text="""possible grade level to make it as clear as""" start="00:41:26.100" video="qanda-voice" id="subtitle"]] +[[!template text="""possible to as wide of an audience as""" start="00:41:30.040" video="qanda-voice" id="subtitle"]] +[[!template text="""possible. 1 of the things I kind""" start="00:41:34.740" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: of wish with all the spell checking grammarly""" start="00:41:38.000" video="qanda-voice" id="subtitle"]] +[[!template text="""is I kind of wish you could say,""" start="00:41:40.440" video="qanda-voice" id="subtitle"]] +[[!template text="""hey, what would the subtle cast in person""" start="00:41:48.620" video="qanda-voice" id="subtitle"]] +[[!template text="""think of what I wrote who what would einstein""" start="00:41:52.120" video="qanda-voice" id="subtitle"]] +[[!template text="""think of what I wrote because rather than""" start="00:41:54.200" video="qanda-voice" id="subtitle"]] +[[!template text="""just trying to make 1 uniform way of talking""" start="00:41:57.340" video="qanda-voice" id="subtitle"]] +[[!template text="""it's like people talk differently and that's""" start="00:41:59.960" video="qanda-voice" id="subtitle"]] +[[!template text="""an advantage and I can't I really wish like""" start="00:42:04.080" video="qanda-voice" id="subtitle"]] +[[!template text="""you maybe these GPT programs could do well.""" start="00:42:07.440" video="qanda-voice" id="subtitle"]] +[[!template text="""I really wish it could help you with the""" start="00:42:10.840" video="qanda-voice" id="subtitle"]] +[[!template text="""grammar, that maybe give you thoughts on what""" start="00:42:16.160" video="qanda-voice" id="subtitle"]] +[[!template text="""your notes are. What does this person think""" start="00:42:18.460" video="qanda-voice" id="subtitle"]] +[[!template text="""of your thoughts? What does this person think""" start="00:42:20.220" video="qanda-voice" id="subtitle"]] +[[!template text="""of your thoughts? Well,""" start="00:42:20.457" video="qanda-voice" id="subtitle"]] +[[!template text="""does this person think of your thoughts?""" start="00:42:20.640" video="qanda-voice" id="subtitle"]] +[[!template text="""Well, does this person think of your""" start="00:42:22.280" video="qanda-voice" id="subtitle"]] +[[!template text="""thoughts?""" start="00:42:22.540" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's true. Yeah, I could probably do that""" start="00:42:27.720" video="qanda-voice" id="subtitle"]] +[[!template text="""even through chat GDP now.""" start="00:42:31.560" video="qanda-voice" id="subtitle"]] +[[!template text="""I haven't spent time trying that out.""" start="00:42:35.140" video="qanda-voice" id="subtitle"]] +[[!template text="""But I bet that capabilities are already.""" start="00:42:39.820" video="qanda-voice" id="subtitle"]] +[[!template text="""It would be nice if it was like built in to""" start="00:42:44.340" video="qanda-voice" id="subtitle"]] +[[!template text="""Emacs, right? It's a package.""" start="00:42:46.240" video="qanda-voice" id="subtitle"]] +[[!template text="""Yeah. That'd be very cool.""" start="00:42:49.020" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Grammarly have some sort of,""" start="00:42:52.260" video="qanda-voice" id="subtitle"]] +[[!template text="""like, the grammar where they help you the way""" start="00:42:55.040" video="qanda-voice" id="subtitle"]] +[[!template text="""you write. Like, for instance,""" start="00:42:57.660" video="qanda-voice" id="subtitle"]] +[[!template text="""removing redundant words.""" start="00:42:59.080" video="qanda-voice" id="subtitle"]] +[[!template text="""And Yeah, it's supposed to be like beyond""" start="00:43:02.720" video="qanda-voice" id="subtitle"]] +[[!template text="""just spell checking, right?""" start="00:43:04.820" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. So, and there's actually a Grammarly""" start="00:43:08.240" video="qanda-voice" id="subtitle"]] +[[!template text="""package for Emacs, and you get some of the""" start="00:43:13.300" video="qanda-voice" id="subtitle"]] +[[!template text="""functionality out of it.""" start="00:43:14.540" video="qanda-voice" id="subtitle"]] +[[!template text="""I've paid for the subscription to get the""" start="00:43:17.420" video="qanda-voice" id="subtitle"]] +[[!template text="""advanced features, but I've maybe I don't""" start="00:43:21.240" video="qanda-voice" id="subtitle"]] +[[!template text="""have my configuration set up correctly.""" start="00:43:23.300" video="qanda-voice" id="subtitle"]] +[[!template text="""I just found it was easier to copy and paste""" start="00:43:27.280" video="qanda-voice" id="subtitle"]] +[[!template text="""a paragraph at a time into the desktop""" start="00:43:31.780" video="qanda-voice" id="subtitle"]] +[[!template text="""application and it will go through and find""" start="00:43:36.460" video="qanda-voice" id="subtitle"]] +[[!template text="""those redundancies, junk English.""" start="00:43:38.900" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: It would be really interesting trying to have""" start="00:43:48.080" video="qanda-voice" id="subtitle"]] +[[!template text="""1 of these That was my problem with a lot of""" start="00:43:52.640" video="qanda-voice" id="subtitle"]] +[[!template text="""the grammarly type Programs is I'm I want""" start="00:43:55.840" video="qanda-voice" id="subtitle"]] +[[!template text="""something that would do that like be real""" start="00:43:57.620" video="qanda-voice" id="subtitle"]] +[[!template text="""interesting seeing 1 that's like an old""" start="00:43:59.720" video="qanda-voice" id="subtitle"]] +[[!template text="""English type thing or like Lumen person where""" start="00:44:03.840" video="qanda-voice" id="subtitle"]] +[[!template text="""it's just like how does this person write and""" start="00:44:06.540" video="qanda-voice" id="subtitle"]] +[[!template text="""Because it would be it would spit out""" start="00:44:09.960" video="qanda-voice" id="subtitle"]] +[[!template text="""something a lot different.""" start="00:44:11.160" video="qanda-voice" id="subtitle"]] +[[!template text="""Just different. Like, yeah,""" start="00:44:13.440" video="qanda-voice" id="subtitle"]] +[[!template text="""you put different people.""" start="00:44:14.440" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Most definitely, yes. They would have a""" start="00:44:17.760" video="qanda-voice" id="subtitle"]] +[[!template text="""completely different thinking and writing""" start="00:44:20.280" video="qanda-voice" id="subtitle"]] +[[!template text="""style. And so the purpose of doing that would""" start="00:44:28.740" video="qanda-voice" id="subtitle"]] +[[!template text="""be to stimulate A new way of thinking or""" start="00:44:34.300" video="qanda-voice" id="subtitle"]] +[[!template text="""writing I guess on your part""" start="00:44:36.340" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: the purpose of writing is to communicate It""" start="00:44:40.600" video="qanda-voice" id="subtitle"]] +[[!template text="""and writing you know 1 of the targets for""" start="00:44:43.540" video="qanda-voice" id="subtitle"]] +[[!template text="""that could be yourself so it's like I'd much""" start="00:44:47.020" video="qanda-voice" id="subtitle"]] +[[!template text="""rather have a comprehensible sentence than a""" start="00:44:50.380" video="qanda-voice" id="subtitle"]] +[[!template text="""truly correct 1. 1 of those is far more""" start="00:44:57.500" video="qanda-voice" id="subtitle"]] +[[!template text="""valuable and far more correct English or""" start="00:45:00.780" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, one's more effective at communicating""" start="00:45:06.560" video="qanda-voice" id="subtitle"]] +[[!template text="""to yourself. Yes.""" start="00:45:08.860" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: language. Well, one's using the tool,""" start="00:45:11.320" video="qanda-voice" id="subtitle"]] +[[!template text="""one's the other you're trying to be used by""" start="00:45:15.300" video="qanda-voice" id="subtitle"]] +[[!template text="""the tool. And they're not the same thing.""" start="00:45:19.080" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's true. Well, I view myself as being""" start="00:45:29.780" video="qanda-voice" id="subtitle"]] +[[!template text="""responsible for my writing and being the""" start="00:45:35.140" video="qanda-voice" id="subtitle"]] +[[!template text="""final judge of it and as a scientist I have""" start="00:45:40.200" video="qanda-voice" id="subtitle"]] +[[!template text="""to my mantra is it's got to be clear and then""" start="00:45:49.060" video="qanda-voice" id="subtitle"]] +[[!template text="""precise and then concise in that order.""" start="00:45:52.600" video="qanda-voice" id="subtitle"]] +[[!template text="""And I claim that, you know,""" start="00:45:56.580" video="qanda-voice" id="subtitle"]] +[[!template text="""that's the order with which I go through""" start="00:45:58.440" video="qanda-voice" id="subtitle"]] +[[!template text="""doing revisions. Clarity is,""" start="00:46:01.500" video="qanda-voice" id="subtitle"]] +[[!template text="""you know, if it's not clear,""" start="00:46:02.500" video="qanda-voice" id="subtitle"]] +[[!template text="""it's useless. It's got to be clear to me,""" start="00:46:05.420" video="qanda-voice" id="subtitle"]] +[[!template text="""but it's got to be clear to a lot of people""" start="00:46:08.240" video="qanda-voice" id="subtitle"]] +[[!template text="""for whom English is not a first language.""" start="00:46:10.920" video="qanda-voice" id="subtitle"]] +[[!template text="""And then after that, I got to worry about""" start="00:46:15.520" video="qanda-voice" id="subtitle"]] +[[!template text="""precision and then conciseness,""" start="00:46:19.020" video="qanda-voice" id="subtitle"]] +[[!template text="""but those can't be done at the expense of""" start="00:46:24.140" video="qanda-voice" id="subtitle"]] +[[!template text="""clarity. So it's quite a battle.""" start="00:46:27.720" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: That goes back on the to-do list,""" start="00:46:32.320" video="qanda-voice" id="subtitle"]] +[[!template text="""where it's like if you have more than 3 items""" start="00:46:35.440" video="qanda-voice" id="subtitle"]] +[[!template text="""like here the purpose of doing that is to""" start="00:46:39.480" video="qanda-voice" id="subtitle"]] +[[!template text="""help or grant of a to-do list is help is to""" start="00:46:43.080" video="qanda-voice" id="subtitle"]] +[[!template text="""Have you help choose what you're going to do""" start="00:46:45.480" video="qanda-voice" id="subtitle"]] +[[!template text="""for the day. Which is why if you have more""" start="00:46:47.680" video="qanda-voice" id="subtitle"]] +[[!template text="""than 3 items, if you have 50 items on there,""" start="00:46:50.660" video="qanda-voice" id="subtitle"]] +[[!template text="""you're not going to get 50 of those items""" start="00:46:52.860" video="qanda-voice" id="subtitle"]] +[[!template text="""done. So maybe you pick the easiest ones to""" start="00:46:55.920" video="qanda-voice" id="subtitle"]] +[[!template text="""do, not necessarily the ones that you want or""" start="00:46:58.620" video="qanda-voice" id="subtitle"]] +[[!template text="""need to be done. So it's like the process of""" start="00:47:03.340" video="qanda-voice" id="subtitle"]] +[[!template text="""choosing those, like, I don't know,""" start="00:47:06.200" video="qanda-voice" id="subtitle"]] +[[!template text="""like I found that a very good rules,""" start="00:47:07.640" video="qanda-voice" id="subtitle"]] +[[!template text="""like up to 3 priority items if you,""" start="00:47:10.800" video="qanda-voice" id="subtitle"]] +[[!template text="""and then also when you look back and you see""" start="00:47:13.260" video="qanda-voice" id="subtitle"]] +[[!template text="""that you did those 3 items,""" start="00:47:14.440" video="qanda-voice" id="subtitle"]] +[[!template text="""Who cares about this? I'd rather get those 3""" start="00:47:18.460" video="qanda-voice" id="subtitle"]] +[[!template text="""items done than any number of secondary""" start="00:47:20.080" video="qanda-voice" id="subtitle"]] +[[!template text="""tasks.""" start="00:47:20.640" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yes, I, yeah, you're very,""" start="00:47:26.320" video="qanda-voice" id="subtitle"]] +[[!template text="""very right about that.""" start="00:47:28.440" video="qanda-voice" id="subtitle"]] +[[!template text="""I don't, I used to, you know,""" start="00:47:32.380" video="qanda-voice" id="subtitle"]] +[[!template text="""use a pattern of assigning letters.""" start="00:47:36.400" video="qanda-voice" id="subtitle"]] +[[!template text="""And so you have like, you know,""" start="00:47:39.440" video="qanda-voice" id="subtitle"]] +[[!template text="""based on like a hierarchy of,""" start="00:47:41.280" video="qanda-voice" id="subtitle"]] +[[!template text="""you've got the urgent and important,""" start="00:47:43.340" video="qanda-voice" id="subtitle"]] +[[!template text="""of course, that you got to deal with those.""" start="00:47:47.300" video="qanda-voice" id="subtitle"]] +[[!template text="""And then the next thing down is the important""" start="00:47:50.280" video="qanda-voice" id="subtitle"]] +[[!template text="""and so on. But I tend to just generate these""" start="00:48:00.060" video="qanda-voice" id="subtitle"]] +[[!template text="""terribly long lists that most of those items""" start="00:48:03.600" video="qanda-voice" id="subtitle"]] +[[!template text="""would go on what is known as a grass catchers""" start="00:48:06.260" video="qanda-voice" id="subtitle"]] +[[!template text="""list of things that you may get to someday,""" start="00:48:09.180" video="qanda-voice" id="subtitle"]] +[[!template text="""but there's no way you can get to them today.""" start="00:48:11.780" video="qanda-voice" id="subtitle"]] +[[!template text="""But I feel compelled, I need to capture them.""" start="00:48:16.120" video="qanda-voice" id="subtitle"]] +[[!template text="""I may want to do them eventually.""" start="00:48:18.260" video="qanda-voice" id="subtitle"]] +[[!template text="""They wind up on my list.""" start="00:48:20.920" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh yeah, my idea on that is like with a""" start="00:48:24.660" video="qanda-voice" id="subtitle"]] +[[!template text="""Zettelkasten where you have the day thoughts""" start="00:48:26.480" video="qanda-voice" id="subtitle"]] +[[!template text="""and the day journal, then you have your""" start="00:48:29.380" video="qanda-voice" id="subtitle"]] +[[!template text="""Zettelkasten which I don't think should have""" start="00:48:31.800" video="qanda-voice" id="subtitle"]] +[[!template text="""too close of a connection because one's a lot""" start="00:48:34.740" video="qanda-voice" id="subtitle"]] +[[!template text="""more, what's the word?""" start="00:48:37.940" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: It's a knowledge base.""" start="00:48:40.080" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Optimized. Yes, one's more processed.""" start="00:48:43.940" video="qanda-voice" id="subtitle"]] +[[!template text="""Yeah, that's the word.""" start="00:48:45.280" video="qanda-voice" id="subtitle"]] +[[!template text="""Yeah, one's actually much more processed.""" start="00:48:47.040" video="qanda-voice" id="subtitle"]] +[[!template text="""The other is you don't want that process""" start="00:48:50.220" video="qanda-voice" id="subtitle"]] +[[!template text="""because you want it to flow from your head""" start="00:48:52.840" video="qanda-voice" id="subtitle"]] +[[!template text="""with as little friction as possible.""" start="00:48:54.480" video="qanda-voice" id="subtitle"]] +[[!template text="""The other 1 you want to be processed so that""" start="00:48:59.440" video="qanda-voice" id="subtitle"]] +[[!template text="""when you look it up and stuff like that's""" start="00:49:01.800" video="qanda-voice" id="subtitle"]] +[[!template text="""more efficient Same thing with your to-do""" start="00:49:04.840" video="qanda-voice" id="subtitle"]] +[[!template text="""things. So like oh, yeah,""" start="00:49:06.380" video="qanda-voice" id="subtitle"]] +[[!template text="""I guess there's 1 more Category like I""" start="00:49:09.440" video="qanda-voice" id="subtitle"]] +[[!template text="""thought I found my 3 favorite way rather than""" start="00:49:11.780" video="qanda-voice" id="subtitle"]] +[[!template text="""like priority 123 is primary tasks which""" start="00:49:15.720" video="qanda-voice" id="subtitle"]] +[[!template text="""basically generally goes up to 3,""" start="00:49:17.960" video="qanda-voice" id="subtitle"]] +[[!template text="""secondary tasks, and then I like to have a""" start="00:49:20.380" video="qanda-voice" id="subtitle"]] +[[!template text="""third category, unplanned tasks,""" start="00:49:22.540" video="qanda-voice" id="subtitle"]] +[[!template text="""and I just have those wrote down in a heading""" start="00:49:25.840" video="qanda-voice" id="subtitle"]] +[[!template text="""in an org mode file, and then I put the tasks""" start="00:49:28.520" video="qanda-voice" id="subtitle"]] +[[!template text="""in there, rather than using the agenda,""" start="00:49:32.160" video="qanda-voice" id="subtitle"]] +[[!template text="""like too much, I don't know,""" start="00:49:33.800" video="qanda-voice" id="subtitle"]] +[[!template text="""just I found that that was my favorite way of""" start="00:49:40.240" video="qanda-voice" id="subtitle"]] +[[!template text="""doing it and then you have like another file""" start="00:49:43.480" video="qanda-voice" id="subtitle"]] +[[!template text="""that would just be your dump of anything you""" start="00:49:47.840" video="qanda-voice" id="subtitle"]] +[[!template text="""want to do and that would be like that you""" start="00:49:51.440" video="qanda-voice" id="subtitle"]] +[[!template text="""could pull from to get your day or I guess""" start="00:49:57.040" video="qanda-voice" id="subtitle"]] +[[!template text="""something that's actually better than a day""" start="00:49:59.240" video="qanda-voice" id="subtitle"]] +[[!template text="""is doing it all by a week at a time I found""" start="00:50:01.560" video="qanda-voice" id="subtitle"]] +[[!template text="""that that's actually a lot nicer because""" start="00:50:03.160" video="qanda-voice" id="subtitle"]] +[[!template text="""thinking about what you do in a week seems""" start="00:50:06.600" video="qanda-voice" id="subtitle"]] +[[!template text="""like a nicer unit, where you have a week,""" start="00:50:09.480" video="qanda-voice" id="subtitle"]] +[[!template text="""then you have your day,""" start="00:50:10.520" video="qanda-voice" id="subtitle"]] +[[!template text="""and then you have the 3 categories of""" start="00:50:13.360" video="qanda-voice" id="subtitle"]] +[[!template text="""priority, secondary, and unplanned.""" start="00:50:16.500" video="qanda-voice" id="subtitle"]] +[[!template text="""At least that's been my favorite iteration on""" start="00:50:20.860" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: thought process workflow.""" start="00:50:30.840" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: the week of the to-do I had""" start="00:50:31.500" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: a colleague that was very effective at""" start="00:50:33.820" video="qanda-voice" id="subtitle"]] +[[!template text="""planning on a weekly basis and he would just""" start="00:50:37.280" video="qanda-voice" id="subtitle"]] +[[!template text="""get his weekly list of things to get done and""" start="00:50:41.580" video="qanda-voice" id="subtitle"]] +[[!template text="""he was very good at pounding through that""" start="00:50:43.640" video="qanda-voice" id="subtitle"]] +[[!template text="""list and getting them done.""" start="00:50:45.380" video="qanda-voice" id="subtitle"]] +[[!template text="""I have been too much of a day-oriented person""" start="00:50:49.400" video="qanda-voice" id="subtitle"]] +[[!template text="""and a week-oriented person to adapt his""" start="00:50:54.020" video="qanda-voice" id="subtitle"]] +[[!template text="""approach, but I've been considering that too.""" start="00:50:56.760" video="qanda-voice" id="subtitle"]] +[[!template text="""I think what I don't do enough of is pulling""" start="00:51:03.080" video="qanda-voice" id="subtitle"]] +[[!template text="""back to the month level,""" start="00:51:05.640" video="qanda-voice" id="subtitle"]] +[[!template text="""semester level, year level,""" start="00:51:08.100" video="qanda-voice" id="subtitle"]] +[[!template text="""5 year level, 10 year level.""" start="00:51:10.900" video="qanda-voice" id="subtitle"]] +[[!template text="""And...""" start="00:51:11.880" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: That's the advantage of finding it by a week""" start="00:51:16.000" video="qanda-voice" id="subtitle"]] +[[!template text="""is like you can have like so you'd have your""" start="00:51:17.960" video="qanda-voice" id="subtitle"]] +[[!template text="""week and then maybe you have like 1 section""" start="00:51:20.060" video="qanda-voice" id="subtitle"]] +[[!template text="""after Friday or last day of the week and this""" start="00:51:24.440" video="qanda-voice" id="subtitle"]] +[[!template text="""is like your this is just your like staging""" start="00:51:27.660" video="qanda-voice" id="subtitle"]] +[[!template text="""so this is where you stage all the tasks and""" start="00:51:30.300" video="qanda-voice" id="subtitle"]] +[[!template text="""then what like you can just stay in your""" start="00:51:32.560" video="qanda-voice" id="subtitle"]] +[[!template text="""staging write them all down and then use alt""" start="00:51:37.020" video="qanda-voice" id="subtitle"]] +[[!template text="""and your arrow keys to quickly reorder all of""" start="00:51:39.860" video="qanda-voice" id="subtitle"]] +[[!template text="""them in the week and then when you're looking""" start="00:51:43.340" video="qanda-voice" id="subtitle"]] +[[!template text="""at 1 day and you're just looking at ordering""" start="00:51:45.800" video="qanda-voice" id="subtitle"]] +[[!template text="""everything well it makes a lot of sense when""" start="00:51:48.820" video="qanda-voice" id="subtitle"]] +[[!template text="""you just say, I don't really want to do that.""" start="00:51:51.720" video="qanda-voice" id="subtitle"]] +[[!template text="""Like I want this done this week.""" start="00:51:53.160" video="qanda-voice" id="subtitle"]] +[[!template text="""I don't necessarily want it done on this day.""" start="00:51:56.260" video="qanda-voice" id="subtitle"]] +[[!template text="""So it just, that's why I found that the week""" start="00:51:58.520" video="qanda-voice" id="subtitle"]] +[[!template text="""approach works a lot nicer even.""" start="00:52:00.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: of a staging time you like schedule some time""" start="00:52:09.920" video="qanda-voice" id="subtitle"]] +[[!template text="""in your week to do the staging.""" start="00:52:11.880" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah. Is that way The staging is more of just""" start="00:52:14.620" video="qanda-voice" id="subtitle"]] +[[!template text="""like, these are the things I would like to""" start="00:52:16.840" video="qanda-voice" id="subtitle"]] +[[!template text="""get done. And then when you schedule it,""" start="00:52:19.440" video="qanda-voice" id="subtitle"]] +[[!template text="""then you kind of schedule it by just using""" start="00:52:23.360" video="qanda-voice" id="subtitle"]] +[[!template text="""the Alt-Left key, the Alt-Arrow keys to just,""" start="00:52:26.240" video="qanda-voice" id="subtitle"]] +[[!template text="""oh, I want this done. It looks like this""" start="00:52:28.380" video="qanda-voice" id="subtitle"]] +[[!template text="""would work really good on this day.""" start="00:52:29.860" video="qanda-voice" id="subtitle"]] +[[!template text="""This 1 looks like it would work on this day.""" start="00:52:31.620" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: A, you still utilize org agenda?""" start="00:52:38.800" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I try to, I don't know,""" start="00:52:45.140" video="qanda-voice" id="subtitle"]] +[[!template text="""I found that it works at least better without""" start="00:52:49.120" video="qanda-voice" id="subtitle"]] +[[!template text="""it. Yeah, that's fine.""" start="00:52:52.120" video="qanda-voice" id="subtitle"]] +[[!template text="""Because that way I also get a log of""" start="00:52:54.020" video="qanda-voice" id="subtitle"]] +[[!template text="""everything I've done, which I can't find a""" start="00:53:00.020" video="qanda-voice" id="subtitle"]] +[[!template text="""way that, it seems easier to just make new""" start="00:53:03.240" video="qanda-voice" id="subtitle"]] +[[!template text="""files for it. And rather than,""" start="00:53:06.380" video="qanda-voice" id="subtitle"]] +[[!template text="""like you could use it with Org Agenda,""" start="00:53:08.160" video="qanda-voice" id="subtitle"]] +[[!template text="""but like 1 of the things that you want is""" start="00:53:11.540" video="qanda-voice" id="subtitle"]] +[[!template text="""with it is to look back at it,""" start="00:53:14.040" video="qanda-voice" id="subtitle"]] +[[!template text="""reflect. And so like if you have the,""" start="00:53:18.380" video="qanda-voice" id="subtitle"]] +[[!template text="""if you have, if you open up the file with 2""" start="00:53:23.360" video="qanda-voice" id="subtitle"]] +[[!template text="""levels or 3 levels of headings to where you""" start="00:53:25.580" video="qanda-voice" id="subtitle"]] +[[!template text="""just see the priority task,""" start="00:53:26.780" video="qanda-voice" id="subtitle"]] +[[!template text="""you can get a very nice overview of saying,""" start="00:53:29.800" video="qanda-voice" id="subtitle"]] +[[!template text="""I did my priority task this day.""" start="00:53:33.860" video="qanda-voice" id="subtitle"]] +[[!template text="""So you get the numbers next to the things.""" start="00:53:38.760" video="qanda-voice" id="subtitle"]] +[[!template text="""And so you can easily just say,""" start="00:53:40.200" video="qanda-voice" id="subtitle"]] +[[!template text="""I've done this. I mean,""" start="00:53:41.820" video="qanda-voice" id="subtitle"]] +[[!template text="""it would be nice if I could figure out a way""" start="00:53:43.360" video="qanda-voice" id="subtitle"]] +[[!template text="""of doing agenda to give me percentages.""" start="00:53:45.240" video="qanda-voice" id="subtitle"]] +[[!template text="""But I haven't figured that out.""" start="00:53:50.680" video="qanda-voice" id="subtitle"]] +[[!template text="""Seeing the granular level,""" start="00:53:54.280" video="qanda-voice" id="subtitle"]] +[[!template text="""I can easily scan that with my eyes.""" start="00:53:57.100" video="qanda-voice" id="subtitle"]] +[[!template text="""So I just did it by hand rather than the""" start="00:53:59.720" video="qanda-voice" id="subtitle"]] +[[!template text="""agenda.""" start="00:53:59.900" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I've, I've tried to use agenda a few""" start="00:54:06.420" video="qanda-voice" id="subtitle"]] +[[!template text="""times and pretty seriously,""" start="00:54:10.400" video="qanda-voice" id="subtitle"]] +[[!template text="""but I keep bouncing off it.""" start="00:54:14.800" video="qanda-voice" id="subtitle"]] +[[!template text="""I think I get too many things built in or""" start="00:54:17.920" video="qanda-voice" id="subtitle"]] +[[!template text="""scheduled and I just don't get to them.""" start="00:54:21.200" video="qanda-voice" id="subtitle"]] +[[!template text="""I feel bad about it and I wind up abandoning""" start="00:54:26.000" video="qanda-voice" id="subtitle"]] +[[!template text="""it. So that's 1 area where there's probably""" start="00:54:31.220" video="qanda-voice" id="subtitle"]] +[[!template text="""some potential for optimizing and making that""" start="00:54:34.820" video="qanda-voice" id="subtitle"]] +[[!template text="""work better. There's a lot of customizing you""" start="00:54:40.260" video="qanda-voice" id="subtitle"]] +[[!template text="""can do with Agenda. It's amazing.""" start="00:54:42.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: For me, it was though,""" start="00:54:44.540" video="qanda-voice" id="subtitle"]] +[[!template text="""I wanted there to be a separation between the""" start="00:54:48.480" video="qanda-voice" id="subtitle"]] +[[!template text="""daily to-do lists and like your grab bag""" start="00:54:52.120" video="qanda-voice" id="subtitle"]] +[[!template text="""which I think agenda works a lot better for a""" start="00:54:54.480" video="qanda-voice" id="subtitle"]] +[[!template text="""grab bag. I want a nice way of looking back""" start="00:54:58.040" video="qanda-voice" id="subtitle"]] +[[!template text="""at my to-do daily to-do logs.""" start="00:55:01.560" video="qanda-voice" id="subtitle"]] +[[!template text="""So I kind of want them to be separated,""" start="00:55:05.980" video="qanda-voice" id="subtitle"]] +[[!template text="""so I just did them separate.""" start="00:55:08.480" video="qanda-voice" id="subtitle"]] +[[!template text="""With the agenda, I could never figure out""" start="00:55:12.540" video="qanda-voice" id="subtitle"]] +[[!template text="""exactly how I want that to work,""" start="00:55:14.060" video="qanda-voice" id="subtitle"]] +[[!template text="""how the files would look,""" start="00:55:15.620" video="qanda-voice" id="subtitle"]] +[[!template text="""and how all the Emacs settings would interact""" start="00:55:18.580" video="qanda-voice" id="subtitle"]] +[[!template text="""with it. I mean, I'm sure I could,""" start="00:55:21.300" video="qanda-voice" id="subtitle"]] +[[!template text="""but that's why I opted for weekly files.""" start="00:55:28.780" video="qanda-voice" id="subtitle"]] +[[!template text="""Or at least That's my most refined idea on""" start="00:55:34.960" video="qanda-voice" id="subtitle"]] +[[!template text="""the process.""" start="00:55:35.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's a good idea. So I've taken my approach""" start="00:55:41.000" video="qanda-voice" id="subtitle"]] +[[!template text="""is a little different that I'm generating""" start="00:55:43.940" video="qanda-voice" id="subtitle"]] +[[!template text="""this text on a daily basis and popping it""" start="00:55:46.760" video="qanda-voice" id="subtitle"]] +[[!template text="""into this to 1 document file per day and a""" start="00:55:52.660" video="qanda-voice" id="subtitle"]] +[[!template text="""like a diary on Overleaf as a big so it winds""" start="00:55:59.020" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: sections""" start="00:56:01.950" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: up being 365 and where every month is a""" start="00:56:05.440" video="qanda-voice" id="subtitle"]] +[[!template text="""chapter and it's compiled quickly enough even""" start="00:56:11.400" video="qanda-voice" id="subtitle"]] +[[!template text="""though it's often up to 1,000""" start="00:56:13.100" video="qanda-voice" id="subtitle"]] +[[!template text="""pages long by the end of the year.""" start="00:56:14.780" video="qanda-voice" id="subtitle"]] +[[!template text="""And I have all these, of course,""" start="00:56:17.220" video="qanda-voice" id="subtitle"]] +[[!template text="""with the PDF, I can search through it.""" start="00:56:19.240" video="qanda-voice" id="subtitle"]] +[[!template text="""So that's not as you can't do the kind of""" start="00:56:22.540" video="qanda-voice" id="subtitle"]] +[[!template text="""really sophisticated searching that you can""" start="00:56:24.380" video="qanda-voice" id="subtitle"]] +[[!template text="""do with Org Mode. But just doing that,""" start="00:56:29.340" video="qanda-voice" id="subtitle"]] +[[!template text="""It sure has been very helpful in digging up""" start="00:56:33.620" video="qanda-voice" id="subtitle"]] +[[!template text="""information, like the little protocols on how""" start="00:56:39.440" video="qanda-voice" id="subtitle"]] +[[!template text="""I attack, accomplish a certain task that I""" start="00:56:42.960" video="qanda-voice" id="subtitle"]] +[[!template text="""have to do a year later,""" start="00:56:45.420" video="qanda-voice" id="subtitle"]] +[[!template text="""or to have a record of what I did on a""" start="00:56:50.440" video="qanda-voice" id="subtitle"]] +[[!template text="""certain day and then somebody above me might""" start="00:56:54.220" video="qanda-voice" id="subtitle"]] +[[!template text="""be trying to hold me to account what got""" start="00:56:57.100" video="qanda-voice" id="subtitle"]] +[[!template text="""done. I can look that up pretty very quickly.""" start="00:56:59.580" video="qanda-voice" id="subtitle"]] +[[!template text="""It's documented. I find that to be just any""" start="00:57:05.140" video="qanda-voice" id="subtitle"]] +[[!template text="""kind of thorough documentation system is very""" start="00:57:09.520" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I also mess with having it all in 1 file""" start="00:57:16.080" video="qanda-voice" id="subtitle"]] +[[!template text="""rather than by a weak file.""" start="00:57:17.440" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: useful. And at least what I did.""" start="00:57:20.140" video="qanda-voice" id="subtitle"]] +[[!template text="""I ran into trouble with,""" start="00:57:21.820" video="qanda-voice" id="subtitle"]] +[[!template text="""like, once you get a lot of items,""" start="00:57:25.380" video="qanda-voice" id="subtitle"]] +[[!template text="""like if you have 1,000""" start="00:57:27.040" video="qanda-voice" id="subtitle"]] +[[!template text="""items, headings, I've had org files with""" start="00:57:30.580" video="qanda-voice" id="subtitle"]] +[[!template text="""1,000 headings. It can be so hard to scroll""" start="00:57:33.680" video="qanda-voice" id="subtitle"]] +[[!template text="""through. Maybe it's some limitations I'm run""" start="00:57:38.960" video="qanda-voice" id="subtitle"]] +[[!template text="""into with the Emacs being single threaded.""" start="00:57:42.240" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: At least with, yeah. Yeah.""" start="00:57:49.120" video="qanda-voice" id="subtitle"]] +[[!template text="""It was like, that's 1 of the things is like,""" start="00:57:52.420" video="qanda-voice" id="subtitle"]] +[[!template text="""how exactly do you want this,""" start="00:57:54.240" video="qanda-voice" id="subtitle"]] +[[!template text="""the information structured because it can""" start="00:57:55.920" video="qanda-voice" id="subtitle"]] +[[!template text="""change how it's retrieved.""" start="00:57:56.820" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Ooh, most definitely. Most definitely.""" start="00:58:00.260" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: So as an example, when I was doing the daily""" start="00:58:08.200" video="qanda-voice" id="subtitle"]] +[[!template text="""logs and I put it all in the date and then""" start="00:58:14.760" video="qanda-voice" id="subtitle"]] +[[!template text="""the priority, secondary,""" start="00:58:15.700" video="qanda-voice" id="subtitle"]] +[[!template text="""unplanned tasks, and then I had it stay at""" start="00:58:21.980" video="qanda-voice" id="subtitle"]] +[[!template text="""that, get auto expanded by that level by""" start="00:58:24.940" video="qanda-voice" id="subtitle"]] +[[!template text="""default so I didn't see the individual task""" start="00:58:27.280" video="qanda-voice" id="subtitle"]] +[[!template text="""and you and then I had a but And then it""" start="00:58:30.720" video="qanda-voice" id="subtitle"]] +[[!template text="""would say like I complete 205 or something""" start="00:58:33.120" video="qanda-voice" id="subtitle"]] +[[!template text="""like that of secondary tasks.""" start="00:58:34.440" video="qanda-voice" id="subtitle"]] +[[!template text="""And then just being able just to quickly scan""" start="00:58:38.000" video="qanda-voice" id="subtitle"]] +[[!template text="""all the days and say, oh,""" start="00:58:39.740" video="qanda-voice" id="subtitle"]] +[[!template text="""it just, the feedback you get from that is""" start="00:58:42.960" video="qanda-voice" id="subtitle"]] +[[!template text="""worth a lot. And I don't think it's""" start="00:58:46.300" video="qanda-voice" id="subtitle"]] +[[!template text="""something, it's not something I could think""" start="00:58:47.920" video="qanda-voice" id="subtitle"]] +[[!template text="""of how you do an agenda.""" start="00:58:49.320" video="qanda-voice" id="subtitle"]] +[[!template text="""Even though I got done in the text files just""" start="00:58:53.300" video="qanda-voice" id="subtitle"]] +[[!template text="""because you get that doesn't expand all the""" start="00:58:57.260" video="qanda-voice" id="subtitle"]] +[[!template text="""way so you so you can quickly just see on""" start="00:58:59.580" video="qanda-voice" id="subtitle"]] +[[!template text="""this day I did this well on this day I did""" start="00:59:01.940" video="qanda-voice" id="subtitle"]] +[[!template text="""this well all within and 4 lines per day.""" start="00:59:05.800" video="qanda-voice" id="subtitle"]] +[[!template text="""So it's not, that doesn't,""" start="00:59:11.040" video="qanda-voice" id="subtitle"]] +[[!template text="""that's not very visually verbose.""" start="00:59:12.920" video="qanda-voice" id="subtitle"]] +[[!template text="""Probably about as visually verbose as you""" start="00:59:16.920" video="qanda-voice" id="subtitle"]] +[[!template text="""want it. They're not super long.""" start="00:59:18.640" video="qanda-voice" id="subtitle"]] +[[!template text="""You easily see the 2 of 3 and stuff like that""" start="00:59:23.000" video="qanda-voice" id="subtitle"]] +[[!template text="""that you get done so you can quickly and say,""" start="00:59:24.920" video="qanda-voice" id="subtitle"]] +[[!template text="""oh well, these are the days where I got my""" start="00:59:29.380" video="qanda-voice" id="subtitle"]] +[[!template text="""primary tasks done or this week,""" start="00:59:31.300" video="qanda-voice" id="subtitle"]] +[[!template text="""and this day I didn't do it well and you""" start="00:59:36.340" video="qanda-voice" id="subtitle"]] +[[!template text="""could helps you correlate like your feelings""" start="00:59:38.300" video="qanda-voice" id="subtitle"]] +[[!template text="""with your to-do lists and journals and""" start="00:59:42.440" video="qanda-voice" id="subtitle"]] +[[!template text="""whatnot.""" start="00:59:42.620" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah I think that's very powerful.""" start="00:59:48.940" video="qanda-voice" id="subtitle"]] +[[!template text="""Because it's summarizing capability.""" start="00:59:53.300" video="qanda-voice" id="subtitle"]] +[[!template text="""It allows you to, you know,""" start="00:59:57.560" video="qanda-voice" id="subtitle"]] +[[!template text="""pull back and get an overview.""" start="01:00:00.656" video="qanda-voice" id="subtitle"]] +[[!template text="""Get an overview.""" start="01:00:01.040" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: And yeah, as I said, it's like the feedback""" start="01:00:07.580" video="qanda-voice" id="subtitle"]] +[[!template text="""from that almost when I did that,""" start="01:00:10.600" video="qanda-voice" id="subtitle"]] +[[!template text="""it feels like half the reason or should be""" start="01:00:12.620" video="qanda-voice" id="subtitle"]] +[[!template text="""like half the reason is and it's something""" start="01:00:14.580" video="qanda-voice" id="subtitle"]] +[[!template text="""that I don't if you use the agenda as it is,""" start="01:00:19.120" video="qanda-voice" id="subtitle"]] +[[!template text="""you wouldn't, I don't know how you would get""" start="01:00:21.220" video="qanda-voice" id="subtitle"]] +[[!template text="""it, like saying, like looking at the week by""" start="01:00:23.160" video="qanda-voice" id="subtitle"]] +[[!template text="""week basis, breakdowns,""" start="01:00:25.080" video="qanda-voice" id="subtitle"]] +[[!template text="""you might be able to get like percentages,""" start="01:00:27.120" video="qanda-voice" id="subtitle"]] +[[!template text="""which would be nice. Like I did this well,""" start="01:00:30.400" video="qanda-voice" id="subtitle"]] +[[!template text="""or like habit, I don't,""" start="01:00:33.700" video="qanda-voice" id="subtitle"]] +[[!template text="""there might be things that could offer you""" start="01:00:35.640" video="qanda-voice" id="subtitle"]] +[[!template text="""but. Yeah,""" start="01:00:39.700" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: so I'm pretty obsessed about tracking effort""" start="01:00:46.780" video="qanda-voice" id="subtitle"]] +[[!template text="""on various kinds of projects,""" start="01:00:48.560" video="qanda-voice" id="subtitle"]] +[[!template text="""or various kinds of activities,""" start="01:00:52.020" video="qanda-voice" id="subtitle"]] +[[!template text="""and to get some feedback in that regard.""" start="01:00:57.880" video="qanda-voice" id="subtitle"]] +[[!template text="""And then you, but you got the,""" start="01:00:59.500" video="qanda-voice" id="subtitle"]] +[[!template text="""So I define a project as anything that""" start="01:01:02.040" video="qanda-voice" id="subtitle"]] +[[!template text="""requires work at different points in time,""" start="01:01:06.300" video="qanda-voice" id="subtitle"]] +[[!template text="""more than 1""" start="01:01:07.040" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: time. I'll email you my org mode template""" start="01:01:15.300" video="qanda-voice" id="subtitle"]] +[[!template text="""that I made that demonstrates that.""" start="01:01:17.560" video="qanda-voice" id="subtitle"]] +[[!template text="""I don't know if you, do you have your email""" start="01:01:22.200" video="qanda-voice" id="subtitle"]] +[[!template text="""in your talk notes or anything?""" start="01:01:24.520" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. I think I should have it on the first""" start="01:01:29.380" video="qanda-voice" id="subtitle"]] +[[!template text="""slide. There should be my email address.""" start="01:01:31.560" video="qanda-voice" id="subtitle"]] +[[!template text="""I can add it to my talk notes.""" start="01:01:40.560" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay. Would you want me to show it to you at""" start="01:01:46.920" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: that'd be great.""" start="01:01:48.940" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: all? Sure, All right, let's see.""" start="01:01:52.600" video="qanda-voice" id="subtitle"]] +[[!template text="""I'm going to share screen button,""" start="01:02:20.842" video="qanda-voice" id="subtitle"]] +[[!template text="""right? There's a share screen button,""" start="01:02:21.220" video="qanda-voice" id="subtitle"]] +[[!template text="""right?""" start="01:02:21.520" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, so, let's see.""" start="01:02:26.160" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I'm all. That's the right button.""" start="01:02:59.243" video="qanda-voice" id="subtitle"]] +[[!template text="""Can you not share the screen on this?""" start="01:03:04.640" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: I have something going here.""" start="01:03:08.860" video="qanda-voice" id="subtitle"]] +[[!template text="""Let's see. I have, I see some stuff on here.""" start="01:03:13.900" video="qanda-voice" id="subtitle"]] +[[!template text="""Wonder if I'm still active.""" start="01:03:18.160" video="qanda-voice" id="subtitle"]] +[[!template text="""It shows share screen.""" start="01:03:21.180" video="qanda-voice" id="subtitle"]] +[[!template text="""Cancel.""" start="01:03:22.280" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Maybe they just did it through OBS.""" start="01:03:28.260" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Maybe I only have permission to share.""" start="01:03:47.280" video="qanda-voice" id="subtitle"]] +[[!template text="""I can put my email address in the chat.""" start="01:03:53.900" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: I guess I'll just email it to you,""" start="01:03:59.440" video="qanda-voice" id="subtitle"]] +[[!template text="""but Let's see. Yeah, I think the way that""" start="01:04:06.600" video="qanda-voice" id="subtitle"]] +[[!template text="""they did it on the Any of the other videos if""" start="01:04:11.260" video="qanda-voice" id="subtitle"]] +[[!template text="""they shared the screen they just shared the""" start="01:04:13.780" video="qanda-voice" id="subtitle"]] +[[!template text="""webcam they just took over the webcam with""" start="01:04:17.440" video="qanda-voice" id="subtitle"]] +[[!template text="""OBS and shared what they wanted with it.""" start="01:04:20.380" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, okay.""" start="01:04:22.760" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: At least I'm guessing.""" start="01:04:24.720" video="qanda-voice" id="subtitle"]] +[[!template text="""Yeah, I'll give that to you.""" start="01:04:26.960" video="qanda-voice" id="subtitle"]] +[[!template text="""Okay. I guess I'll let you go watch the rest""" start="01:04:31.080" video="qanda-voice" id="subtitle"]] +[[!template text="""of the Emacs videos.""" start="01:04:32.240" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: This has been a great conversation.""" start="01:04:34.640" video="qanda-voice" id="subtitle"]] +[[!template text="""Thank you very much. I appreciate your""" start="01:04:37.280" video="qanda-voice" id="subtitle"]] +[[!template text="""willingness to share your thoughts on this""" start="01:04:39.620" video="qanda-voice" id="subtitle"]] +[[!template text="""matter. This is vital,""" start="01:04:42.980" video="qanda-voice" id="subtitle"]] +[[!template text="""time management. It's a kind of key aspect of""" start="01:04:48.260" video="qanda-voice" id="subtitle"]] +[[!template text="""life.""" start="01:04:48.440" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Oh yeah. The way the how the function.""" start="01:04:54.680" video="qanda-voice" id="subtitle"]] +[[!template text="""Reasons to use emacs is to use the keyboard""" start="01:05:03.320" video="qanda-voice" id="subtitle"]] +[[!template text="""is. It's not to speed you up.""" start="01:05:08.240" video="qanda-voice" id="subtitle"]] +[[!template text="""Like, yeah, that's nice.""" start="01:05:09.520" video="qanda-voice" id="subtitle"]] +[[!template text="""But it keeps you in the stream,""" start="01:05:12.280" video="qanda-voice" id="subtitle"]] +[[!template text="""keeps you in the flow state and which then""" start="01:05:25.400" video="qanda-voice" id="subtitle"]] +[[!template text="""just makes you think better and yeah and the""" start="01:05:32.780" video="qanda-voice" id="subtitle"]] +[[!template text="""thing with that is you I have you I have no""" start="01:05:35.540" video="qanda-voice" id="subtitle"]] +[[!template text="""idea what the limits of that would be.""" start="01:05:37.480" video="qanda-voice" id="subtitle"]] +[[!template text="""Because you think, because yes,""" start="01:05:39.680" video="qanda-voice" id="subtitle"]] +[[!template text="""it's not about beating up how many words you""" start="01:05:42.740" video="qanda-voice" id="subtitle"]] +[[!template text="""say a minute. I mean that's nice and all,""" start="01:05:44.860" video="qanda-voice" id="subtitle"]] +[[!template text="""But when you start doing that,""" start="01:05:46.680" video="qanda-voice" id="subtitle"]] +[[!template text="""when you start removing all these friction""" start="01:05:48.340" video="qanda-voice" id="subtitle"]] +[[!template text="""points, all of a sudden the number,""" start="01:05:52.500" video="qanda-voice" id="subtitle"]] +[[!template text="""quality, and types of thoughts you get start""" start="01:05:57.800" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: That's right.""" start="01:06:01.620" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: increasing. Which is the goal.""" start="01:06:03.480" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay. Well, thank you very much.""" start="01:06:14.960" video="qanda-voice" id="subtitle"]] +[[!template text="""Enjoy the rest of the meeting.""" start="01:06:17.760" video="qanda-voice" id="subtitle"]] +[[!template text="""[Speaker 2]: Will do.""" start="01:06:19.280" video="qanda-voice" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20voice%3A%20Enhancing%20productivity%20with%20voice%20computing) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/voice-before.md b/2023/info/voice-before.md new file mode 100644 index 00000000..6f5b9b90 --- /dev/null +++ b/2023/info/voice-before.md @@ -0,0 +1,37 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 19-min talk; Q&A: BigBlueButton conference room +Status: TO_INDEX_QA + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="voice-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="voice-mainVideo" data=""" +00:00.000 Introduction +00:37.400 Three activities in voice computing +01:02.560 Talk is not about ... and about ... +01:53.520 Motivations +03:33.240 Data +03:58.680 Voice In in the Chrome Store +04:25.628 Works in web pages with text areas +05:16.880 Built-in commands in Voice In Plus +06:41.740 Common errors made by Voice In +08:14.760 Custom speech-to-text commands +09:59.420 Custom speech-to-commands +10:37.540 Introducing Talon Voice +12:28.400 Talon GUI +14:02.540 Talon file with web scope +15:34.015 Terminals on remote and virtual machines +16:52.500 Recommendations +18:17.720 Acknowledgements + +"""]]<div></div>Duration: 18:49 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/vYHj7iSYhUbTxDv93NvzzY">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="voice-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="voice-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus"></audio></div><div></div>Duration: 1:07:47 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/voice-nav.md b/2023/info/voice-nav.md new file mode 100644 index 00000000..9fedf97e --- /dev/null +++ b/2023/info/voice-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a> +Next by track: <a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/web-after.md b/2023/info/web-after.md new file mode 100644 index 00000000..96ebb81b --- /dev/null +++ b/2023/info/web-after.md @@ -0,0 +1,850 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="web-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Overview""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Hello, I am Yuchen, and I will be talking about""" start="00:00:00.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""how Emacs may be used to save user freedom on the web.""" start="00:00:03.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""I will begin by describing the background issues,""" start="00:00:06.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""followed by solutions outside of Emacs.""" start="00:00:09.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""Then I will move into the main business of describing""" start="00:00:12.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""several ways to address the issues using Emacs,""" start="00:00:14.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""including free clients in Emacs, web browsers,""" start="00:00:17.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""also known as universal clients in Emacs,""" start="00:00:20.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""approaches using Emacs web server and Emacs web framework,""" start="00:00:23.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""which allows one to write an Emacs package""" start="00:00:27.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""and get a web app for free,""" start="00:00:29.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""as well as using Emacs as a Firefox extension.""" start="00:00:30.760" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Background problems""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]] + +[[!template text="""OK, let's now move on to""" start="00:00:35.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""the background issues for this topic.""" start="00:00:37.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""Many of you probably already know what is free software.""" start="00:00:39.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is software that respects four user freedoms,""" start="00:00:42.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""including freedom 0, which is the freedom to use,""" start="00:00:45.481" video="mainVideo-web" id="subtitle"]] +[[!template text="""freedom 1 is the freedom to study and modify a program,""" start="00:00:49.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""freedom 2 is the freedom to""" start="00:00:52.279" video="mainVideo-web" id="subtitle"]] +[[!template text="""distribute exact copies of a program,""" start="00:00:54.488" video="mainVideo-web" id="subtitle"]] +[[!template text="""and freedom 3 is the freedom to distribute modified copies.""" start="00:00:57.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""Different environments have different norms""" start="00:01:01.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""with regards to user freedom.""" start="00:01:04.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, GNU/Linux distributions""" start="00:01:06.820" video="mainVideo-web" id="subtitle"]] +[[!template text="""default to free software,""" start="00:01:11.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""even though the official kernel Linux""" start="00:01:13.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""contains non-free code, like non-free firmware.""" start="00:01:15.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""What I mean is, people generally expect free software""" start="00:01:18.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""in these environments.""" start="00:01:23.060" video="mainVideo-web" id="subtitle"]] +[[!template text="""There's plenty of free software""" start="00:01:25.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""built on other free software,""" start="00:01:27.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""so generally people can accomplish tasks""" start="00:01:29.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""using free software only.""" start="00:01:31.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""Emacs, by comparison, is even better.""" start="00:01:33.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""It has freedom built-in, as it is highly customizable""" start="00:01:37.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""with self-documenting configurations.""" start="00:01:41.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""When a Lisp form is evaluated by the user in Emacs,""" start="00:01:44.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""the change is instantly reflected in the environment.""" start="00:01:49.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""Thus, it converts users to hackers effortlessly.""" start="00:01:53.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""From writing setq statements,""" start="00:01:56.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is similar to configurations""" start="00:01:58.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""in the majority of other programs,""" start="00:02:00.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""to writing functions,""" start="00:02:01.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""which are building blocks of Elisp features,""" start="00:02:03.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""to writing features and publishing packages,""" start="00:02:05.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""it is a natural progression.""" start="00:02:08.140" video="mainVideo-web" id="subtitle"]] +[[!template text="""In this sense, Emacs perhaps has""" start="00:02:10.099" video="mainVideo-web" id="subtitle"]] +[[!template text="""the most gentle learning curve for hackers.""" start="00:02:15.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""On the other hand, the default license""" start="00:02:18.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""in the Emacs community""" start="00:02:21.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""is GNU General Public License version 3 or later,""" start="00:02:22.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is the best free software license""" start="00:02:26.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""apart from the Affero license.""" start="00:02:29.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Now let's move on to web browsers,""" start="00:02:32.300" video="mainVideo-web" id="subtitle"]] +[[!template text="""which by contrast does not default to freedom.""" start="00:02:35.020" video="mainVideo-web" id="subtitle"]] +[[!template text="""For one thing, free software JavaScript projects""" start="00:02:39.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""default to Expat license,""" start="00:02:42.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is also commonly known as the MIT license,""" start="00:02:45.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is a lax permissive license that could be exploited""" start="00:02:49.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""as developers could write non-free derivatives""" start="00:02:53.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""and subjugate user freedom.""" start="00:02:55.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""This also contributes to the JavaScript trap.""" start="00:02:59.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""Most popular web browsers nowadays simply download and run""" start="00:03:03.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""any JavaScript code requested by the web page.""" start="00:03:06.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""Generally speaking, there are two camps on this issue.""" start="00:03:10.820" video="mainVideo-web" id="subtitle"]] +[[!template text="""One side would say JavaScript is simply part of life,""" start="00:03:15.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""and an integral part of the so-called modern web.""" start="00:03:19.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Just accept it, and there is no point in fighting it.""" start="00:03:22.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Indeed, it can be frustrating when greeted by""" start="00:03:25.300" video="mainVideo-web" id="subtitle"]] +[[!template text=""""This page requires JavaScript and cookies to continue,"""" start="00:03:28.388" video="mainVideo-web" id="subtitle"]] +[[!template text="""or even a blank page when opening a web page""" start="00:03:31.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""while disabling JavaScript.""" start="00:03:34.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""The other camp takes a more principled position""" start="00:03:38.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""and says JavaScript is unnecessary.""" start="00:03:42.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""I mean, people use the web mainly for""" start="00:03:44.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""database-like operations""" start="00:03:47.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""to interact with data stored on other people's computers,""" start="00:03:48.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""like querying, creating, updating, deleting.""" start="00:03:51.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""I mean, 99% of the things happen in getting data,""" start="00:03:55.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""including reading news, watching videos,""" start="00:03:58.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""downloading images, etc.,""" start="00:04:01.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""and posting data, including publishing""" start="00:04:03.340" video="mainVideo-web" id="subtitle"]] +[[!template text="""this sort of materials, publishing news comments, videos.""" start="00:04:06.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""Why does this need any programs""" start="00:04:10.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""to do funny computations, right?""" start="00:04:12.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""Modern web browsers are also a pain to use.""" start="00:04:16.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""They are the opposite to Emacs""" start="00:04:19.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""in terms of customization capabilities.""" start="00:04:21.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""Such problems on the client side""" start="00:04:26.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""is the main focus of this talk.""" start="00:04:29.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""On the server side, the issue is known as SaaSS,""" start="00:04:31.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""service as a software substitute.""" start="00:04:34.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is about doing computing for users""" start="00:04:38.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""on other people's computers,""" start="00:04:42.421" video="mainVideo-web" id="subtitle"]] +[[!template text="""which the user has no visibility, let alone control.""" start="00:04:44.541" video="mainVideo-web" id="subtitle"]] +[[!template text="""Examples include translation or photo editing""" start="00:04:48.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""in so-called web applications.""" start="00:04:51.941" video="mainVideo-web" id="subtitle"]] +[[!template text="""Another example would be web applications""" start="00:04:55.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""make recommendations based on user data""" start="00:04:59.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""and suggest what the users read or watch next.""" start="00:05:02.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""On the one hand, SaaSS is an intractable problem""" start="00:05:05.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""because free software is all about user freedom""" start="00:05:09.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""on one's own computer,""" start="00:05:11.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""not someone else's computer.""" start="00:05:13.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""On the other hand, this is also a lesser problem""" start="00:05:16.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""because it has trivial solutions,""" start="00:05:18.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is self-hosting and keeping computations local.""" start="00:05:21.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""Wouldn't it be nice to use a photo editing web application,""" start="00:05:25.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""but without the web?""" start="00:05:28.680" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Right, now let's move on to solutions outside of Emacs""" start="00:05:31.940" video="mainVideo-web" id="subtitle"]] +[[!template text="""that tackle these problems.""" start="00:05:36.401" video="mainVideo-web" id="subtitle"]] +[[!template text="""There are generally two ways to fix this issue.""" start="00:05:39.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""One is blocking non-free JavaScript,""" start="00:05:42.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""and the other is substituting with free programs.""" start="00:05:45.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's start with blocking.""" start="00:05:48.980" video="mainVideo-web" id="subtitle"]] +[[!template text="""LibreJS, for example, is a Firefox extension""" start="00:05:50.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""blocking non-free, non-trivial JavaScript.""" start="00:05:54.860" video="mainVideo-web" id="subtitle"]] +[[!template text="""It works by intercepting, filtering""" start="00:05:56.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""all requests for JavaScript,""" start="00:05:59.821" video="mainVideo-web" id="subtitle"]] +[[!template text="""recognizing the ones that are trivial or free,""" start="00:06:01.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""and blocking the execution of the others.""" start="00:06:05.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""As an experiment, I logged the LibreJS output""" start="00:06:11.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""for about two weeks,""" start="00:06:13.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""and during which, of all the web pages I loaded,""" start="00:06:15.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""23 domains have at least some LibreJS-compliant scripts.""" start="00:06:19.740" video="mainVideo-web" id="subtitle"]] +[[!template text="""That is not much, though I did use other means""" start="00:06:25.001" video="mainVideo-web" id="subtitle"]] +[[!template text="""to reduce the scenarios""" start="00:06:28.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""where I need to load web pages with JavaScript in Firefox,""" start="00:06:30.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""like using a text browser like Lynx.""" start="00:06:35.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""Then there's also NoScript, which is like LibreJS,""" start="00:06:40.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""but it blocks all scripts, whether free or non-free, +trivial or non-trivial.""" start="00:06:44.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""So the problem with blocking is that""" start="00:06:49.500" video="mainVideo-web" id="subtitle"]] +[[!template text="""blocking with certain scripts and accepting others,""" start="00:06:54.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""there are like... I can think of two problems.""" start="00:06:57.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""One is that it does not help with Freedom 1,""" start="00:07:00.679" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is the freedom to allow users to modify a program""" start="00:07:02.879" video="mainVideo-web" id="subtitle"]] +[[!template text="""and use it in place of the original program.""" start="00:07:07.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""And also it does not help""" start="00:07:13.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""when the non-free JavaScript is mandatory""" start="00:07:15.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""for the functioning of the web page.""" start="00:07:18.860" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, some pages are blank""" start="00:07:20.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""when non-free JavaScript is not executed.""" start="00:07:22.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""So now let's move on to the substitution, the other method.""" start="00:07:27.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's start with userscript.""" start="00:07:36.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is a script, it is a user-specified JavaScript""" start="00:07:38.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""injected to a web page.""" start="00:07:41.761" video="mainVideo-web" id="subtitle"]] +[[!template text="""A typical example of userscript tool is GreaseMonkey.""" start="00:07:43.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Another idea is a proxy that replaces scripts in place,""" start="00:07:48.481" video="mainVideo-web" id="subtitle"]] +[[!template text="""that is, sending user-specified scripts""" start="00:07:53.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""as a response to requests for such scripts.""" start="00:07:55.919" video="mainVideo-web" id="subtitle"]] +[[!template text="""So one example would be Haketilo, however you pronounce it.""" start="00:08:00.900" video="mainVideo-web" id="subtitle"]] +[[!template text="""It's a tool that's built on top of mitmproxy.""" start="00:08:04.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is supposed to do this.""" start="00:08:09.620" video="mainVideo-web" id="subtitle"]] +[[!template text="""I haven't used GreaseMonkey nor Haketilo""" start="00:08:11.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""for these purposes yet,""" start="00:08:14.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""so I can't say much about these options.""" start="00:08:16.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""So then there are also free clients""" start="00:08:20.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""which replace the whole frontend,""" start="00:08:24.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""instead of a script requested by web pages""" start="00:08:26.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""from the official web clients.""" start="00:08:30.661" video="mainVideo-web" id="subtitle"]] +[[!template text="""People often refer to them as alternative frontend.""" start="00:08:32.500" video="mainVideo-web" id="subtitle"]] +[[!template text="""YouTube is perhaps the best example""" start="00:08:37.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""as there are so many free clients,""" start="00:08:39.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""including Invidious for the web,""" start="00:08:41.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""youtube-dl and yt-dlp on the command line,""" start="00:08:43.622" video="mainVideo-web" id="subtitle"]] +[[!template text="""MPV and VLC as GUI desktop, LibreTube""" start="00:08:46.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""and NewPipe for Android and so on.""" start="00:08:50.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""Youtube-dl and yt-dlp are especially versatile""" start="00:08:53.260" video="mainVideo-web" id="subtitle"]] +[[!template text="""as they work with many video and audio sites""" start="00:08:56.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""with extractors written in Python,""" start="00:08:59.460" video="mainVideo-web" id="subtitle"]] +[[!template text="""so people can add extractors like extensions.""" start="00:09:02.620" video="mainVideo-web" id="subtitle"]] +[[!template text="""A similar tool would be woob,""" start="00:09:06.300" video="mainVideo-web" id="subtitle"]] +[[!template text="""short for web outside of the browsers.""" start="00:09:09.422" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is a command-line and GUI program""" start="00:09:12.740" video="mainVideo-web" id="subtitle"]] +[[!template text="""that interacts with many web services, even banks.""" start="00:09:16.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""And there are browser extensions""" start="00:09:23.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""that automatically redirect to these clients.""" start="00:09:25.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, Redirector and Libredirect""" start="00:09:28.860" video="mainVideo-web" id="subtitle"]] +[[!template text="""redirect to the free web clients.""" start="00:09:31.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""One could use OpenWith, another extension,""" start="00:09:35.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""to redirect to free non-web clients,""" start="00:09:39.700" video="mainVideo-web" id="subtitle"]] +[[!template text="""for example by opening YouTube links with MPV.""" start="00:09:42.160" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Emacs solutions""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Now let us move to Emacs-based solutions.""" start="00:09:46.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""They are based on the same ideas but using Emacs.""" start="00:09:51.000" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Free clients in Emacs""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]] + +[[!template text="""First, free clients in Emacs.""" start="00:09:54.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""Basically alternative frontends written in Elisp.""" start="00:09:57.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""There are several advantages.""" start="00:10:00.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, integration with other Emacs tools,""" start="00:10:03.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""good for archiving, making use of Emacs libraries,""" start="00:10:06.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""extensibility, thanks to Emacs' own""" start="00:10:09.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""extensibility and customizability.""" start="00:10:12.489" video="mainVideo-web" id="subtitle"]] +[[!template text="""Examples include mastodon.el for mastodon,""" start="00:10:15.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""or mastorg for viewing and archiving toots with org,""" start="00:10:18.620" video="mainVideo-web" id="subtitle"]] +[[!template text="""sx for Stack Exchange, buildbot.el for buildbot, etc.""" start="00:10:22.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""Here's an example of mastorg displaying""" start="00:10:28.900" video="mainVideo-web" id="subtitle"]] +[[!template text="""the hierarchy of a toot in org.""" start="00:10:31.901" video="mainVideo-web" id="subtitle"]] +[[!template text="""Just wait. Right.""" start="00:10:34.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""So this is the toot itself, this is a first reply,""" start="00:10:39.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""this is a reply to the reply, and so on.""" start="00:10:44.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""And here is an example of""" start="00:10:48.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""opening a Stack Exchange link using sx.""" start="00:10:53.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's check out the tag.""" start="00:11:05.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""So we can browse the Stack Exchange Emacs site +with ease.""" start="00:11:11.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""The idea is quite simple.""" start="00:11:28.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""Just use APIs to get data and display it in Emacs,""" start="00:11:31.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""or just to scrape, like requesting HTML and processing it.""" start="00:11:35.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""An example of scraping is hnreader,""" start="00:11:40.820" video="mainVideo-web" id="subtitle"]] +[[!template text="""which scrapes Hacker News web pages""" start="00:11:44.180" video="mainVideo-web" id="subtitle"]] +[[!template text="""and renders them in Org buffers.""" start="00:11:47.299" video="mainVideo-web" id="subtitle"]] +[[!template text="""Here's how hnreader fetches""" start="00:11:49.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""and displays the Hacker News front page.""" start="00:11:52.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""And one could go into the comments,""" start="00:11:58.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""which shows a similar hierarchy to mastorg's output.""" start="00:12:04.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""And of course, there are limitations for this method,""" start="00:12:14.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is not limited to Emacs.""" start="00:12:19.001" video="mainVideo-web" id="subtitle"]] +[[!template text="""There are basically limitations""" start="00:12:22.540" video="mainVideo-web" id="subtitle"]] +[[!template text="""to any ad hoc bespoke clients,""" start="00:12:24.522" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is catch-up games with remote server,""" start="00:12:28.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""which may change the API interface endpoints""" start="00:12:31.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""or even structure of the responses.""" start="00:12:34.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""This brings us to web browsers in Emacs.""" start="00:12:37.540" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Web browsers in Emacs""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Web browsers are universal clients""" start="00:12:43.021" video="mainVideo-web" id="subtitle"]] +[[!template text="""because all sites support browsers.""" start="00:12:45.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""So in a world of no JavaScript,""" start="00:12:47.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""there will be no need to write bespoke clients.""" start="00:12:48.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""In such a world,""" start="00:12:52.740" video="mainVideo-web" id="subtitle"]] +[[!template text="""instead of using JavaScript code to fetch JSON,""" start="00:12:53.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""web developers make server do the heavy lifting""" start="00:12:56.740" video="mainVideo-web" id="subtitle"]] +[[!template text="""and just send the complete HTML over.""" start="00:13:00.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""Okay, back to reality.""" start="00:13:02.860" video="mainVideo-web" id="subtitle"]] +[[!template text="""EWW, the default Emacs browser,""" start="00:13:05.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""is what people refer to as a text browser,""" start="00:13:07.660" video="mainVideo-web" id="subtitle"]] +[[!template text="""even though it is not text only and it supports images too.""" start="00:13:11.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is a good solid browser that supports forms, etc.""" start="00:13:16.900" video="mainVideo-web" id="subtitle"]] +[[!template text="""The downside is that it does not support CSS,""" start="00:13:20.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""so the formatting could be a bit ugly sometimes.""" start="00:13:24.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""There are some other browsers in Emacs too,""" start="00:13:28.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""like emacs-w3m, which is backed by w3m,""" start="00:13:30.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""and Luwak, which is backed by Lynx.""" start="00:13:34.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""Sorry for the naming, by the way.""" start="00:13:36.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""They often consist of a backend""" start="00:13:39.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""that fetches URL and parses HTML.""" start="00:13:41.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, the built-in URL package""" start="00:13:44.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""and the libxml2 binding in Emacs are decent enough.""" start="00:13:47.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""And the frontend that renders the HTML,""" start="00:13:50.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""like shr or lynx, etc.""" start="00:13:53.189" video="mainVideo-web" id="subtitle"]] +[[!template text="""There is also an xwidget-webkit,""" start="00:13:56.699" video="mainVideo-web" id="subtitle"]] +[[!template text="""but this browser executes JavaScript,""" start="00:14:04.740" video="mainVideo-web" id="subtitle"]] +[[!template text="""so it does not really help in this case.""" start="00:14:07.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""Browser extensions on Emacs are effortless,""" start="00:14:10.540" video="mainVideo-web" id="subtitle"]] +[[!template text="""as they can be written as Emacs packages.""" start="00:14:14.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, one could easily write""" start="00:14:17.460" video="mainVideo-web" id="subtitle"]] +[[!template text="""Elisp scripts with similar functionalities""" start="00:14:19.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""to libredirect and openwith""" start="00:14:21.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""to redirect links, to rewrite URLs,""" start="00:14:24.922" video="mainVideo-web" id="subtitle"]] +[[!template text="""or to open, say, a YouTube URL with MPV,""" start="00:14:30.181" video="mainVideo-web" id="subtitle"]] +[[!template text="""but with even more flexibility.""" start="00:14:37.061" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, here's how one could""" start="00:14:39.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""transform a Zoom link to a dial-in number""" start="00:14:41.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""so that it is easier to join a Zoom meeting""" start="00:14:44.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""without running non-free JavaScript.""" start="00:14:47.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""This might still be bad for privacy,""" start="00:14:50.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""but at least it's good for freedom.""" start="00:14:53.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""As mentioned before,""" start="00:14:58.699" video="mainVideo-web" id="subtitle"]] +[[!template text="""one shortcoming of these Emacs-based browsers,""" start="00:15:00.379" video="mainVideo-web" id="subtitle"]] +[[!template text="""Emacs web browsers, is no support for CSS,""" start="00:15:03.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""so the formatting could leave a lot to be desired.""" start="00:15:08.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""Maybe someone would write""" start="00:15:11.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""an Emacs browser package backed by wkhtmltopdf,""" start="00:15:12.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""which, when opening a URL,""" start="00:15:17.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""it calls wkhtmltopdf to convert the web page to PDF""" start="00:15:20.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""and opens in, say, pdf-view-mode of the pdf-tools,""" start="00:15:26.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""thus containing formatting,""" start="00:15:29.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""and all the URL clicks resolve to the same actions.""" start="00:15:31.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Also, wkhtmltopdf contains a flag that disables JavaScript.""" start="00:15:34.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""Another idea would be to use Firefox""" start="00:15:43.300" video="mainVideo-web" id="subtitle"]] +[[!template text="""as a processor to fetch URLs.""" start="00:15:45.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""Maybe it can be used to pass back the HTML""" start="00:15:50.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""after executing free JavaScript,""" start="00:15:54.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""say, if Firefox has LibreJS installed.""" start="00:15:56.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""This requires Firefox to send back the DOM,""" start="00:16:01.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""which could be achieved using native messaging.""" start="00:16:05.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""More on that later.""" start="00:16:08.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Alternatively, one could also write a Firefox extension""" start="00:16:09.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""that sends the DOM in an existing tab back to Emacs.""" start="00:16:14.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""But thinking more about it,""" start="00:16:17.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""I don't think this is actually a useful idea,""" start="00:16:20.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""because most of the sites that work under LibreJS""" start="00:16:23.059" video="mainVideo-web" id="subtitle"]] +[[!template text="""also are useful when all JavaScript is blocked.""" start="00:16:27.139" video="mainVideo-web" id="subtitle"]] +[[!template text="""So, this means these sites are viewable""" start="00:16:34.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""under EWW, Luwak, etc.""" start="00:16:37.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""And another issue is that""" start="00:16:42.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""this could also make running non-free JavaScript easier,""" start="00:16:43.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is harmful to user freedom.""" start="00:16:46.560" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""emacs-web-server - overview""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]] + +[[!template text="""OK, let's move on to the idea""" start="00:16:52.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""of running Emacs as a web server,""" start="00:16:54.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""so that Emacs client packages are web apps""" start="00:16:55.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""serving as alternative frontends.""" start="00:16:58.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""Why would we want to do this?""" start="00:17:00.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""Well, as much as one wants to be always in Emacs,""" start="00:17:02.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""it is not always feasible.""" start="00:17:06.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, one may be on the go""" start="00:17:08.340" video="mainVideo-web" id="subtitle"]] +[[!template text="""and needs to look up something on the phone.""" start="00:17:10.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""On the other hand, Emacs client packages""" start="00:17:12.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""are just alternative frontends""" start="00:17:14.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""but written in Elisp and run in Emacs.""" start="00:17:16.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""With the help of emacs-web-server package,""" start="00:17:18.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""we can access Emacs packages on the web.""" start="00:17:20.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""emacs-web-server package is not something new,""" start="00:17:23.580" video="mainVideo-web" id="subtitle"]] +[[!template text="""but seems to be underused in the community somehow.""" start="00:17:26.440" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""emacs-web-server - hello emacs!""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]] + +[[!template text="""OK, let's start with a simple example called hello-emacs.""" start="00:17:30.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is pretty straightforward.""" start="00:17:33.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""Just require the web server feature""" start="00:17:35.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""and run ws-start to start a server process""" start="00:17:38.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""and send the string "hello emacs"""" start="00:17:41.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""to the process regardless of the request.""" start="00:17:43.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""As you can see, it is going to be available""" start="00:17:45.540" video="mainVideo-web" id="subtitle"]] +[[!template text="""at port 9000 of localhost.""" start="00:17:48.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's try it out.""" start="00:17:51.319" video="mainVideo-web" id="subtitle"]] +[[!template text="""We need to first evaluate this code block.""" start="00:17:53.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it works.""" start="00:18:01.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""To stop a server, just run ws-stop on the web server object.""" start="00:18:03.940" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's evaluate.""" start="00:18:10.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""Yep, it stopped.""" start="00:18:14.960" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""emacs-web-server - yolo""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]] + +[[!template text="""OK, now let's move on to something funny""" start="00:18:17.580" video="mainVideo-web" id="subtitle"]] +[[!template text="""that you should never run on the public web.""" start="00:18:20.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""I call it yolo.el.""" start="00:18:22.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""It uses htmlize""" start="00:18:23.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""to make any Emacs buffer available on the web.""" start="00:18:25.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's try it out.""" start="00:18:28.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""Just require the thing and start the server by yolo-start.""" start="00:18:29.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it's available at port 9999.""" start="00:18:33.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""By default, the root domain shows the splash screen""" start="00:18:38.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""which needs to be available.""" start="00:18:41.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""Running display-splash-screen ensures that,""" start="00:18:42.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""but here I've already run it.""" start="00:18:47.219" video="mainVideo-web" id="subtitle"]] +[[!template text="""So let's have a look.""" start="00:18:48.939" video="mainVideo-web" id="subtitle"]] +[[!template text="""And here we have the splash screen.""" start="00:18:54.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""Emacs tutorial and such.""" start="00:18:56.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""Unfortunately, none of these links work,""" start="00:19:00.240" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is something we will revisit later.""" start="00:19:05.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""So, to show an arbitrary buffer,""" start="00:19:10.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""just use the buffer name as a path.""" start="00:19:15.481" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, the slide has the buffer named web.org,""" start="00:19:20.081" video="mainVideo-web" id="subtitle"]] +[[!template text="""so we can display it.""" start="00:19:24.861" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's try something fancier,""" start="00:19:34.581" video="mainVideo-web" id="subtitle"]] +[[!template text="""like the man page of ffmpeg.""" start="00:19:36.941" video="mainVideo-web" id="subtitle"]] +[[!template text="""So this is the man page of ffmpeg.""" start="00:19:40.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""And the buffer name is a bit more complicated.""" start="00:19:45.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""I have the URL available here.""" start="00:19:48.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""It's missing a star.""" start="00:19:59.140" video="mainVideo-web" id="subtitle"]] +[[!template text="""It's pretty neat if you ask me.""" start="00:20:05.980" video="mainVideo-web" id="subtitle"]] +[[!template text="""And, yeah, what else?""" start="00:20:12.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""Well, we can also browse EWW in Firefox.""" start="00:20:14.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, let's check out gnu.org,""" start="00:20:22.700" video="mainVideo-web" id="subtitle"]] +[[!template text="""and note that the buffer name is EWW with stars.""" start="00:20:30.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""So, ah, it works.""" start="00:20:39.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it has all the graphics even.""" start="00:20:41.979" video="mainVideo-web" id="subtitle"]] +[[!template text="""Now, how about we do it the other way around?""" start="00:20:50.900" video="mainVideo-web" id="subtitle"]] +[[!template text="""So we load the current slide web.org using this funny thing.""" start="00:20:55.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it works.""" start="00:21:10.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""Not as nice as the Org buffer, though.""" start="00:21:14.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""Right, and now that gives me some funny idea.""" start="00:21:19.940" video="mainVideo-web" id="subtitle"]] +[[!template text="""So I'm a firm believer that memes are meant to be enjoyed""" start="00:21:27.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""in silence rather than read out loud.""" start="00:21:31.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""So I will jump straight to trying this idea,""" start="00:21:33.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is loading the EWW buffer URL with EWW itself.""" start="00:21:38.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""Loading, loading, loading.""" start="00:21:49.860" video="mainVideo-web" id="subtitle"]] +[[!template text="""Spoiler alert, it never loads.""" start="00:21:53.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""So that concludes the demo.""" start="00:21:59.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""And so we can stop the server, web server, with `yolo-stop`.""" start="00:22:03.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""So one could extend yolo to serve arbitrary Emacs commands,""" start="00:22:06.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""making it even more dangerous.""" start="00:22:13.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""That is, for example, `localhost:9000/m-x/magit-status`""" start="00:22:15.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""would run `magit-status`""" start="00:22:26.119" video="mainVideo-web" id="subtitle"]] +[[!template text="""and show the magit-status buffer in the web browser.""" start="00:22:27.820" video="mainVideo-web" id="subtitle"]] +[[!template text="""Or localhost:9000/m-x/eww/""" start="00:22:34.500" video="mainVideo-web" id="subtitle"]] +[[!template text="""any arbitrary URL to browse arbitrary URL""" start="00:22:43.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""with EWW inside of Firefox.""" start="00:22:46.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""It can serve as a way to block all JavaScript,""" start="00:22:50.820" video="mainVideo-web" id="subtitle"]] +[[!template text="""because EWW does not support JavaScript.""" start="00:22:53.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""And enforce preferred colorscheme in Firefox,""" start="00:22:56.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""since htmlize, as you have noticed,""" start="00:23:00.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""faithfully reflects the theme used in Emacs.""" start="00:23:02.840" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""emacs-web-server - emacs web framework""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Okay, so we know that yolo is unsafe""" start="00:23:07.940" video="mainVideo-web" id="subtitle"]] +[[!template text="""and needs to be refined.""" start="00:23:10.339" video="mainVideo-web" id="subtitle"]] +[[!template text="""In fact, we don't necessarily want""" start="00:23:11.540" video="mainVideo-web" id="subtitle"]] +[[!template text="""to run Emacs on a web browser.""" start="00:23:13.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""After all, a modern web browser is""" start="00:23:15.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""something one has to fight all the time""" start="00:23:17.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""and should be avoided whenever possible.""" start="00:23:19.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""We want to instead be able to access things""" start="00:23:21.601" video="mainVideo-web" id="subtitle"]] +[[!template text="""when forced to be in a web browser,""" start="00:23:24.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""in which case only the motivations""" start="00:23:26.460" video="mainVideo-web" id="subtitle"]] +[[!template text="""of an alternative frontend apply.""" start="00:23:28.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""Moreover, the ideal situation is an Emacs web framework,""" start="00:23:31.300" video="mainVideo-web" id="subtitle"]] +[[!template text="""a tool that automatically""" start="00:23:35.460" video="mainVideo-web" id="subtitle"]] +[[!template text="""transforms Emacs packages to web apps,""" start="00:23:36.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""so that one does not need to write extra code""" start="00:23:39.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""to get a web app that does the same thing as the package.""" start="00:23:41.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""We also need all links in the web pages to work.""" start="00:23:45.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""As noted before, the links on the yolo Emacs splash screen""" start="00:23:49.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""do not work.""" start="00:23:52.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""So here's a proof-of-concept example. It's called bom.el.""" start="00:23:53.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""It gets some weather forecast data""" start="00:23:58.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""from the Australian Bureau of Meteorology""" start="00:24:00.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""and displays it in an org buffer.""" start="00:24:03.080" video="mainVideo-web" id="subtitle"]] +[[!template text="""So let's try it out. One could do `M-x bom`,""" start="00:24:05.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""which shows an org buffer with links to each state.""" start="00:24:09.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""So based in Melbourne, naturally,""" start="00:24:15.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""I would like to find out the weather of Victoria.""" start="00:24:17.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""And yes, to execute this command. Wait, wait, wait. Right.""" start="00:24:21.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""And we are at a buffer that shows""" start="00:24:27.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""the weather forecast of the whole of Victoria""" start="00:24:33.460" video="mainVideo-web" id="subtitle"]] +[[!template text="""in the hierarchy. Note that this back button""" start="00:24:36.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""takes you to the previous page.""" start="00:24:39.479" video="mainVideo-web" id="subtitle"]] +[[!template text="""So here are the regions of Victoria.""" start="00:24:46.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""I think Melbourne is in Central.""" start="00:24:47.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""And yeah, it shows""" start="00:24:53.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""the seven-day weather forecast of Melbourne.""" start="00:24:54.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""You can also reach this page by running,""" start="00:24:57.260" video="mainVideo-web" id="subtitle"]] +[[!template text="""let's see, directly `M-x bom-state`.""" start="00:25:00.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""Vic.""" start="00:25:08.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""OK. So this works.""" start="00:25:13.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""And this is bom as an Emacs package.""" start="00:25:18.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""Now let's check out bom as a web app""" start="00:25:21.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""transformed by Emacs web framework.""" start="00:25:23.981" video="mainVideo-web" id="subtitle"]] +[[!template text="""So start the web server with bom-start.""" start="00:25:28.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""And let's try it out. It's at 9000 again.""" start="00:25:33.020" video="mainVideo-web" id="subtitle"]] +[[!template text="""Oops. Invalid path. Oh, that's because""" start="00:25:39.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""it makes exactly one command to one path.""" start="00:25:42.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""So remember that we used the bom command""" start="00:25:46.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""to show the landing page.""" start="00:25:49.301" video="mainVideo-web" id="subtitle"]] +[[!template text="""So here we need the bom in the path as well.""" start="00:25:50.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it shows the same landing page, except in HTML.""" start="00:25:54.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""Let's check out Victoria weather forecast as before.""" start="00:26:00.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""And it shows an HTML converted from the org buffer""" start="00:26:07.260" video="mainVideo-web" id="subtitle"]] +[[!template text="""using ox export HTML, whatever.""" start="00:26:12.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""And you can see even the back button is here.""" start="00:26:17.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""That takes you to /bom.""" start="00:26:20.359" video="mainVideo-web" id="subtitle"]] +[[!template text="""So let's have a look at Melbourne. Here it is.""" start="00:26:26.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""Hooray, it works.""" start="00:26:29.140" video="mainVideo-web" id="subtitle"]] +[[!template text="""So, yeah, as usual,""" start="00:26:31.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""you can stop the web server with `M-x bom-stop`.""" start="00:26:33.960" video="mainVideo-web" id="subtitle"]] +[[!template text="""Right. And alternatively,""" start="00:26:40.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""it can also be deployed directly in terminal""" start="00:26:43.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""in a dedicated Emacs daemon.""" start="00:26:48.500" video="mainVideo-web" id="subtitle"]] +[[!template text="""So you can see that there's a one-one correspondence""" start="00:26:56.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""between the Emacs package interface and the web interface.""" start="00:26:58.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""And that implies some restrictions to the Emacs package""" start="00:27:03.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""for the Emacs web framework to be able to do its job. Right.""" start="00:27:06.040" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, the package needs to have an Org interface""" start="00:27:09.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""and the links that trigger other commands""" start="00:27:13.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""need to be in Elisp links""" start="00:27:15.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""so that the Emacs web framework""" start="00:27:17.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""can translate it to web server URL path.""" start="00:27:20.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""Note that Emacs web server framework is not a real package.""" start="00:27:24.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""I wrote some functions in bom.el serving the purpose,""" start="00:27:28.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""and they should be separated out eventually""" start="00:27:33.340" video="mainVideo-web" id="subtitle"]] +[[!template text="""without much trouble.""" start="00:27:35.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""One could get weather forecast""" start="00:27:37.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""without running JavaScript anyway,""" start="00:27:40.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""which makes bom.el less important""" start="00:27:42.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""as an alternative web client.""" start="00:27:45.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""Though it does provide, dare I say,""" start="00:27:48.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""a clean and minimal interface""" start="00:27:50.520" video="mainVideo-web" id="subtitle"]] +[[!template text="""compared to common weather forecast web pages.""" start="00:27:52.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""Other more relevant use cases could be Mastodon,""" start="00:27:55.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""whose official web client requires JavaScript""" start="00:27:58.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""to display a post.""" start="00:28:01.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""The mastorg package that shows an Org hierarchy of toots""" start="00:28:03.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""rooted as a given toot could be a low-hanging fruit.""" start="00:28:08.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""The limitation of Org interface requirements""" start="00:28:12.179" video="mainVideo-web" id="subtitle"]] +[[!template text="""can also be relaxed in further work,""" start="00:28:15.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""if one could extend Emacs web framework""" start="00:28:17.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""to translate back and forth between Emacs widgets,""" start="00:28:21.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""say, including buttons and web page widgets,""" start="00:28:24.200" video="mainVideo-web" id="subtitle"]] +[[!template text="""including links.""" start="00:28:28.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""Another more far-fetched idea would be""" start="00:28:30.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""to translate to other types of interfaces,""" start="00:28:32.600" video="mainVideo-web" id="subtitle"]] +[[!template text="""like GNU/Linux or Android GUI.""" start="00:28:35.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""How about animations? Say, M-x butterfly,""" start="00:28:44.020" video="mainVideo-web" id="subtitle"]] +[[!template text="""or even web games from Emacs games?""" start="00:28:47.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""Possibilities are unlimited in this, as always, in Emacs.""" start="00:28:54.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""I also noticed some limitations""" start="00:29:00.100" video="mainVideo-web" id="subtitle"]] +[[!template text="""when trying to actually host bom.el on the public web.""" start="00:29:03.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""Given the limited access to the Emacs server,""" start="00:29:07.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""I was comfortable enough to give bom.el a go""" start="00:29:13.540" video="mainVideo-web" id="subtitle"]] +[[!template text="""to serve it on the public web.""" start="00:29:16.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""However, I immediately stopped""" start="00:29:18.800" video="mainVideo-web" id="subtitle"]] +[[!template text="""after noticing how slow it is.""" start="00:29:20.560" video="mainVideo-web" id="subtitle"]] +[[!template text="""It can take more than 30 seconds""" start="00:29:22.880" video="mainVideo-web" id="subtitle"]] +[[!template text="""to load a page of weather forecast for a state.""" start="00:29:24.720" video="mainVideo-web" id="subtitle"]] +[[!template text="""I am also not sure how many simultaneous connections""" start="00:29:27.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""it can handle.""" start="00:29:31.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""In any case, I think the package emacs-web-server""" start="00:29:32.380" video="mainVideo-web" id="subtitle"]] +[[!template text="""could do with some performance enhancement.""" start="00:29:36.440" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Firefox with emacs for extensions""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]] + +[[!template text="""Right. Because of the time constraints,""" start="00:29:40.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""I will briefly touch one final idea,""" start="00:29:44.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""which is to use Emacs as a Firefox browser extension.""" start="00:29:45.760" video="mainVideo-web" id="subtitle"]] +[[!template text="""We already have org-protocol,""" start="00:29:50.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""which allows Firefox to communicate""" start="00:29:52.900" video="mainVideo-web" id="subtitle"]] +[[!template text="""with a running Emacs server""" start="00:29:54.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""by sending an org-protocol URL to the latter.""" start="00:29:55.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""It can be used not just for capturing or storing links,""" start="00:29:59.780" video="mainVideo-web" id="subtitle"]] +[[!template text="""but to execute arbitrary code on any component of the URL.""" start="00:30:03.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""However, it is fire and forget,""" start="00:30:10.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""and Emacs cannot tell Firefox what to do.""" start="00:30:11.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""There may be a length restriction, too.""" start="00:30:16.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""For example, Firefox may not be able to send back""" start="00:30:17.920" video="mainVideo-web" id="subtitle"]] +[[!template text="""the whole DOM.""" start="00:30:20.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""This claim needs to be verified, though.""" start="00:30:22.420" video="mainVideo-web" id="subtitle"]] +[[!template text="""Native messaging is one solution to this problem.""" start="00:30:26.220" video="mainVideo-web" id="subtitle"]] +[[!template text="""It is a two-way communication channel""" start="00:30:30.020" video="mainVideo-web" id="subtitle"]] +[[!template text="""between a Firefox web extension and a local system process""" start="00:30:31.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""started by the web extension.""" start="00:30:35.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""The process could be an Emacs server,""" start="00:30:37.840" video="mainVideo-web" id="subtitle"]] +[[!template text="""which would make Emacs effectively""" start="00:30:40.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""a Firefox web browser extension.""" start="00:30:42.400" video="mainVideo-web" id="subtitle"]] +[[!template text="""In this case, Elisp would be the main extension language,""" start="00:30:48.680" video="mainVideo-web" id="subtitle"]] +[[!template text="""rather than JavaScript.""" start="00:30:52.000" video="mainVideo-web" id="subtitle"]] +[[!template text="""However, JavaScript is still needed at the Firefox end""" start="00:30:53.620" video="mainVideo-web" id="subtitle"]] +[[!template text="""of the communication channel.""" start="00:30:56.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""As a simple example of this idea,""" start="00:30:59.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""Firefox could ask Emacs to redirect a URL""" start="00:31:01.160" video="mainVideo-web" id="subtitle"]] +[[!template text="""by removing tracking and using alternative frontend, etc.""" start="00:31:04.440" video="mainVideo-web" id="subtitle"]] +[[!template text="""However, I was not able to implement this""" start="00:31:08.320" video="mainVideo-web" id="subtitle"]] +[[!template text="""due to some tricky business""" start="00:31:12.480" video="mainVideo-web" id="subtitle"]] +[[!template text="""with enforcing synchronicity""" start="00:31:14.280" video="mainVideo-web" id="subtitle"]] +[[!template text="""that allows the web extension""" start="00:31:15.640" video="mainVideo-web" id="subtitle"]] +[[!template text="""to wait for responses from Emacs.""" start="00:31:17.120" video="mainVideo-web" id="subtitle"]] +[[!template text="""Some further work, I suppose.""" start="00:31:20.200" video="mainVideo-web" id="subtitle"]] + +[[!template new="1" text="""Thank you""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]] + +[[!template text="""That concludes my talk.""" start="00:31:25.360" video="mainVideo-web" id="subtitle"]] +[[!template text="""Thank you for your attention.""" start="00:31:28.254" video="mainVideo-web" id="subtitle"]] + + + +Captioner: ken + +<a name="web-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: 2 seconds. And I think we are live.""" start="00:00:04.740" video="qanda-web" id="subtitle"]] +[[!template text="""Hi Yuchen, how are you doing?""" start="00:00:05.980" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm gonna just walk off.""" start="00:00:08.720" video="qanda-web" id="subtitle"]] +[[!template text="""I'm not sure if I... Yeah,""" start="00:00:10.840" video="qanda-web" id="subtitle"]] +[[!template text="""I mean, brain not working well at this""" start="00:00:13.440" video="qanda-web" id="subtitle"]] +[[!template text="""moment. How about you?""" start="00:00:14.660" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Well, mine is about to get fried because""" start="00:00:18.420" video="qanda-web" id="subtitle"]] +[[!template text="""EmacsConf is a very taxing process and I can""" start="00:00:21.040" video="qanda-web" id="subtitle"]] +[[!template text="""tell you we could have a race to know who's""" start="00:00:24.599" video="qanda-web" id="subtitle"]] +[[!template text="""more more tired right now between you and""" start="00:00:26.720" video="qanda-web" id="subtitle"]] +[[!template text="""myself but I guess we'll find out at the end""" start="00:00:29.480" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: All right, sounds good.""" start="00:00:32.080" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: of the Q&A. And thank you for...""" start="00:00:34.200" video="qanda-web" id="subtitle"]] +[[!template text="""How late or how early I should say is it for""" start="00:00:37.760" video="qanda-web" id="subtitle"]] +[[!template text="""you right now? It should be like 6am or""" start="00:00:39.480" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Thanks. It's 7.45 but I normally get up at""" start="00:00:43.860" video="qanda-web" id="subtitle"]] +[[!template text="""like 8.30 or something.""" start="00:00:45.020" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: something? Right, okay.""" start="00:00:46.560" video="qanda-web" id="subtitle"]] +[[!template text="""Well, anyway, thank you for the sacrifice""" start="00:00:48.380" video="qanda-web" id="subtitle"]] +[[!template text="""just to answer some of the questions.""" start="00:00:50.200" video="qanda-web" id="subtitle"]] +[[!template text="""All right, so I'll be displaying the""" start="00:00:56.160" video="qanda-web" id="subtitle"]] +[[!template text="""questions. I'll be, let me just maximize this""" start="00:00:59.180" video="qanda-web" id="subtitle"]] +[[!template text="""on the stream so that people can read""" start="00:01:01.440" video="qanda-web" id="subtitle"]] +[[!template text="""everything on my screen.""" start="00:01:02.280" video="qanda-web" id="subtitle"]] +[[!template text="""So what I'm going to do,""" start="00:01:03.400" video="qanda-web" id="subtitle"]] +[[!template text="""Yuchen, as usual, I'm going to start reading""" start="00:01:05.340" video="qanda-web" id="subtitle"]] +[[!template text="""the questions on the pad.""" start="00:01:06.540" video="qanda-web" id="subtitle"]] +[[!template text="""I'm going to ask Sasha to open the Q&A.""" start="00:01:12.160" video="qanda-web" id="subtitle"]] +[[!template text="""Yes, it's already open.""" start="00:01:13.620" video="qanda-web" id="subtitle"]] +[[!template text="""Cool. So if you want to join us,""" start="00:01:15.280" video="qanda-web" id="subtitle"]] +[[!template text="""people, Feel free to click on the link on the""" start="00:01:19.360" video="qanda-web" id="subtitle"]] +[[!template text="""talk or on IRC to join us on BBB and to ask""" start="00:01:21.820" video="qanda-web" id="subtitle"]] +[[!template text="""your questions. Otherwise just leave them on""" start="00:01:23.440" video="qanda-web" id="subtitle"]] +[[!template text="""the pad. Alright, Yuchen,""" start="00:01:24.320" video="qanda-web" id="subtitle"]] +[[!template text="""starting with the first question.""" start="00:01:25.440" video="qanda-web" id="subtitle"]] +[[!template text="""I like the idea of using org-mode to display""" start="00:01:28.260" video="qanda-web" id="subtitle"]] +[[!template text="""data from the web. Are there many different""" start="00:01:30.300" video="qanda-web" id="subtitle"]] +[[!template text="""packages that do not, I assume.""" start="00:01:33.220" video="qanda-web" id="subtitle"]] +[[!template text="""I'm new to Emacs, so maybe this is obvious to""" start="00:01:35.560" video="qanda-web" id="subtitle"]] +[[!template text="""everyone else.""" start="00:01:36.040" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I think so. I mean...""" start="00:01:43.860" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Yeah, I think it's a little complicated to""" start="00:01:49.240" video="qanda-web" id="subtitle"]] +[[!template text="""specify what is it to display data from the""" start="00:01:51.480" video="qanda-web" id="subtitle"]] +[[!template text="""web. Just reading it like this,""" start="00:01:53.360" video="qanda-web" id="subtitle"]] +[[!template text="""I'm reminded of Adam, Arthur Pappa,""" start="00:01:55.900" video="qanda-web" id="subtitle"]] +[[!template text="""I mean, Code All Capture Web,""" start="00:01:58.260" video="qanda-web" id="subtitle"]] +[[!template text="""which technically captures the web and allows""" start="00:02:00.860" video="qanda-web" id="subtitle"]] +[[!template text="""you to embed it in the page,""" start="00:02:02.120" video="qanda-web" id="subtitle"]] +[[!template text="""but is it really displaying data from the""" start="00:02:04.280" video="qanda-web" id="subtitle"]] +[[!template text="""web? Are we implying live transmission?""" start="00:02:06.340" video="qanda-web" id="subtitle"]] +[[!template text="""Do you see what I'm talking about?""" start="00:02:07.720" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I suspect the question is asking,""" start="00:02:10.680" video="qanda-web" id="subtitle"]] +[[!template text="""like, having Emacs as a client that's sort of""" start="00:02:17.040" video="qanda-web" id="subtitle"]] +[[!template text="""getting data from the web and then displays""" start="00:02:19.740" video="qanda-web" id="subtitle"]] +[[!template text="""in Emacs, like using API or using web script.""" start="00:02:25.120" video="qanda-web" id="subtitle"]] +[[!template text="""So yeah, like the hreader package or a few""" start="00:02:35.220" video="qanda-web" id="subtitle"]] +[[!template text="""packages mentioned in my talk.""" start="00:02:37.580" video="qanda-web" id="subtitle"]] +[[!template text="""Yeah, that's a good question.""" start="00:02:39.920" video="qanda-web" id="subtitle"]] +[[!template text="""I mean, I really don't know how many.""" start="00:02:46.220" video="qanda-web" id="subtitle"]] +[[!template text="""So from my experience,""" start="00:02:48.060" video="qanda-web" id="subtitle"]] +[[!template text="""maybe I use like 10, less than 10 packages""" start="00:02:55.960" video="qanda-web" id="subtitle"]] +[[!template text="""that do these things. And among these""" start="00:03:01.220" video="qanda-web" id="subtitle"]] +[[!template text="""packages, maybe it's half of them are org,""" start="00:03:03.840" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: So you mean half of them are org-based?""" start="00:03:09.480" video="qanda-web" id="subtitle"]] +[[!template text="""Is that what you said?""" start="00:03:10.840" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: half of them don't. Yeah,""" start="00:03:11.840" video="qanda-web" id="subtitle"]] +[[!template text="""but that's just based on the packages I use.""" start="00:03:16.920" video="qanda-web" id="subtitle"]] +[[!template text="""I haven't done a survey about this.""" start="00:03:22.440" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: I think it's okay, you don't need to have all""" start="00:03:25.520" video="qanda-web" id="subtitle"]] +[[!template text="""the answers. I mean, you already demonstrate""" start="00:03:26.880" video="qanda-web" id="subtitle"]] +[[!template text="""a lot of competence and you talk about all""" start="00:03:29.380" video="qanda-web" id="subtitle"]] +[[!template text="""the things you approach with your particular""" start="00:03:31.100" video="qanda-web" id="subtitle"]] +[[!template text="""setup, So you don't need to have all the""" start="00:03:33.040" video="qanda-web" id="subtitle"]] +[[!template text="""answers. Okay. All right,""" start="00:03:36.040" video="qanda-web" id="subtitle"]] +[[!template text="""moving on to the next question.""" start="00:03:37.160" video="qanda-web" id="subtitle"]] +[[!template text="""Have you tried EAF, i.e.""" start="00:03:39.340" video="qanda-web" id="subtitle"]] +[[!template text="""The Emacs application framework and its""" start="00:03:41.680" video="qanda-web" id="subtitle"]] +[[!template text="""browser? If yes, what is your opinion about""" start="00:03:43.940" video="qanda-web" id="subtitle"]] +[[!template text="""it?""" start="00:03:44.120" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Oh, I haven't tried it.""" start="00:03:47.520" video="qanda-web" id="subtitle"]] +[[!template text="""I try to remember why I haven't tried it.""" start="00:03:53.760" video="qanda-web" id="subtitle"]] +[[!template text="""It has a browser. I assume the browser""" start="00:04:03.520" video="qanda-web" id="subtitle"]] +[[!template text="""executes JavaScript by default.""" start="00:04:06.840" video="qanda-web" id="subtitle"]] +[[!template text="""I have to check. Emacs.daf""" start="00:04:12.320" video="qanda-web" id="subtitle"]] +[[!template text="""slash daf browser.""" start="00:04:15.820" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: It's also OK if you want to have a look later""" start="00:04:25.520" video="qanda-web" id="subtitle"]] +[[!template text="""and you know whenever you want to report to""" start="00:04:27.380" video="qanda-web" id="subtitle"]] +[[!template text="""the pad you know you write a little blurb""" start="00:04:28.940" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah sure yeah so yeah I know about EAF but I""" start="00:04:34.700" video="qanda-web" id="subtitle"]] +[[!template text="""haven't tried it.""" start="00:04:35.460" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: about it. Okay well that's already an answer""" start="00:04:38.060" video="qanda-web" id="subtitle"]] +[[!template text="""that's cool. We're gonna move on to a""" start="00:04:41.400" video="qanda-web" id="subtitle"]] +[[!template text="""question that is a little bit off topic,""" start="00:04:42.720" video="qanda-web" id="subtitle"]] +[[!template text="""but I've also been interested about your""" start="00:04:44.700" video="qanda-web" id="subtitle"]] +[[!template text="""nickname on IRC. This is not really relevant""" start="00:04:47.420" video="qanda-web" id="subtitle"]] +[[!template text="""to the talk, quoting the question,""" start="00:04:48.900" video="qanda-web" id="subtitle"]] +[[!template text="""but I'm curious about your nickname.""" start="00:04:50.400" video="qanda-web" id="subtitle"]] +[[!template text="""You have some connection to Norway.""" start="00:04:52.020" video="qanda-web" id="subtitle"]] +[[!template text="""Your nick indicates an interest in the""" start="00:04:54.480" video="qanda-web" id="subtitle"]] +[[!template text="""architectural style inspired by the""" start="00:04:56.040" video="qanda-web" id="subtitle"]] +[[!template text="""decoration on Viking ships that was popular""" start="00:04:58.280" video="qanda-web" id="subtitle"]] +[[!template text="""in the early 20th century because""" start="00:05:00.460" video="qanda-web" id="subtitle"]] +[[!template text="""Dragonsteel, I assume in Norwegian,""" start="00:05:01.880" video="qanda-web" id="subtitle"]] +[[!template text="""is Dragon style. Are you familiar with this?""" start="00:05:04.860" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, it's just my favorite architecture""" start="00:05:10.760" video="qanda-web" id="subtitle"]] +[[!template text="""style, I think. I mean,""" start="00:05:15.560" video="qanda-web" id="subtitle"]] +[[!template text="""I lived in Sweden for like 2,""" start="00:05:19.040" video="qanda-web" id="subtitle"]] +[[!template text="""1 half years and yeah I went to Norway once""" start="00:05:25.900" video="qanda-web" id="subtitle"]] +[[!template text="""and I saw like this church in Lofoten Island,""" start="00:05:32.520" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 0]: was amazing. In Luton Island,""" start="00:05:36.766" video="qanda-web" id="subtitle"]] +[[!template text="""on Luton Island. Right.""" start="00:05:36.820" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: on Lofoten Island. Yeah it Yeah,""" start="00:05:36.833" video="qanda-web" id="subtitle"]] +[[!template text="""it was amazing. So, yeah,""" start="00:05:40.280" video="qanda-web" id="subtitle"]] +[[!template text="""that's exactly why I chose that as my""" start="00:05:43.780" video="qanda-web" id="subtitle"]] +[[!template text="""nickname, because it's my favorite""" start="00:05:46.520" video="qanda-web" id="subtitle"]] +[[!template text="""architecture style.""" start="00:05:47.540" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Okay, well, that was a very astute remark by""" start="00:05:51.940" video="qanda-web" id="subtitle"]] +[[!template text="""the viewers, so I hope you feel validated in""" start="00:05:54.760" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 0]: assumptions. Moving on""" start="00:05:58.480" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: your to another question.""" start="00:05:58.980" video="qanda-web" id="subtitle"]] +[[!template text="""Yuchen, do you have any thoughts about Nixed,""" start="00:06:01.960" video="qanda-web" id="subtitle"]] +[[!template text="""about its name, its approach,""" start="00:06:03.880" video="qanda-web" id="subtitle"]] +[[!template text="""its relevance? About Nixed,""" start="00:06:08.560" video="qanda-web" id="subtitle"]] +[[!template text="""the browser, N-Y-X-T. Oh,""" start="00:06:11.500" video="qanda-web" id="subtitle"]] +[[!template text="""Nixed.""" start="00:06:11.720" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: About what? Yeah, I have tried it.""" start="00:06:17.220" video="qanda-web" id="subtitle"]] +[[!template text="""Well, I mean, it's not Emacs.""" start="00:06:21.360" video="qanda-web" id="subtitle"]] +[[!template text="""It's kind of similar. I think it tries to do""" start="00:06:26.140" video="qanda-web" id="subtitle"]] +[[!template text="""something similar to Emacs,""" start="00:06:27.440" video="qanda-web" id="subtitle"]] +[[!template text="""but The problem with Nix is that very early""" start="00:06:33.860" video="qanda-web" id="subtitle"]] +[[!template text="""on I encountered an issue with keybinding.""" start="00:06:37.180" video="qanda-web" id="subtitle"]] +[[!template text="""So the first thing I want to do is to make""" start="00:06:43.040" video="qanda-web" id="subtitle"]] +[[!template text="""all its keybindings emax-y.""" start="00:06:44.300" video="qanda-web" id="subtitle"]] +[[!template text="""So that's obviously...""" start="00:06:46.920" video="qanda-web" id="subtitle"]] +[[!template text="""So what was the problem?""" start="00:06:51.200" video="qanda-web" id="subtitle"]] +[[!template text="""So yeah, I couldn't even do that.""" start="00:06:53.040" video="qanda-web" id="subtitle"]] +[[!template text="""I thought, I was expecting that it could...""" start="00:06:56.120" video="qanda-web" id="subtitle"]] +[[!template text="""There shouldn't be any issues with setting up""" start="00:07:02.660" video="qanda-web" id="subtitle"]] +[[!template text="""whatever key binding you want.""" start="00:07:03.960" video="qanda-web" id="subtitle"]] +[[!template text="""So I, the, the issue was that when I tried to""" start="00:07:08.680" video="qanda-web" id="subtitle"]] +[[!template text="""do when I tried to bind Ctrl S Ctrl R to the""" start="00:07:15.400" video="qanda-web" id="subtitle"]] +[[!template text="""prompt going up and down,""" start="00:07:17.380" video="qanda-web" id="subtitle"]] +[[!template text="""so I use I was I complete and I'm used to""" start="00:07:22.900" video="qanda-web" id="subtitle"]] +[[!template text="""like the control S and control R to go,""" start="00:07:26.760" video="qanda-web" id="subtitle"]] +[[!template text="""to cycle through the selections.""" start="00:07:28.980" video="qanda-web" id="subtitle"]] +[[!template text="""And so I want it the same in next in its""" start="00:07:35.560" video="qanda-web" id="subtitle"]] +[[!template text="""prompt like when, for example,""" start="00:07:38.460" video="qanda-web" id="subtitle"]] +[[!template text="""typing a URL and get completion from history.""" start="00:07:43.620" video="qanda-web" id="subtitle"]] +[[!template text="""But it has a conflict with the...""" start="00:07:48.900" video="qanda-web" id="subtitle"]] +[[!template text="""And also, I try to bind the hint.""" start="00:07:55.680" video="qanda-web" id="subtitle"]] +[[!template text="""So when I want to follow a link,""" start="00:08:00.440" video="qanda-web" id="subtitle"]] +[[!template text="""So I press a hint key and then like all these""" start="00:08:05.800" video="qanda-web" id="subtitle"]] +[[!template text="""links are highlighted with like little""" start="00:08:10.120" video="qanda-web" id="subtitle"]] +[[!template text="""letters that I can like choose which 1 I want""" start="00:08:13.660" video="qanda-web" id="subtitle"]] +[[!template text="""which link I want to follow.""" start="00:08:14.820" video="qanda-web" id="subtitle"]] +[[!template text="""So I try to bind that 1 to J sort of like""" start="00:08:20.140" video="qanda-web" id="subtitle"]] +[[!template text="""Control C, Control J, or mode.""" start="00:08:23.560" video="qanda-web" id="subtitle"]] +[[!template text="""But apparently there's a conflict here.""" start="00:08:28.780" video="qanda-web" id="subtitle"]] +[[!template text="""So when I do both these prompt mode binding""" start="00:08:33.320" video="qanda-web" id="subtitle"]] +[[!template text="""and the document mode binding,""" start="00:08:36.260" video="qanda-web" id="subtitle"]] +[[!template text="""Yeah, the prompt no longer works.""" start="00:08:39.960" video="qanda-web" id="subtitle"]] +[[!template text="""And I reported the bug to Nixt.""" start="00:08:43.840" video="qanda-web" id="subtitle"]] +[[!template text="""And yeah, and there was response but there""" start="00:08:50.500" video="qanda-web" id="subtitle"]] +[[!template text="""are so many bugs there,""" start="00:08:52.580" video="qanda-web" id="subtitle"]] +[[!template text="""and I don't think that bug is very high""" start="00:08:55.640" video="qanda-web" id="subtitle"]] +[[!template text="""priority. So yeah, I basically stopped trying""" start="00:09:00.540" video="qanda-web" id="subtitle"]] +[[!template text="""that because key mining is very important to""" start="00:09:03.500" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Right, but, sorry, please finish.""" start="00:09:07.600" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: me. Yeah, so I mean, yeah,""" start="00:09:15.620" video="qanda-web" id="subtitle"]] +[[!template text="""without key bindings I can't like,""" start="00:09:17.320" video="qanda-web" id="subtitle"]] +[[!template text="""I won't. So, okay, I feel this is a very""" start="00:09:23.940" video="qanda-web" id="subtitle"]] +[[!template text="""basic functionality. I'm kind of reluctant to""" start="00:09:29.280" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Without key bindings, they are.""" start="00:09:31.220" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: continue trying what These are pieces.""" start="00:09:32.020" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: It reminds me of 2 points.""" start="00:09:34.200" video="qanda-web" id="subtitle"]] +[[!template text="""So yesterday with Stefan we were talking""" start="00:09:35.840" video="qanda-web" id="subtitle"]] +[[!template text="""about sane defaults and when he was sleeping""" start="00:09:37.540" video="qanda-web" id="subtitle"]] +[[!template text="""today we talked about it again with a""" start="00:09:39.440" video="qanda-web" id="subtitle"]] +[[!template text="""speaker. We did the mentor talk.""" start="00:09:41.400" video="qanda-web" id="subtitle"]] +[[!template text="""Feel free to re-watch it afterwards.""" start="00:09:43.020" video="qanda-web" id="subtitle"]] +[[!template text="""But it's funny how, you know,""" start="00:09:48.320" video="qanda-web" id="subtitle"]] +[[!template text="""regardless of how big the package actually""" start="00:09:50.920" video="qanda-web" id="subtitle"]] +[[!template text="""is, they always provide some kind of sane""" start="00:09:54.520" video="qanda-web" id="subtitle"]] +[[!template text="""default and with Nixed,""" start="00:09:55.640" video="qanda-web" id="subtitle"]] +[[!template text="""obviously, it's built with a Vim mentality""" start="00:09:58.620" video="qanda-web" id="subtitle"]] +[[!template text="""and modality of key bindings.""" start="00:10:02.020" video="qanda-web" id="subtitle"]] +[[!template text="""And for us, we are more used to the Emacs way""" start="00:10:05.860" video="qanda-web" id="subtitle"]] +[[!template text="""of doing things. It's a complete blocker.""" start="00:10:08.040" video="qanda-web" id="subtitle"]] +[[!template text="""No matter how great the pieces of""" start="00:10:10.320" video="qanda-web" id="subtitle"]] +[[!template text="""functionality behind Nixed are,""" start="00:10:12.280" video="qanda-web" id="subtitle"]] +[[!template text="""just the fact that UX-wise we cannot get into""" start="00:10:15.060" video="qanda-web" id="subtitle"]] +[[!template text="""it or we cannot have it behave nicely with""" start="00:10:18.220" video="qanda-web" id="subtitle"]] +[[!template text="""what we do. It's a massive block that is""" start="00:10:20.280" video="qanda-web" id="subtitle"]] +[[!template text="""preventing appropriation of such tools.""" start="00:10:22.040" video="qanda-web" id="subtitle"]] +[[!template text="""So it might seem very basic to bounce a""" start="00:10:25.940" video="qanda-web" id="subtitle"]] +[[!template text="""package at the level of key bindings but""" start="00:10:28.300" video="qanda-web" id="subtitle"]] +[[!template text="""that's what we all do.""" start="00:10:29.620" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I totally agree.""" start="00:10:32.800" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Right, if I can just interrupt,""" start="00:10:36.180" video="qanda-web" id="subtitle"]] +[[!template text="""we have about 2 more minutes of questions and""" start="00:10:38.520" video="qanda-web" id="subtitle"]] +[[!template text="""I see people are writing more questions.""" start="00:10:40.940" video="qanda-web" id="subtitle"]] +[[!template text="""Did you want to add something,""" start="00:10:42.180" video="qanda-web" id="subtitle"]] +[[!template text="""Yucheng? On what we're saying?""" start="00:10:43.780" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: No, no, no, Let's continue.""" start="00:10:47.620" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: had plenty of time. Okay,""" start="00:10:51.340" video="qanda-web" id="subtitle"]] +[[!template text="""I'm going to ask you to be quick about this""" start="00:10:53.100" video="qanda-web" id="subtitle"]] +[[!template text="""1. I'm going to read the question,""" start="00:10:53.860" video="qanda-web" id="subtitle"]] +[[!template text="""which is slightly long,""" start="00:10:54.620" video="qanda-web" id="subtitle"]] +[[!template text="""and you're going to have about 30 seconds to""" start="00:10:56.320" video="qanda-web" id="subtitle"]] +[[!template text="""answer it. Do you feel capable of this?""" start="00:10:57.720" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: I thought we Yeah, let's try it.""" start="00:10:59.860" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Let's try it. At least try it.""" start="00:11:02.860" video="qanda-web" id="subtitle"]] +[[!template text="""Okay, so quoting, I find the JavaScript trap""" start="00:11:05.208" video="qanda-web" id="subtitle"]] +[[!template text="""almost impossible to avoid since I like to""" start="00:11:06.680" video="qanda-web" id="subtitle"]] +[[!template text="""buy used stuff online and use my online bank.""" start="00:11:10.360" video="qanda-web" id="subtitle"]] +[[!template text="""How do you deal with a JavaScript trap?""" start="00:11:13.140" video="qanda-web" id="subtitle"]] +[[!template text="""I use NoScript and compromise on a few things""" start="00:11:15.400" video="qanda-web" id="subtitle"]] +[[!template text="""I really feel I cannot live without.""" start="00:11:16.760" video="qanda-web" id="subtitle"]] +[[!template text="""EWW is nice for a lot of things,""" start="00:11:19.080" video="qanda-web" id="subtitle"]] +[[!template text="""especially with R for less noise,""" start="00:11:21.260" video="qanda-web" id="subtitle"]] +[[!template text="""but I need Firefox for those GS and trapped""" start="00:11:23.760" video="qanda-web" id="subtitle"]] +[[!template text="""pages. So do you have a quick answer to this?""" start="00:11:25.760" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I don't have a good answer,""" start="00:11:29.500" video="qanda-web" id="subtitle"]] +[[!template text="""but I have a quick answer.""" start="00:11:30.640" video="qanda-web" id="subtitle"]] +[[!template text="""So I use VPN and like a more,""" start="00:11:38.140" video="qanda-web" id="subtitle"]] +[[!template text="""what do you call it, move out the Swedish VPN""" start="00:11:41.680" video="qanda-web" id="subtitle"]] +[[!template text="""browser, move out browser.""" start="00:11:43.480" video="qanda-web" id="subtitle"]] +[[!template text="""Yeah, so I unfortunately I have to use""" start="00:11:48.960" video="qanda-web" id="subtitle"]] +[[!template text="""JavaScript in these cases as well,""" start="00:11:50.660" video="qanda-web" id="subtitle"]] +[[!template text="""but I try to minimize the use of these""" start="00:11:53.800" video="qanda-web" id="subtitle"]] +[[!template text="""things.""" start="00:11:54.020" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: How long do you think it will take for us to""" start="00:11:56.920" video="qanda-web" id="subtitle"]] +[[!template text="""save the world with Emacs,""" start="00:11:58.140" video="qanda-web" id="subtitle"]] +[[!template text="""or save the web at least?""" start="00:11:59.340" video="qanda-web" id="subtitle"]] +[[!template text="""5 years, 10 years, maybe a little less than""" start="00:12:01.360" video="qanda-web" id="subtitle"]] +[[!template text="""this?""" start="00:12:01.560" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Well I think it's, unfortunately it's""" start="00:12:06.600" video="qanda-web" id="subtitle"]] +[[!template text="""probably independent of Emacs,""" start="00:12:08.300" video="qanda-web" id="subtitle"]] +[[!template text="""like it will only be saved when,""" start="00:12:12.180" video="qanda-web" id="subtitle"]] +[[!template text="""like it's saved on like the normal,""" start="00:12:14.860" video="qanda-web" id="subtitle"]] +[[!template text="""the more popular browsers like Firefox.""" start="00:12:18.960" video="qanda-web" id="subtitle"]] +[[!template text="""I have no clue how long it will take for,""" start="00:12:23.680" video="qanda-web" id="subtitle"]] +[[!template text="""I don't know, for example,""" start="00:12:25.120" video="qanda-web" id="subtitle"]] +[[!template text="""Tala to pick up so that you can buy things""" start="00:12:28.660" video="qanda-web" id="subtitle"]] +[[!template text="""without running JavaScript.""" start="00:12:30.020" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Right. Well, I guess we'll have to cross our""" start="00:12:33.220" video="qanda-web" id="subtitle"]] +[[!template text="""fingers then for Firefox to save the world.""" start="00:12:35.380" video="qanda-web" id="subtitle"]] +[[!template text="""All right Yuchen, we're about out of time,""" start="00:12:37.260" video="qanda-web" id="subtitle"]] +[[!template text="""we're moving on to the next talk in 20""" start="00:12:38.800" video="qanda-web" id="subtitle"]] +[[!template text="""seconds. Thank you so much for your""" start="00:12:40.200" video="qanda-web" id="subtitle"]] +[[!template text="""presentation and for waking up early and""" start="00:12:41.940" video="qanda-web" id="subtitle"]] +[[!template text="""answering the question,""" start="00:12:42.540" video="qanda-web" id="subtitle"]] +[[!template text="""and I can tell you, you were very alert and""" start="00:12:44.820" video="qanda-web" id="subtitle"]] +[[!template text="""definitely more energetic than I was.""" start="00:12:47.020" video="qanda-web" id="subtitle"]] +[[!template text="""All right, see you later.""" start="00:12:52.600" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 1]: Thank you. See you.""" start="00:12:53.940" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 2]: Bye. And we go to the next talk right now.""" start="00:12:58.400" video="qanda-web" id="subtitle"]] +[[!template text="""[Speaker 0]: You are currently""" start="00:13:02.620" video="qanda-web" id="subtitle"]] +[[!template text="""you""" start="00:13:15.260" video="qanda-web" id="subtitle"]] + +Questions or comments? Please e-mail [id@ypei.org](mailto:id@ypei.org?subject=Comment%20for%20EmacsConf%202023%20web%3A%20Emacs%20saves%20the%20Web%20%28maybe%29) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/web-before.md b/2023/info/web-before.md new file mode 100644 index 00000000..ee6fcdab --- /dev/null +++ b/2023/info/web-before.md @@ -0,0 +1,32 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 32-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="web-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="web-mainVideo" data=""" +00:00.000 Overview +00:35.680 Background problems +05:31.940 Solutions outside of Emacs +09:46.480 Emacs solutions +09:54.600 Free clients in Emacs +12:43.021 Web browsers in Emacs +16:52.380 emacs-web-server - overview +17:30.380 emacs-web-server - hello emacs! +18:17.580 emacs-web-server - yolo +23:07.940 emacs-web-server - emacs web framework +29:40.420 Firefox with emacs for extensions +31:25.360 Thank you + +"""]]<div></div>Duration: 31:33 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li><li><a href="https://toobnix.org/w/fvzGU4cQQ2meZVKNGEHMht">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="web-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="web-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/web-nav.md b/2023/info/web-nav.md new file mode 100644 index 00000000..0afd6a12 --- /dev/null +++ b/2023/info/web-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a> +Next by track: <a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/info/windows-after.md b/2023/info/windows-after.md new file mode 100644 index 00000000..4d8d8729 --- /dev/null +++ b/2023/info/windows-after.md @@ -0,0 +1,1260 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="windows-mainVideo-transcript"></a> +# Transcript (unedited) + +[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and welcome to uh""" start="00:00:00.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Welcome to my talk i'm a little distracted here""" start="00:00:11.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I had a friend who came over and just brought me a whole bunch of peanut butter cups homemade peanut butter cups""" start="00:00:13.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Maybe i'll show those off. Uh""" start="00:00:20.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""later""" start="00:00:22.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, what okay here, uh, put it right there""" start="00:00:23.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All good stuff""" start="00:00:30.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so i'm going to uh get over to my planned uh stuff i'm sharing here""" start="00:00:33.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""hopefully""" start="00:00:41.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, and and we'll jump jump right in because i'm gonna need as much time as I can possibly have today""" start="00:00:42.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""thanks so much for uh joining me for emacs conference and for""" start="00:00:49.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""especially for""" start="00:00:54.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:00:56.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""all of you who who participated, you know in the discussions contributing talks and""" start="00:00:57.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, you know, uh, you know, including running the copy the the and it's just so much fun to be here, um""" start="00:01:03.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I guess while i'm standing here and and saying stuff that's that i'm gonna have to""" start="00:01:11.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""transcribe because I didn't uh prepare a""" start="00:01:16.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""recorded version""" start="00:01:20.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, I had a lot of trouble trimming this down so I can solve that problem by just talking a lot at the beginning""" start="00:01:22.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""about other stuff, um""" start="00:01:28.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So in addition to the thanks I just want to say thanks also to the""" start="00:01:33.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:01:37.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:01:43.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And and for all that i've learned from my previous conferences""" start="00:01:45.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It's just I can't stress enough what a great opportunity volunteering for""" start="00:01:48.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh free software related things are""" start="00:01:53.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh as a way to get involved people will just totally teach you how to be helpful and i'm loving it""" start="00:01:55.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Sasha can you please maximize?""" start="00:02:00.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Hold on""" start="00:02:02.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I can preview the stream, but it's not super easy right now""" start="00:02:14.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I got all my screens kind of dedicated to other stuff""" start="00:02:17.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so should I pause for a second before I get into the slides because there's""" start="00:02:20.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""There they'll be hard to see if i'm not full screen""" start="00:02:24.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yeah, yeah, okay, well i'll keep ad-libbing then because I just have a million, uh things I can say, um""" start="00:02:28.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, so, uh, let me just quickly talk, uh things that aren't in here. Um,""" start="00:02:37.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'm going to mention the mysis2.org and the that project which provides a port""" start="00:02:43.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""of the GNU""" start="00:02:51.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Of uh glibc and a lot of GNU""" start="00:02:53.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and other free software""" start="00:02:58.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, so""" start="00:03:01.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, I don't pushing a room to uh a dvd room to stefan""" start="00:03:03.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, so i'm gonna take mumble out of my uh, pardon me folks just gonna take mumble out of my speakers here""" start="00:03:12.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay""" start="00:03:19.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, in fact we'll take the speakers out of play entirely and i'll just switch to some headphones""" start="00:03:22.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, so""" start="00:03:33.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Gorman you're good to go""" start="00:03:35.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Perfect. What an amazing amount of time. All right. So thanks a lot. Uh today i've got a jam-packed talk""" start="00:03:36.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, i've i've done my best to make""" start="00:03:43.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To make this not too overwhelming, but overall we're going to try to try to actually build""" start="00:03:46.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um emacs while we're talking today and we might actually build several emacs""" start="00:03:52.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, so let's take a look at that real quick""" start="00:03:58.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so over here we have a screen where I am""" start="00:04:00.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Just once a minute looking. Uh""" start="00:04:05.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Indirectly at whether there have been any pushes, uh upstream to either the emacs 29 or emacs 30 branches""" start="00:04:09.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so i've""" start="00:04:17.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Arranged for us to sort of keep an eye on that""" start="00:04:19.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um while we talk and you know, maybe that's that's one thing that we'll do and then additionally we'll probably""" start="00:04:22.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Fire up a shell. This is the mysis 2 environment that I talked about before""" start="00:04:30.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And we'll probably create some directories and things""" start="00:04:36.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But before we get into all that let's let's give some some context. I've been doing my best to try to""" start="00:04:40.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, make sure all this information is on the emacs wiki as well""" start="00:04:47.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So, uh, sorry, as I said, I got a little caught off guard. So i'm moving my foot pedals""" start="00:04:51.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To the float back to the floor here""" start="00:04:56.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And I should be able to advance slides here. All right, so""" start="00:05:00.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:05:05.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I kind of provided some special definitions for things i'm going to kind of level set with those""" start="00:05:07.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the uh""" start="00:05:14.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um when I say a binary release i'm talking about some some i'm talking about emacs for windows as""" start="00:05:17.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Just ready to run out of its folder or in whatever similar form""" start="00:05:25.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The when I say a build i'm talking about kind of a process of doing that""" start="00:05:30.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um when emacs.get of course, that's the upstream hosted by gnu savannah""" start="00:05:36.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The emacs release is a tarball created from that the sources""" start="00:05:41.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""For um emacs are going to be one of those two things""" start="00:05:48.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um very specifically so i'm not going to talk about patches patching there's some implications there perhaps we'll get into it""" start="00:05:54.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:06:02.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So a snapshot is when I build from anything other than a release source""" start="00:06:03.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh a tarball""" start="00:06:09.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, just if I if I say that i'm talking specifically""" start="00:06:11.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""about the uh, the xz""" start="00:06:16.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Version of the file as as a technical point""" start="00:06:18.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so that may come up. All right, nothing else I think up my sleeve. Um""" start="00:06:22.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:06:29.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh as as a key data point it's worth understanding that there's a file called configure ac""" start="00:06:30.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It's going to be processed, uh as part of autoconf. We we initially access that when we run""" start="00:06:37.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um autogen as you'll see in a little bit""" start="00:06:44.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:06:48.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The but before but um, so the autogen script will generally consider this. Uh, so in a release build""" start="00:06:49.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, this has been thought about kind of for us as part of um making the tarball""" start="00:06:57.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um the configure dot a""" start="00:07:03.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""ac""" start="00:07:05.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:07:07.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yeah, I think I pretty much covered covered this so""" start="00:07:08.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um those those that kind of partially built status that's a might be another phrase that you hear me use""" start="00:07:12.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so this""" start="00:07:19.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Slide unpacks that a little more""" start="00:07:20.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:07:24.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So it can be a little confusing to understand what exactly?""" start="00:07:26.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the you know, what is it, you know, how stable is emacs depending on what I have so that I got a""" start="00:07:30.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It's kind of a set of rules of thumb here right first I want the highest, uh, you know dot""" start="00:07:36.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh dot release value that I can get assuming that that's higher than one""" start="00:07:43.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If it's if it were to only be one, let's say my choices were 29.1 and 30.1""" start="00:07:49.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I would take 30.1""" start="00:07:56.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:07:58.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""because that's that's weird, but um""" start="00:07:59.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""What you'll normally see is you might see a 28.2""" start="00:08:02.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You might see a 29.1""" start="00:08:06.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So here I think 28.2 has got the most most most stable""" start="00:08:08.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:08:15.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""set, uh the""" start="00:08:16.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, or set of release binaries""" start="00:08:18.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:08:21.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""29.1 will will have a little more features, but will tend to be more stable""" start="00:08:23.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""than""" start="00:08:28.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Any lower point releases for 29""" start="00:08:29.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, certainly than any release candidates for 29, which might even have new features""" start="00:08:32.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, but are mostly going to just be patches so they're going to become the most stable""" start="00:08:38.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""thing here""" start="00:08:43.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and especially if they they have a""" start="00:08:44.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know if this this is not""" start="00:08:48.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, if this were to be 29.2 release candidate one as well looking forward to seeing""" start="00:08:50.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:08:56.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:08:57.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""30.0.50""" start="00:09:00.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:09:02.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And and in between this this pre-test here, we're talking about kind of developer land. Um, so""" start="00:09:03.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, the expectation is that you know what you're doing that applies to windows users""" start="00:09:10.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh just as much if you are building anything in the snapshot range any of that is going to be in this""" start="00:09:14.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""30.0.50 currently that'll change when""" start="00:09:21.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:09:24.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""when the""" start="00:09:25.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""30 30 an emacs 30 release tags, uh, or release branches come""" start="00:09:27.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so""" start="00:09:34.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Let's talk about the local um, there's not much to know about what I have going on""" start="00:09:37.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""except that I have my my paths mess messed with so""" start="00:09:43.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, if if that that were to come up if you're wondering how why does this?""" start="00:09:48.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh in in sys command work that's that's probably the way place where you notice it""" start="00:09:52.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, I am using windows 10. I haven't tried windows 11""" start="00:09:58.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh as mentioned my sys2 is critical to all this""" start="00:10:02.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""There's one script in particular that will error out if you try to do anything other than use my sys's""" start="00:10:06.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""My sys's shell and in fact my sys owns""" start="00:10:11.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or provides three shells and of them that script is designed to work with a specific one of them as we'll come to""" start="00:10:14.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I don't talk about installing the dependencies, but just as as kind of some kind of help. Um,""" start="00:10:23.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You can search using this formula and install""" start="00:10:31.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Using this formula good luck with those, you know grep commands""" start="00:10:37.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And sys is the tool for building the self-installing self-extracting installer or uh executable self-installer""" start="00:10:43.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, the script for that is provided along with the emac source""" start="00:10:51.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, and i've provided a helpful link to the main page for the project download link on the left. It is not""" start="00:10:56.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It's kind of scare where the way that this link appears, but I have clicked it and it's working for me""" start="00:11:05.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Automation does uh, we'll we have some time we'll be looking at this at a minimum""" start="00:11:14.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I wanted to mention that what I do on my local what you're seeing in the crawler, I hope""" start="00:11:19.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh represents a""" start="00:11:25.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:11:27.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""A simple sleep loop, uh, and we'll we'll look into that if we have time""" start="00:11:30.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:11:36.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um where i've got where I where I kind of self-host""" start="00:11:44.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""some uh snapshots""" start="00:11:48.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""more stuff than I feel comfortable uploading to""" start="00:11:50.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, to gnu""" start="00:11:54.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The um""" start="00:11:57.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know, I never said, uh, my name is corwin bruce for the last couple of years i've been the volunteer making""" start="00:12:01.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh making the snapshots the quote-unquote official binaries, uh for windows of the""" start="00:12:08.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:12:15.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Of of emacs for windows. So that's that's all the different versions. Uh help is always welcome with that""" start="00:12:17.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'd be very happy to teach you in more depth. This video is""" start="00:12:23.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:12:27.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""This is the one thing I think I can do""" start="00:12:33.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, hey, that's real relatable""" start="00:12:35.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, um, so I haven't tried uh, the I haven't tried a lot of fun things that I won't talk about""" start="00:12:39.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, the uh, the rest of this talk is going to get into the nitty-gritty as I said, um""" start="00:12:46.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If we can't convince emacs to start building over on that screen, we'll be opening it up here on the center stage""" start="00:12:52.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:12:59.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, this begins and there's there's there's there's great insight here too on the wiki, uh""" start="00:13:01.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""With picking an ftp source for any official release""" start="00:13:08.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That is for a stable product. Please visit""" start="00:13:12.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um ftp.gnu.org""" start="00:13:16.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Otherwise, you'll want to switch that ftp dot at the beginning to alpha dot and take a pre-test""" start="00:13:19.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, or any snapshot or otherwise then they're not published there""" start="00:13:25.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The uh next""" start="00:13:30.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, you know""" start="00:13:32.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:13:34.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, i'm glancing out of the the right side of my face at the""" start="00:13:41.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Chat on the optance anybody in there wants to direct me at a particular""" start="00:13:48.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, we can make some other we can build something""" start="00:13:53.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Else if you want to see a snapshot build more mention that um the examples that you're going to see here""" start="00:13:56.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That I will without other direction cut and paste""" start="00:14:03.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:14:07.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Are all based on a release bill""" start="00:14:09.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:14:12.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, and so, uh, we'll use the uh, I mentioned that there are several shells provided by mysis2""" start="00:14:14.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To the min-gw64""" start="00:14:22.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Shell is the one that we mostly need""" start="00:14:25.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, I tested all of this as well with the min-gw32 shell""" start="00:14:28.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:14:34.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So that that should work and and see mix binaries that that work for me""" start="00:14:35.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh""" start="00:14:44.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I as I mentioned, I don't get into the details of installing all your prerequisites""" start="00:14:46.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I found that doing it in a headfirst manner wasn't uh,""" start="00:14:50.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Wasn't difficult and I also found that there's a number of tutorials. I didn't want to pick one to link here""" start="00:14:54.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um there uh""" start="00:15:03.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Here are uh, okay, so""" start="00:15:06.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Our general formula for building emacs irrespective of windows""" start="00:15:10.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""looks like""" start="00:15:15.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Does the configure script exist if not run autogen?""" start="00:15:16.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""from a windows build standpoint""" start="00:15:21.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""This is if i'm not running a release that release build call the autogen script""" start="00:15:23.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Right and this would be in the directory where we want to pack this i'll demonstrate""" start="00:15:31.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""within""" start="00:15:35.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""three minutes if uh""" start="00:15:37.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If one if nobody's pushed upstream to emacs""" start="00:15:39.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:15:42.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so, uh the configure, uh, and""" start="00:15:44.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""configure options""" start="00:15:48.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""are uh""" start="00:15:50.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh the configure, you know if the configure sorry if the configure script exists then""" start="00:15:53.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh doesn't doesn't exist. So the only reason so in my process I will always execute that step because I clean everything""" start="00:15:58.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""after every build, um in all my contexts""" start="00:16:06.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, however, if you were you know had a""" start="00:16:10.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Checkout of emacs dot get and you are building it at several releases""" start="00:16:14.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Then maybe you've got a configure script and then you'll want to know""" start="00:16:19.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um the you know""" start="00:16:22.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Whether you have to bootstrap and the typical complexities, but otherwise you might be able to skip that in in the abstract""" start="00:16:24.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:16:32.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Is that right or is it is""" start="00:16:36.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Make uh, so and if the make file doesn't exist make install. I know i'm""" start="00:16:38.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Looking at that and i'm questioning whether it's correct. Sorry about that""" start="00:16:43.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um in any case, uh, so autogen configure make install is our recipe autogen""" start="00:16:48.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Creates the configure script configure creates the make file the make file""" start="00:16:55.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um in the case of windows, I almost always want the install""" start="00:17:00.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh and to specify some location where the installed emacs will land this is""" start="00:17:04.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""where""" start="00:17:10.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""all of the recipes for packaging emacs""" start="00:17:11.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""go""" start="00:17:14.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and if I were""" start="00:17:15.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know using this as a movie to upgrade I personally would do that by""" start="00:17:18.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""by specifying an install path quote unquote on top of""" start="00:17:23.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh a main installation. I don't do that. I update shortcuts manually based on what specifically I want to try""" start="00:17:27.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh in an effort to to to notice, uh interesting patches and confirm they work on windows""" start="00:17:34.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Which mostly they do there's not a lot of code in my experience that is""" start="00:17:41.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Windows specific and very very little around the build process""" start="00:17:46.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right""" start="00:17:50.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Huge rabbit hole zone and I still have a minute before I have to kick off the first part of our demo""" start="00:17:51.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:18:00.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Let's let's keep keep diving in""" start="00:18:01.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:18:04.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The those specific part windows specific parts beside the dot exe extension that we're going to find slammed onto all of our familiar""" start="00:18:05.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh executables. We're also going to have emacs client w""" start="00:18:14.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Which is a wrapper that hides?""" start="00:18:18.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um how hard it is to get""" start="00:18:22.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh to take it""" start="00:18:25.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""How bad the abstraction is between the window management layer and the gooey?""" start="00:18:27.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And then all the different parts on windows essentially it wants to create a shell window if we just double click emacs.exe""" start="00:18:32.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So emacs client w""" start="00:18:39.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh and run emacs are going to solve that problem""" start="00:18:41.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:18:45.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Wrapping emacs and emacs client respectively""" start="00:18:46.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And""" start="00:18:51.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Just uh""" start="00:18:53.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:18:56.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And what you're not seeing is off stage. I am""" start="00:19:02.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Killing that so we don't get builds in parallel""" start="00:19:07.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:19:11.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So, um""" start="00:19:15.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So at this point i'm going to open up a shell and i'm going to start talking just a little bit about""" start="00:19:17.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""My local build environment, which we haven't gotten into in fact just to make that even easier""" start="00:19:22.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""let's um""" start="00:19:28.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Let's just take a look at it a little bit probably the easiest spot""" start="00:19:31.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Is""" start="00:19:37.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Here""" start="00:19:40.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, so here we have the familiar windows my computer interface""" start="00:19:47.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I have the g drive and the h drive""" start="00:19:52.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""four terabyte drives""" start="00:19:56.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um dedicated to""" start="00:20:00.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""my""" start="00:20:02.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, really overblown emacs build process""" start="00:20:03.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, this just lets me be super lazy. There's no reason you need any massive amount of storage to do any of this""" start="00:20:08.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um inside here and now i'll actually switch you back to the other screen""" start="00:20:15.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:20:21.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We'll we'll find""" start="00:20:24.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oops""" start="00:20:35.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Sorry about that""" start="00:20:38.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It didn't take the time to label that one""" start="00:20:40.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Label that one""" start="00:20:42.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so here you can see the primary output that""" start="00:20:44.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That i'm looking at through this automated process""" start="00:20:49.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I come along I look at the bug reports or maybe i'm just restarting my computer and choosing what emacs""" start="00:20:52.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""version at random and then in that case, I look at this modified date and I say""" start="00:20:58.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um my config that I""" start="00:21:03.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know that i'm playing with right now is all set for emacs 30""" start="00:21:05.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or i'm testing them both and i'm relaunching both of these right""" start="00:21:09.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So for me that starts by diving into the install folder going into the bin folder""" start="00:21:13.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Which looks exactly the way my automation leaves it. I then come in to run the run emacs""" start="00:21:18.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And I create a shortcut""" start="00:21:25.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:21:27.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To it""" start="00:21:29.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:21:30.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'm a keyboard person. So that's usually done like this""" start="00:21:31.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And then I just know that the context menu is going to come up in the right place so i'll come up and""" start="00:21:36.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:21:42.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Possibly change the change the shortcut, right?""" start="00:21:44.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If I don't mess with it""" start="00:21:53.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:21:56.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:21:57.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""With these which varies week to week""" start="00:22:03.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so restarting my emacs, uh involves doing the same thing going to my desktop""" start="00:22:07.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And where you'll find a number of emac shortcuts""" start="00:22:12.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and""" start="00:22:17.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um updating the shortcut in the same manner""" start="00:22:20.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Actually, maybe we'll just let's go back there and just show it. So if we look at for example my erc""" start="00:22:23.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You can see it's going to be pointing at one of these""" start="00:22:33.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""clones, and then it's gonna""" start="00:22:37.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Maybe tell me that I want it wants to be full screen. No, not currently and then it might uh,""" start="00:22:39.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:22:45.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So""" start="00:22:53.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:23:00.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So, um, all right, so that's that's probably enough on the local system. Let's get back to""" start="00:23:08.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:23:15.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and recreate the structure that""" start="00:23:22.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""both""" start="00:23:25.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""My process sort of assumes and the scripts you'll find in the admin nt""" start="00:23:27.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh build disk folder in source""" start="00:23:34.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Used to assume those scripts are in need of some love and in just a little bit i'll be mentioning a build""" start="00:23:38.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:23:45.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""a uh""" start="00:23:46.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""A a particular bug that you might want to pay attention to if you're interested in making a self installer""" start="00:23:47.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""all right, so""" start="00:23:54.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:23:57.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We're going to create""" start="00:23:58.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh an emacs build directory""" start="00:24:01.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And we've got a handy git clone stage git clone command stage for ourself that would work""" start="00:24:08.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:24:16.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Do not currently see anybody lobbying for that. So instead we will run the rather faster""" start="00:24:19.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh w get command""" start="00:24:28.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""On savannah, which is not pasted in here. Nice. Let's see if I can freehand it not gonna do it""" start="00:24:30.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:24:37.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:24:45.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Beg your pardon i'm grabbing a url from the internet""" start="00:24:51.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, okay. Yeah, I can't I can't honestly I can't freehand it whatever""" start="00:25:00.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Sorry, I uh""" start="00:25:06.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I didn't have that bookmarked and all handy like I thought I did""" start="00:25:07.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so we'll just say ftp.gnu""" start="00:25:12.060" video="mainVideo-windows" id="subtitle"]] +[[!template text=""".org""" start="00:25:15.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, what is it pub emacs emacs-29.1""" start="00:25:17.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh""" start="00:25:26.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Hmm""" start="00:25:34.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I""" start="00:25:36.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Didn't""" start="00:25:40.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Really think i'd have this command sitting around it makes me want to scrap the whole demo i'm not gonna lie""" start="00:25:43.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, how am I doing your time?""" start="00:25:48.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, I think at least 15 minutes. Um, but in the command that you were freehanding should the pub be gnu instead""" start="00:25:51.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh, thanks""" start="00:25:59.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'm, sorry""" start="00:26:01.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""There we go, thank you. All right, and then we'll""" start="00:26:07.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And i'm not sure I provided commands for this either""" start="00:26:17.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But it is trivially easy to do and while that happens we'll get to move on a few slides""" start="00:26:22.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:26:29.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The configure script i'm not talking about in a lot of detail""" start="00:26:31.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But I do want to mention that the gnu binaries are provided with native""" start="00:26:35.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh compilation enabled that's the feature that uses gcc""" start="00:26:41.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""lib gcc get on windows if available that looks gcc get will be used""" start="00:26:46.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, but when but if if emacs has that feature then it will take by compile""" start="00:26:53.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""native code and""" start="00:27:01.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""asynchronously""" start="00:27:04.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Compile that as needed""" start="00:27:05.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh with the ahead of time feature""" start="00:27:07.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We're going to do as much of that ahead of time and for folks that are consuming the windows binary""" start="00:27:09.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The thinking goes that they might not have mysys too. They might not have""" start="00:27:14.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Gcc jet they might be""" start="00:27:19.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Happy that they're enabled""" start="00:27:22.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""In a you know a lot of time run emacs on their local environments""" start="00:27:24.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""At all""" start="00:27:30.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know in a maybe a lockdown at a corporate context""" start="00:27:31.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:27:35.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""aside""" start="00:27:36.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""that""" start="00:27:37.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""There's your first glimpse at the configure""" start="00:27:38.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Program that we're going to run in a moment. In fact, i'm going to go as far as""" start="00:27:42.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Putting it on the clipboard""" start="00:27:47.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:27:49.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Really just looking at this the aot flag""" start="00:27:50.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It's the one i'd call attention to but it's worth understanding that windows doesn't provide a dbus capability""" start="00:27:53.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So windows native program isn't gonna be able to depend on dbus. We're gonna""" start="00:27:58.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We're gonna explicitly ask that that be left out. I think that's actually optional. It's documentation""" start="00:28:03.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I think the configure program is smart enough to know that we don't want dbus""" start="00:28:09.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""on windows""" start="00:28:13.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, otherwise we tend to compile with things. Um, there there's missing documentation. We could say the uh,""" start="00:28:15.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""all of the libraries are treated in the way I mentioned in that""" start="00:28:23.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Jpeg support will be available as long as""" start="00:28:27.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Jpeg is is available in our environment and configure script certainly notices that""" start="00:28:32.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, the new provided binaries are provided with minus o2 and that's also my default personally on windows. Um,""" start="00:28:37.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""However, and i'm going to skip this since I mentioned it""" start="00:28:45.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um mentioned""" start="00:28:49.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, and uh""" start="00:28:51.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:28:54.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So I guess i'll say um, you can um say with""" start="00:28:56.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:29:01.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:29:02.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Compilation for whatever reason if you have load juices you get it, but don't want emacs to use it""" start="00:29:08.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, especially as that default looks like it could be changing with emacs 30""" start="00:29:14.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:29:19.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the uh""" start="00:29:20.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the debug configuration, um, this is this is the uh, kind of""" start="00:29:22.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, what what i'm currently using this on commentary. Uh, i've seen on the emacs development list""" start="00:29:27.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:29:34.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, let's check on our checkout and see if we can't get a build running""" start="00:29:40.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, this is a release build so I won't be starting with""" start="00:29:44.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, so we'll start by hopping into its directory""" start="00:29:49.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And we um we have""" start="00:29:53.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh""" start="00:29:59.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But not""" start="00:30:05.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so that tells us we're gonna run""" start="00:30:11.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Our configure program""" start="00:30:15.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But we don't need to run uh config ic""" start="00:30:18.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So""" start="00:30:23.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So let's get that going and""" start="00:30:31.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:30:34.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Hopefully that's showing through just enough to be fun not too much to be distracting""" start="00:30:36.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um the uh the unoptimized""" start="00:30:46.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, please report issues if your emacs is crashing, uh to the emacs development list not to me personally""" start="00:30:52.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, although you are of course welcome to copy me""" start="00:30:59.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, if you especially i'm subscribed to that list so I get all the mail so I don't mind being copied""" start="00:31:02.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, and""" start="00:31:09.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""as well""" start="00:31:11.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""if you think it's""" start="00:31:12.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:31:13.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know related to packaging that actually makes sense""" start="00:31:15.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or windows related even and uh, it can be tested with an extra snapchat that should be uploaded to the gnu alpha side""" start="00:31:18.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I could look at that if I have time""" start="00:31:25.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay""" start="00:31:27.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That is with the configure script to make file for""" start="00:31:29.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Emacs is really really complicated if time permits which i'm, you know now confident it will not""" start="00:31:32.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We will look at a makefile that I tried writing that orchestrates this whole process that i'm talking about""" start="00:31:39.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um as uh, let's see, so the build uh build process I run my builds with""" start="00:31:47.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh explicitly specifying the max cpu, uh""" start="00:31:54.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""with minus j""" start="00:31:59.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But minus b1 to get the full build, uh full login to your recipes. That is probably the magic thing""" start="00:32:01.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""that um""" start="00:32:09.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""shouldn't to understand with uh""" start="00:32:10.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or that uh that that uh that i'm glad that I know, uh as i'm trying to write my automations""" start="00:32:15.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:32:24.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh the um""" start="00:32:26.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So I call that out here the binary, uh releases""" start="00:32:29.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay. So in this section, we're going to start to get into what are all those files""" start="00:32:35.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And there's a bug report related to that that I didn't get into here. So""" start="00:32:39.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, that's kind of to the point about the less said about this the better""" start="00:32:43.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That's my explanation for stepping through some of these slides. Uh, of course""" start="00:32:47.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Share them all um""" start="00:32:52.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Hopefully by the time that this video is published""" start="00:32:55.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I mentioned it. Um, I may have mentioned already freshly installed but uh fully installed""" start="00:33:01.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh this the the key distinction here is that uh emacs is""" start="00:33:07.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Distributed in the binary form for windows with some dll files that actually come from the mysis 2""" start="00:33:13.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Project there's an implication there to gcc that I definitely want to get to it talking about""" start="00:33:21.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so freshly installed means""" start="00:33:28.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We haven't copied those binaries from the mysis 2""" start="00:33:31.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh installation""" start="00:33:35.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""into the emacs""" start="00:33:37.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh installation""" start="00:33:39.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, and then""" start="00:33:41.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""When we re-archive that local emacs installation, that's how we're going to create the full zip""" start="00:33:43.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So hopefully that actually is a pretty good summary of what all those files are""" start="00:33:48.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, but there are readme files on the ftp. They do a pretty good job""" start="00:33:53.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If you can dig enough to find one and my apologies for uh tardiness getting a new version on that posted""" start="00:33:59.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:34:07.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the emacs""" start="00:34:09.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, so those dependencies, uh are listed within the emacs itself and as we'll just talk about in a moment""" start="00:34:10.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""There's a way""" start="00:34:17.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh that we can use we can access that""" start="00:34:18.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""When we collect them in order to meet the gcc requirement that is essentially""" start="00:34:22.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""to include""" start="00:34:27.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um include the sources for the for those binaries the things that were compiled against""" start="00:34:29.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:34:36.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The uh, so so here we go, we're we're into the build process""" start="00:34:39.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Let's just take a look and see if configure it got done it sure did""" start="00:34:42.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and now we can see a table of""" start="00:34:46.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Hopefully good, but good and bad news""" start="00:34:49.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um in potential""" start="00:34:51.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um where we're learning that we're using the pdumper strategy and any number of other things that we might be""" start="00:34:53.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Messing with as our motivation for for building ourselves on emacs""" start="00:34:59.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""again, this table represents""" start="00:35:04.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh what you'll what""" start="00:35:07.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""What what it looks like for me when i'm building for the gnu distributed binaries""" start="00:35:10.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, so um""" start="00:35:17.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Kind of moving moving as quickly as I can here""" start="00:35:20.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'm at 40 after I believe that's the five minute mark""" start="00:35:24.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:35:28.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um having just succeeded in in configuring emacs. I don't think we're going to build it. Uh""" start="00:35:29.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I don't think we're going to actually get to running make install""" start="00:35:35.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, but I have it sitting here on my keyboard or clipboard assuming that we will right?""" start="00:35:39.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""No""" start="00:35:49.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh, wow""" start="00:35:50.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I think i've managed to confuse this. All right, so for me that looks simply like""" start="00:35:52.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh make""" start="00:35:57.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""v equals one""" start="00:35:59.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh install, uh prefix equals""" start="00:36:01.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:36:10.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And we can at least get it kicked off""" start="00:36:18.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And that that command is just uh""" start="00:36:22.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Just is no no different than I showed on the slide where I where I gave it""" start="00:36:26.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, I wasn't planning to stop and explain it. I was just planning to paste it in""" start="00:36:31.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:36:35.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So so again recapping the rest of the process here and maybe actually making it if you can believe it or not""" start="00:36:36.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""through the rest of these slides, um""" start="00:36:42.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:36:45.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To uh deal provided dlls just the things that we compile as part of making emacs""" start="00:36:52.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:36:59.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The uh, the build depth zip script is uh provided with the source distribution is your tool""" start="00:37:02.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""for uh meeting the gpl requirements ride source as mentioned before""" start="00:37:10.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, there is a second bug that I did, uh include some more information on in my notes already""" start="00:37:14.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um that uh""" start="00:37:22.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That gets into the details of this other feature I alluded to""" start="00:37:24.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, i'll just skip into that""" start="00:37:28.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:37:31.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""we can with with uh""" start="00:37:32.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""With a an appropriate version of that which you may need a patch""" start="00:37:35.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh to""" start="00:37:41.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""To have you can list out the dependencies""" start="00:37:42.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And and that version as well can consider the dependencies of the emacs binary versus the hard-coded list""" start="00:37:45.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You might find depending on when you look at this file in the source tree""" start="00:37:51.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The different um""" start="00:37:56.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so""" start="00:37:59.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I also have a hack here that uh works around the absolute requirement to run this with the mysys2""" start="00:38:00.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And not the mingw64""" start="00:38:07.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""64""" start="00:38:09.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Script""" start="00:38:14.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:38:17.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Once we've made that zip file that contain that's that's our installed emacs without the dlls provided by mysys2""" start="00:38:18.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We'll then unpack the dependencies that were created by that python script. We just talked about from the emacs source tree""" start="00:38:28.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So at that point once those are unpacked we can now make what's called the full""" start="00:38:36.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Installer or sometimes I might call it the unqualified installer because it's just going to be called emacs29.1.zip""" start="00:38:41.600" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um and that uh that file which which creates the archive""" start="00:38:51.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That""" start="00:38:58.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""that that file is exactly the same plus the""" start="00:38:59.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, the dependencies that we unzipped in the bin folder of the installed emacs""" start="00:39:03.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:39:09.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:39:10.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""it most importantly""" start="00:39:17.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""If i've installed in any kind of funny looking name, I end up renaming it to like emacs-29.1""" start="00:39:19.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or emacs-29. or 30.0.50 or whatever and I just rename that installed""" start="00:39:26.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Emacs folder and then I go to the root of wherever I created that the parent directory above it""" start="00:39:33.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And that's where I make my copy of the emacs nsi""" start="00:39:40.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um the the nsis script""" start="00:39:44.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and uh""" start="00:39:47.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That's also where I""" start="00:39:49.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And then uh, then from that parent directory I execute uh making sys uh here I as mentioned""" start="00:39:51.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:39:59.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I I can get away with this because I have it on my path and it's my recollection""" start="00:40:00.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:40:05.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:40:12.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""When nsis wasn't on my path""" start="00:40:13.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The uh, the the final step here""" start="00:40:16.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And the last the gpl requirement is to include all the sources""" start="00:40:20.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Except when i'm doing a release build I always do this""" start="00:40:25.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, and that's the new practice when making snapchat binaries is to go ahead and include the sources""" start="00:40:30.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Even though we might have the specific revision number""" start="00:40:36.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, our thinking is we want absolute clarity""" start="00:40:39.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""that that somebody""" start="00:40:44.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:40:45.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""yeah, maybe they would the jerks them into my own open source project and""" start="00:40:53.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:40:57.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Off, you know off they go, uh, and that needs to be possible""" start="00:40:59.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:41:04.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so, um""" start="00:41:06.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Beyond that the rest of this is is really detailed that you find covered in the gnu maintainers manual""" start="00:41:07.960" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, this is the the current set of windows binaries that um, it's busily working on""" start="00:41:14.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""creating a like for like a""" start="00:41:20.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Mirror to behind the scenes here is called a 29.1 underscore two""" start="00:41:23.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, and I have a lot of""" start="00:41:30.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Automation available on this site. So at this point i'm just I think i'm only""" start="00:41:32.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""minute 40 seconds over i'm""" start="00:41:38.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""gonna""" start="00:41:41.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""invite my""" start="00:41:42.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Co-organizers back onto the call or any volunteers that want to jump in and anybody if there's people on the bbb""" start="00:41:44.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'd be happy to take questions if there aren't""" start="00:41:50.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, I have a screen full of""" start="00:41:53.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The automation stuff ready to go as a kind of a second ring in my circus today""" start="00:41:57.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So if you're still with me, thanks a lot for joining me, and I really enjoyed this talk""" start="00:42:03.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, if this is where we're going to close it out. I don't know where we're at for schedule today""" start="00:42:07.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, thanks a lot for a great talk corwin""" start="00:42:13.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um in terms of like schedule, yeah, you went over a little bit for the official like, um""" start="00:42:16.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""schedule or time of your talk, but I think""" start="00:42:22.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We actually have maybe like six or seven more minutes. Um here on stream""" start="00:42:24.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""For um questions and such if folks have questions or if you want to like quickly maybe show one or two more things""" start="00:42:29.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:42:36.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But I think the hard stuff is about like""" start="00:42:37.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Maybe 10 minutes ish for now and then we'll have to rush over to um""" start="00:42:39.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""for the closing remarks, so""" start="00:42:43.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Well, that sounds awesome""" start="00:42:48.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so i'm looking at the the dev chat, uh, I see a comment on cross compiling the emacs""" start="00:42:51.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:42:58.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, uh, if if you put something on the pad i'm sure""" start="00:43:05.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I will see it between the two of us""" start="00:43:09.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh over here""" start="00:43:13.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so cross compiling emacs for serenity. I haven't tried really any cross compiling. I think that would be very interesting""" start="00:43:14.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I would most likely focus on""" start="00:43:21.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Doing exactly what I do on a gnu system completely ditching""" start="00:43:23.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:43:29.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So I guess with my my remaining time rather than walking through code""" start="00:43:30.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um for my automation which can be another talk if in fact there's an interest in that""" start="00:43:35.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:43:40.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I want to I guess say a couple words about the non-free operating system""" start="00:43:41.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That i'm using here. I did my best to use no""" start="00:43:46.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""non-free software other than""" start="00:43:50.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:43:53.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh the operating system""" start="00:43:55.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That is the context for this talk in preparing this talk for you""" start="00:43:57.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I personally have a lot more""" start="00:44:02.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh time and energy I have to say invested in proprietary tools for doing a lot of the things that""" start="00:44:06.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That go into this so I really respect the work of people that pull that off. Um""" start="00:44:14.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:44:20.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, it is all absolutely possible and just hats off to everybody that that used uh entirely free software to get their""" start="00:44:28.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Get their recordings done in time""" start="00:44:36.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, and what you did see""" start="00:44:38.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Unless it was provided by the operating system in my presentation today was all""" start="00:44:41.640" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh free software with the debatable exception of nsys which styles itself""" start="00:44:46.040" video="mainVideo-windows" id="subtitle"]] +[[!template text="""as open source""" start="00:44:51.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""maybe for uh marketing reasons""" start="00:44:53.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh in any case, uh, certainly we can get out of the source""" start="00:44:57.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Thanks for the note corinne, it's good to know that uh""" start="00:45:08.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Building or uh, yeah doing the build of emacs for windows on windows can be done using only free software""" start="00:45:11.320" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yeah, absolutely""" start="00:45:19.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Probably the right closing note, right?""" start="00:45:23.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, I just uh, thanks again to the organizers for bearing with me and like every time I was like you guys i'm""" start="00:45:26.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Terrible at this. They're just like no you're doing fine. Keep going. You did a great job live last time""" start="00:45:32.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You can do it live, you know and and saying all the right things to just uh, encourage me to come back""" start="00:45:37.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""This year and everywhere""" start="00:45:44.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Well, as I said before we were very lucky to have you and the rest of the team of course as well and""" start="00:45:49.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um goes without saying but all the speakers and all the audience the participants as well, so""" start="00:45:54.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:46:08.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:46:09.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um throwing throwing up another screen here and uh,""" start="00:46:17.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""In fact, let's go ahead and go back to our to our crawler, right?""" start="00:46:22.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And i'll bring back our build if it finishes and maybe we'll show making the installer as well, um""" start="00:46:30.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But I have the cpu count turned down a little bit here""" start="00:46:39.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Note I didn't specify minus j here""" start="00:46:44.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, so""" start="00:46:47.400" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Over here is my automation, uh in case you do want to take a look""" start="00:46:49.480" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:46:52.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, it's not beautiful, but this works, uh, pretty well for me to""" start="00:46:59.800" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Get a sense if something might have changed in terms of how many warnings or errors are happening""" start="00:47:06.280" video="mainVideo-windows" id="subtitle"]] +[[!template text="""When I build emacs, so I have this awful automation going on and I frequently want to answer the question""" start="00:47:13.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know, what's the change rate in uh warnings or what have you?""" start="00:47:19.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So this kind of gives me a count""" start="00:47:24.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""of that""" start="00:47:26.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:47:28.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""so from there, uh""" start="00:47:29.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Crude ci is the script. We're we're watching run in the other pane""" start="00:47:32.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, you can""" start="00:47:37.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""see it's uh""" start="00:47:39.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Just starting to do its thing again""" start="00:47:42.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And uh""" start="00:47:48.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The make file I mentioned this is a top-down rewrite of everything else that i've done it has some bugs right now""" start="00:47:51.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um the uh""" start="00:48:00.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:48:03.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Build distribution is the main script that I use for my personal builds""" start="00:48:04.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""This is what is run by the crude ci script""" start="00:48:10.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, it has a fun tie-in to this""" start="00:48:13.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh web interface here""" start="00:48:16.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:48:19.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um the""" start="00:48:25.260" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh""" start="00:48:28.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Blah blah blah blah this this script is really long and complicated and probably needs some diving into but you can see that""" start="00:48:31.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:48:38.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""version for strategic""" start="00:48:44.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um nsys reasons so""" start="00:48:47.100" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:48:50.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It takes care of kind of every complexity and stuff that I mentioned today in some respects""" start="00:48:51.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, as does the make file build release""" start="00:48:57.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""is""" start="00:49:00.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um another fairly useful""" start="00:49:01.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Incarnation of this this is just focused on the release process and this does work""" start="00:49:05.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""for example to create the""" start="00:49:12.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:49:14.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know like I like well I could""" start="00:49:15.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Like uh for like files as far as I can tell so what are currently posted for emacs 29.1""" start="00:49:17.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and the release candidate""" start="00:49:24.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:49:27.660" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:49:28.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:49:35.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh building a tree sitter I make some dlls there if you're looking for hints on how to get going or just simply""" start="00:49:37.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""A huge long list of git repositories that make grammars you can use""" start="00:49:45.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That is here as well""" start="00:49:50.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, finally I mentioned I have a""" start="00:49:53.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, I have a a website where I publish my own personal snapshots that I make""" start="00:49:58.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""That folder full of install directories, but all of the usual""" start="00:50:04.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""GNU style binary distributables including the source code and the source code for the dependencies""" start="00:50:08.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:50:14.860" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the""" start="00:50:15.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:50:17.820" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So this program is another one of those""" start="00:50:20.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Complicated find commands and therefore potentially the most useful thing in here to take to you""" start="00:50:24.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, and here i'm deleting binaries older than 17 years""" start="00:50:29.340" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh everything except""" start="00:50:34.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""the uh""" start="00:50:36.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""No deps file and the sources of it. You'll find on my website""" start="00:50:37.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Currently those indefinitely i'll probably roll out""" start="00:50:41.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""120 days or something""" start="00:50:44.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um for those eventually""" start="00:50:47.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh, uh, I can talk about this one even um the uh""" start="00:50:53.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""The""" start="00:50:57.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So here you'll see the two branches that i'm tracking the job of this script""" start="00:50:58.700" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Is this runs on the website? I call it with a like a remote rsync""" start="00:51:02.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh type""" start="00:51:07.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, or an ssh remote ssh command""" start="00:51:08.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:51:12.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""And right after the rsync r syncing up any new emacs that I built""" start="00:51:13.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""and""" start="00:51:19.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh, it's""" start="00:51:20.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, its job is to update my fancy directory indexing so let's look at corwin's website""" start="00:51:23.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Here's my emacs 29 folder""" start="00:51:31.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We have about two more minutes corwin""" start="00:51:44.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yeah, it'll take that entire two minutes to uh, load this directory because I am""" start="00:51:47.420" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Because I have not yet ever pruned any of these dang binaries""" start="00:51:52.940" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So every version of uh emacs 29 that i've ever made for myself is probably here""" start="00:51:56.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""nice""" start="00:52:02.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, I strongly recommend that you bookmark this folder if you're using these for something and you always want the latest""" start="00:52:03.580" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, so here this particular, uh latest 29 emacs 29 latest or simply replace the 29 with 30 to get those""" start="00:52:09.980" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh""" start="00:52:18.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""alas""" start="00:52:19.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""No, no such luck for tree setter""" start="00:52:20.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""but if we look at""" start="00:52:23.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""that""" start="00:52:25.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Live this long without making a typo now look at me""" start="00:52:36.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay""" start="00:52:40.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh""" start="00:52:44.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So here, um""" start="00:52:51.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You know, we can see the iconification and so on even in the tree sitter folder""" start="00:52:53.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""this is all i'm talking about about the fanciness that's set up by that other script that""" start="00:52:57.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""i'm showing over here and run after each time I run the upload it just""" start="00:53:02.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Looks to see if anything's new and add some lines to the dot htaccess file""" start="00:53:07.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um""" start="00:53:15.900" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I'm, particularly proud of this one. I'm not going to lie. Um, linking out to each each""" start="00:53:17.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""project that we're using letting us know the commit version and then""" start="00:53:23.500" video="mainVideo-windows" id="subtitle"]] +[[!template text="""For the dlls quick link out to the log and the signature file for this dll""" start="00:53:28.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um""" start="00:53:34.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I find that a lot just a lot""" start="00:53:37.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""More readable""" start="00:53:40.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""than uh""" start="00:53:42.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Listing them all out individually and i'd love to do something like that on the new site""" start="00:53:44.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So i'm""" start="00:53:51.180" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I think we've got to be out of time by now. I've just got to say hey, thanks again for having me""" start="00:53:52.220" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh for those that uh watch the talk either live or after the conference""" start="00:53:56.780" video="mainVideo-windows" id="subtitle"]] +[[!template text="""uh appreciate everyone's support to get me to the point where i'm able to""" start="00:54:02.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh to do this this this cool volunteer task""" start="00:54:06.540" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Uh, which is fun and easy to do and reach out to me if you're interested in helping with it""" start="00:54:10.380" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Well, awesome, thanks a lot for the awesome talk corbin and uh, of course as a fellow core core organizer""" start="00:54:19.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:54:26.060" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Big big words from coming from you my friend""" start="00:54:36.140" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um, thanks for the kind words""" start="00:54:41.740" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Cheers my pleasure. All right, and with that I think we're gonna uh wrap up the dev track here and we'll be""" start="00:54:45.020" video="mainVideo-windows" id="subtitle"]] +[[!template text="""With you again shortly in a few minutes on the gen stream the gen track for the closing remarks for today""" start="00:54:52.300" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um only for today because we're gonna be back tomorrow again as well""" start="00:54:58.620" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So don't go anywhere and uh, see you on the gen track in a bit""" start="00:55:02.460" video="mainVideo-windows" id="subtitle"]] +[[!template text="""So""" start="00:55:05.760" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh my god, I did it we got done within the time you're my hero""" start="00:55:28.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""um, and thank you so much for just keeping me honest there and uh""" start="00:55:31.840" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Like helping me keep my eye on the time and such""" start="00:55:36.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""You have to look at the recording and see whether you feel like doing it again""" start="00:55:50.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:55:56.160" video="mainVideo-windows" id="subtitle"]] +[[!template text="""moment""" start="00:56:01.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Oh, uh because he used your webcam for it, um, like as a like a virtual webcam thingy""" start="00:56:03.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""It was low res especially when things are changing as you were""" start="00:56:09.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""scrolling around""" start="00:56:13.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:56:15.120" video="mainVideo-windows" id="subtitle"]] +[[!template text="""with like""" start="00:56:20.720" video="mainVideo-windows" id="subtitle"]] +[[!template text="""screenshots and""" start="00:56:22.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I recorded on this end too. We shouldn't have that problem with my recording. Thank you. Thank you. Thank you""" start="00:56:24.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I think we're still live on the dev stream""" start="00:56:29.360" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Someone could uh, thanks. Oh, yes""" start="00:56:34.240" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Because uh, i'll set it to rebroadcast""" start="00:56:38.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yeah, I I love doing that for the closing remarks that's""" start="00:56:45.520" video="mainVideo-windows" id="subtitle"]] +[[!template text="""a fine tradition""" start="00:56:49.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Or it's a tradition now because i'm pretty sure this means we've done it twice""" start="00:56:52.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""I""" start="00:56:55.440" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Once heard that, you know, uh as a fan""" start="00:57:02.560" video="mainVideo-windows" id="subtitle"]] +[[!template text="""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""" start="00:57:05.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""We do our fannish and a fannish tradition then is if you do it three times, it's tradition""" start="00:57:11.680" video="mainVideo-windows" id="subtitle"]] +[[!template text="""But um, we're on a budget here. So""" start="00:57:18.000" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Nope""" start="00:57:22.880" video="mainVideo-windows" id="subtitle"]] +[[!template text="""All right, I think we should um head over to mumble and talk on mumble""" start="00:57:25.920" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Um and decide and see like which big blue button room we're going to be in for closing""" start="00:57:30.080" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Okay, so we're clear on bbb here""" start="00:57:35.200" video="mainVideo-windows" id="subtitle"]] +[[!template text="""Yep, I think so""" start="00:57:37.760" video="mainVideo-windows" id="subtitle"]] + +<a name="windows-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""Oh, wow, how exciting. Well, maybe I should share something then. Um, well, thank you very much and""" start="00:00:00.000" video="qanda-windows" id="subtitle"]] +[[!template text="""welcome to, uh, uh, welcome to my talk. I'm a little distracted here. I had a friend who came""" start="00:00:06.880" video="qanda-windows" id="subtitle"]] +[[!template text="""over and just brought me a whole bunch of peanut butter cups, homemade peanut butter cups. Maybe""" start="00:00:14.800" video="qanda-windows" id="subtitle"]] +[[!template text="""I'll show those off, uh, later. What? Okay. Here, uh, put it right there.""" start="00:00:20.320" video="qanda-windows" id="subtitle"]] +[[!template text="""Okay. So I'm going to, uh, get over to my plan, uh, stuff I'm sharing here, hopefully.""" start="00:00:33.840" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, and, and we'll jump, jump right in because I'm going to need as much time as I can possibly""" start="00:00:42.800" video="qanda-windows" id="subtitle"]] +[[!template text="""have today. Thanks so much for, uh, joining me for Emacs conference and for, especially for,""" start="00:00:48.640" video="qanda-windows" id="subtitle"]] +[[!template text="""um, all of you who, who, who participated, you know, in the discussions, contributing talks and,""" start="00:00:56.400" video="qanda-windows" id="subtitle"]] +[[!template text="""um, you know, uh, you know, including running the, the, the, and it's just so much fun to be here.""" start="00:01:03.520" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, I guess while I'm standing here and, and saying stuff that's, that I'm going to have to""" start="00:01:09.600" video="qanda-windows" id="subtitle"]] +[[!template text="""transcribe, cause I didn't, uh, prepare a recorded version. Uh, I had a lot of trouble""" start="00:01:16.320" video="qanda-windows" id="subtitle"]] +[[!template text="""trimming this down so I can solve that problem by just talking a lot at the beginning, uh,""" start="00:01:23.280" video="qanda-windows" id="subtitle"]] +[[!template text="""about other stuff. Um, so in addition to the thanks, I just want to say thanks also to the""" start="00:01:28.880" video="qanda-windows" id="subtitle"]] +[[!template text="""folks on the development list that helped me kind of come up to speed on this. I won't make a big""" start="00:01:37.120" video="qanda-windows" id="subtitle"]] +[[!template text="""list here, but, um, and, and, and for all that I've learned from my previous conferences, it's""" start="00:01:41.920" video="qanda-windows" id="subtitle"]] +[[!template text="""just, I can't stress enough what a great opportunity volunteering for, uh, free software related things""" start="00:01:48.880" video="qanda-windows" id="subtitle"]] +[[!template text="""are, uh, as a way to get involved. People will just totally teach you how to be helpful and I'm""" start="00:01:55.200" video="qanda-windows" id="subtitle"]] +[[!template text="""loving it. I can preview the stream, but it's not super easy right now. I got all my screens""" start="00:02:00.080" video="qanda-windows" id="subtitle"]] +[[!template text="""kind of dedicated to other stuff. So should I pause for a second before I get into the slides?""" start="00:02:18.800" video="qanda-windows" id="subtitle"]] +[[!template text="""Cause that's, they're, they'll be hard to see if I'm not full screen.""" start="00:02:23.680" video="qanda-windows" id="subtitle"]] +[[!template text="""Yeah, that would be nice. Okay. Well, I'll keep ad libbing then cause I just have a million,""" start="00:02:29.440" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, things I can say. Um, uh, so, uh, let me just quickly talk, uh, things that aren't in here.""" start="00:02:34.240" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, I'm going to mention the mysis2.org and the, that project, which provides a port""" start="00:02:42.960" video="qanda-windows" id="subtitle"]] +[[!template text="""of, uh, the GNU, uh, uh, glibc and a lot of GNU and, uh, uh, their free software. Um, so, uh,""" start="00:02:51.280" video="qanda-windows" id="subtitle"]] +[[!template text="""I don't...""" start="00:03:03.520" video="qanda-windows" id="subtitle"]] +[[!template text="""All right, I'm switching a room to, uh, a DVD room to Stefan.""" start="00:03:03.840" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. So I'm going to take mumble out of my, uh, pardon me, folks.""" start="00:03:12.080" video="qanda-windows" id="subtitle"]] +[[!template text="""It's going to take mumble out of my speakers here.""" start="00:03:16.080" video="qanda-windows" id="subtitle"]] +[[!template text="""Okay. We'll take the speakers out of play entirely and I'll just switch to some headphones.""" start="00:03:22.800" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. So...""" start="00:03:33.600" video="qanda-windows" id="subtitle"]] +[[!template text="""Perfect. What an amazing amount of time. All right. So thanks a lot. Uh, today I've got a jam""" start="00:03:36.720" video="qanda-windows" id="subtitle"]] +[[!template text="""packed talk. Um, I've, I've done my best to make, to make this not too overwhelming,""" start="00:03:42.400" video="qanda-windows" id="subtitle"]] +[[!template text="""but overall we're going to try to try to actually build, um, Emacs while we're talking today.""" start="00:03:48.720" video="qanda-windows" id="subtitle"]] +[[!template text="""And we might actually build several Emacs. Uh, so let's take a look at that real quick.""" start="00:03:55.040" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, so over here we have a screen where I am just once a minute looking, uh,""" start="00:04:00.400" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, indirectly at whether there have been any pushes, uh, upstream to either the Emacs 29 or""" start="00:04:08.480" video="qanda-windows" id="subtitle"]] +[[!template text="""Emacs 30 branches. So I've arranged for us to sort of keep an eye on that, um, while we talk.""" start="00:04:15.360" video="qanda-windows" id="subtitle"]] +[[!template text="""And, you know, maybe that's, that's one thing that we'll do. And then additionally, we'll probably""" start="00:04:24.320" video="qanda-windows" id="subtitle"]] +[[!template text="""fire up a shell. This is the MySys2 environment that I talked about before,""" start="00:04:30.640" video="qanda-windows" id="subtitle"]] +[[!template text="""and we'll probably create some directories and things. But before we get into all that, let's,""" start="00:04:36.640" video="qanda-windows" id="subtitle"]] +[[!template text="""let's give some, some context. Uh, I've been doing my best to try to, uh, make sure all this""" start="00:04:42.160" video="qanda-windows" id="subtitle"]] +[[!template text="""information is on the Emacs wiki as well. So, uh, sorry, as I said, I got a little caught off guard.""" start="00:04:48.080" video="qanda-windows" id="subtitle"]] +[[!template text="""So I'm moving my foot pedals to the floor, back to the floor here. And I should be able to advance""" start="00:04:54.240" video="qanda-windows" id="subtitle"]] +[[!template text="""slides here. All right. So, um, I kind of provided some special definitions for things. I'm going to""" start="00:05:02.640" video="qanda-windows" id="subtitle"]] +[[!template text="""kind of level set with those. The, uh, um, when I say a binary release, I'm talking about some,""" start="00:05:11.760" video="qanda-windows" id="subtitle"]] +[[!template text="""some, uh, I'm talking about Emacs for Windows as, uh, just ready to run out of its folder or""" start="00:05:21.680" video="qanda-windows" id="subtitle"]] +[[!template text="""in whatever similar form. The, when I say a build, I'm talking about kind of a process of doing that.""" start="00:05:28.080" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, when Emacs.get, of course, that's the upstream hosted by GNU Savannah.""" start="00:05:36.400" video="qanda-windows" id="subtitle"]] +[[!template text="""The Emacs release is, is a tarball created from that. The sources for, um, Emacs are going to be""" start="00:05:41.600" video="qanda-windows" id="subtitle"]] +[[!template text="""one of those two things, um, very specifically. So I'm not going to talk about patches patching.""" start="00:05:51.680" video="qanda-windows" id="subtitle"]] +[[!template text="""There's some implications there. Perhaps we'll get into it. Uh, so a snapshot is when I build""" start="00:05:58.480" video="qanda-windows" id="subtitle"]] +[[!template text="""from anything other than a release source, uh, a tarball. Um, just if I, if I say that I'm talking""" start="00:06:06.720" video="qanda-windows" id="subtitle"]] +[[!template text="""specifically about the, uh, the XZ version of the file as, as a technical point. Um,""" start="00:06:14.880" video="qanda-windows" id="subtitle"]] +[[!template text="""so that may come up. All right. Nothing else I think up my sleeve. Um, the, uh, as, as a key""" start="00:06:23.600" video="qanda-windows" id="subtitle"]] +[[!template text="""data point, it's worth understanding that there's a file called configure AC. It's going to be""" start="00:06:32.480" video="qanda-windows" id="subtitle"]] +[[!template text="""processed, uh, as part of auto-conf. We, we initially access that when we run, um, auto-gen""" start="00:06:38.320" video="qanda-windows" id="subtitle"]] +[[!template text="""as you'll see in a little bit. Um, the, but before, but, uh, so the auto-gen script will""" start="00:06:46.160" video="qanda-windows" id="subtitle"]] +[[!template text="""generally consider this, uh, so in a release build, um, this has been thought about kind of for us as""" start="00:06:52.720" video="qanda-windows" id="subtitle"]] +[[!template text="""part of, um, making the tarball. Um, the configure.ac, um, yeah, I think I pretty much covered,""" start="00:07:00.240" video="qanda-windows" id="subtitle"]] +[[!template text="""covered this. So, um, those, those that kind of partially built status, that's a,""" start="00:07:10.480" video="qanda-windows" id="subtitle"]] +[[!template text="""might be another phrase that you hear me use. So this slide unpacks that a little more.""" start="00:07:16.880" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, so it can be a little confusing to understand what exactly the, you know, what is it, you know,""" start="00:07:22.880" video="qanda-windows" id="subtitle"]] +[[!template text="""how stable is Emacs depending on what I have. So the, I got a kind of set of rules of thumb here,""" start="00:07:29.520" video="qanda-windows" id="subtitle"]] +[[!template text="""right? First I want the highest, uh, you know, dot, uh, dot release value that I can get,""" start="00:07:36.160" video="qanda-windows" id="subtitle"]] +[[!template text="""assuming that that's higher than one. If it's, if it were to only be one, let's say,""" start="00:07:43.680" video="qanda-windows" id="subtitle"]] +[[!template text="""if it were to only be one, let's say my choices were 29.1 and 30.1, I would take 30.1. Um,""" start="00:07:50.160" video="qanda-windows" id="subtitle"]] +[[!template text="""cause that's, that's weird. But, um, what you'll normally see is you might see a 28.2,""" start="00:07:59.200" video="qanda-windows" id="subtitle"]] +[[!template text="""you might see a 29.1. So here I think 28.2 is got the most, most, most stable, um,""" start="00:08:06.080" video="qanda-windows" id="subtitle"]] +[[!template text="""set, uh, the, uh, or set of release binaries. The 29.1 will, will have a little more features,""" start="00:08:16.560" video="qanda-windows" id="subtitle"]] +[[!template text="""but will tend to be more stable than, uh, any, uh, lower point releases for 29, uh, certainly""" start="00:08:26.160" video="qanda-windows" id="subtitle"]] +[[!template text="""than any release candidates for 29, which might even have new features, um, but are mostly going""" start="00:08:33.680" video="qanda-windows" id="subtitle"]] +[[!template text="""to just be packages. So they're going to become the most stable thing here. And especially if""" start="00:08:39.600" video="qanda-windows" id="subtitle"]] +[[!template text="""they, they, they have a, you know, if this, this is not, uh, if this were to be 29.2 release""" start="00:08:46.000" video="qanda-windows" id="subtitle"]] +[[!template text="""candidate one as well, looking forward to seeing, um, the, uh, 30.50. Um, and, and in between this,""" start="00:08:53.600" video="qanda-windows" id="subtitle"]] +[[!template text="""this pretest here, we're talking about kind of developer land. Um, so, um, the expectation is""" start="00:09:04.960" video="qanda-windows" id="subtitle"]] +[[!template text="""that, you know, what you're doing that applies to windows users, uh, just as much if you are""" start="00:09:11.840" video="qanda-windows" id="subtitle"]] +[[!template text="""building anything in the snapshot range, any of that is going to be in this 30.0.50. Currently""" start="00:09:16.560" video="qanda-windows" id="subtitle"]] +[[!template text="""that'll change when the, uh, when the 30, 30, uh, an Emacs 30 release tags, uh, or release branches""" start="00:09:22.960" video="qanda-windows" id="subtitle"]] +[[!template text="""come. Okay. So let's talk about the local. Um, there's not much to know about what I have going""" start="00:09:32.240" video="qanda-windows" id="subtitle"]] +[[!template text="""on, except that I have my, my paths mess messed with. So, um, if, if that, that were to come up,""" start="00:09:42.880" video="qanda-windows" id="subtitle"]] +[[!template text="""if you're wondering how, why does this, uh, and insist command work, that's probably the place""" start="00:09:51.200" video="qanda-windows" id="subtitle"]] +[[!template text="""where you'd notice it. Uh, I am using windows 10. I haven't tried windows 11, uh, as mentioned,""" start="00:09:57.120" video="qanda-windows" id="subtitle"]] +[[!template text="""mysis2 is critical to all this. There's one script in particular that will error out if you try to do""" start="00:10:03.760" video="qanda-windows" id="subtitle"]] +[[!template text="""anything other than use mysis's, mysis's shell. And in fact, mysis owns or provides three shells""" start="00:10:09.520" video="qanda-windows" id="subtitle"]] +[[!template text="""and of them, that script is designed to work with a specific one of them as, as we'll come to.""" start="00:10:16.560" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, I don't talk about installing the dependencies, but just as, as kind of some kind of help,""" start="00:10:22.720" video="qanda-windows" id="subtitle"]] +[[!template text="""um, you can search using this formula and install, uh, using this formula.""" start="00:10:29.680" video="qanda-windows" id="subtitle"]] +[[!template text="""Good luck with those, you know, grep commands.""" start="00:10:38.480" video="qanda-windows" id="subtitle"]] +[[!template text="""And this is the tool for building the self-installing self-extracting installer or, uh,""" start="00:10:43.520" video="qanda-windows" id="subtitle"]] +[[!template text="""executable self-installer. Um, the script for that is provided along with the Emacs source.""" start="00:10:49.520" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, and I've provided a helpful link to the main page for the project download link on the left.""" start="00:10:56.720" video="qanda-windows" id="subtitle"]] +[[!template text="""It is not, um, it's kind of scare where the way that this link appears, but I have clicked it and""" start="00:11:03.280" video="qanda-windows" id="subtitle"]] +[[!template text="""it's working for me. Automation does, uh, we'll, we have some time we'll be looking at this at a""" start="00:11:09.680" video="qanda-windows" id="subtitle"]] +[[!template text="""minimum. I wanted to mention that what I do on my local, what you're seeing in the crawler, I hope,""" start="00:11:18.960" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, represents a, uh, a simple sleep loop. Uh, and we'll, we'll look into that if we have time.""" start="00:11:25.280" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, I do have a little bit, I do use like a cron job and so on to clean up some hosting that,""" start="00:11:36.560" video="qanda-windows" id="subtitle"]] +[[!template text="""that I pay for, um, where I've got, where I, where I kind of self host some, uh, snapshots,""" start="00:11:42.960" video="qanda-windows" id="subtitle"]] +[[!template text="""more stuff than I feel comfortable uploading to, uh, to GNU. The, um,""" start="00:11:50.720" video="qanda-windows" id="subtitle"]] +[[!template text="""you know, I never said, uh, my name is Corwin Brust. For the last couple of years, I've been""" start="00:12:01.760" video="qanda-windows" id="subtitle"]] +[[!template text="""the volunteer making, uh, um, making the snapshots, the quote unquote, official binaries,""" start="00:12:06.480" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, for windows of the, um, of, of Emacs for windows. So that's, that's all the different""" start="00:12:12.480" video="qanda-windows" id="subtitle"]] +[[!template text="""versions. Uh, help is always welcome with that. I'd be very happy to teach you in more depth.""" start="00:12:20.560" video="qanda-windows" id="subtitle"]] +[[!template text="""This video is, you know, kind of my drop dead file. Uh, I don't have specific plans. Uh, if""" start="00:12:25.680" video="qanda-windows" id="subtitle"]] +[[!template text="""somebody's like, Hey, get out of the way, this is the one thing I think I can do. Um, Hey,""" start="00:12:31.920" video="qanda-windows" id="subtitle"]] +[[!template text="""that's real relatable. Okay. Um, so I haven't tried, uh, the, I haven't tried a lot of fun""" start="00:12:36.480" video="qanda-windows" id="subtitle"]] +[[!template text="""things that I won't talk about. Um, the, uh, the rest of this talk is going to get into the""" start="00:12:44.640" video="qanda-windows" id="subtitle"]] +[[!template text="""nitty gritty. As I said, um, if we can't convince Emacs to start building over on that screen,""" start="00:12:50.400" video="qanda-windows" id="subtitle"]] +[[!template text="""we'll be opening it up here on the center stage. Um, uh, this begins and there's, there's, there's,""" start="00:12:56.560" video="qanda-windows" id="subtitle"]] +[[!template text="""there's great insight here too, on the wiki, uh, with picking an FTP source for any official""" start="00:13:05.120" video="qanda-windows" id="subtitle"]] +[[!template text="""release that is for a stable product, please visit, um, ftp.gnu.org. Otherwise you'll want""" start="00:13:11.520" video="qanda-windows" id="subtitle"]] +[[!template text="""to switch that FTP dot at the beginning to alpha dot and take a pretest, uh, or any snapshot or""" start="00:13:19.760" video="qanda-windows" id="subtitle"]] +[[!template text="""otherwise, then publish there the, uh, next, uh, you know, I'm gonna, you have some examples in""" start="00:13:27.280" video="qanda-windows" id="subtitle"]] +[[!template text="""here that assume that you're doing a release bill that you're doing $29 one, but, um, I am glancing""" start="00:13:36.640" video="qanda-windows" id="subtitle"]] +[[!template text="""out of the, the right side of my face at the chat on the opt-ins. Anybody in there wants to direct""" start="00:13:43.520" video="qanda-windows" id="subtitle"]] +[[!template text="""me at a particular, um, we can make some other, we can build something else. If you want to see""" start="00:13:51.440" video="qanda-windows" id="subtitle"]] +[[!template text="""a snapshot build more mentioned that, um, the examples that you're going to see here that I""" start="00:13:57.840" video="qanda-windows" id="subtitle"]] +[[!template text="""will, without other direction, cut and paste, um, are all, uh, based on the release bill. So,""" start="00:14:03.840" video="qanda-windows" id="subtitle"]] +[[!template text="""um, so, uh, we'll use the, uh, I mentioned that there are several shells provided by MySys2.""" start="00:14:14.640" video="qanda-windows" id="subtitle"]] +[[!template text="""The MinGW64 shell is the one that we mostly need. Um, I tested all of this as well with the MinGW32""" start="00:14:22.960" video="qanda-windows" id="subtitle"]] +[[!template text="""shell. Um, so that, that should work and, and see mix binaries that, that, that work for me.""" start="00:14:33.120" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, I, as I mentioned, I don't get into the details of installing all your prerequisites.""" start="00:14:44.080" video="qanda-windows" id="subtitle"]] +[[!template text="""I found that doing it in a headfirst manner wasn't, uh, wasn't difficult. And I also found""" start="00:14:50.720" video="qanda-windows" id="subtitle"]] +[[!template text="""that there's a number of tutorials. I didn't want to pick one to link here.""" start="00:14:56.560" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, there, uh, here, uh, okay. So our general formula for building Emacs, irrespective of""" start="00:15:01.040" video="qanda-windows" id="subtitle"]] +[[!template text="""Windows, looks like, does the configure script exist if not run autogen? From a Windows build""" start="00:15:10.800" video="qanda-windows" id="subtitle"]] +[[!template text="""standpoint, this is, if I'm not running a release, release build, call the autogen script.""" start="00:15:19.600" video="qanda-windows" id="subtitle"]] +[[!template text="""Right. And this would be in the directory where we want to pack this. I'll demonstrate""" start="00:15:27.840" video="qanda-windows" id="subtitle"]] +[[!template text="""within three minutes if, uh, if one, if nobody's pushed upstream to Emacs. Um, so, uh, the configure,""" start="00:15:32.080" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, and, uh, configure options are, uh, uh, the, the configure, you know, if the configure, sorry,""" start="00:15:42.640" video="qanda-windows" id="subtitle"]] +[[!template text="""the configure script exists, then, uh, it doesn't, doesn't exist. So the only reason,""" start="00:15:54.240" video="qanda-windows" id="subtitle"]] +[[!template text="""so in my process, I will always execute that step because I clean everything after every build,""" start="00:16:01.520" video="qanda-windows" id="subtitle"]] +[[!template text="""um, in all my contexts. Um, however, if you were, you know, had a, a checkout of emacs.get""" start="00:16:07.920" video="qanda-windows" id="subtitle"]] +[[!template text="""and you are building it at several releases, then maybe you've got a configure script and then you""" start="00:16:16.880" video="qanda-windows" id="subtitle"]] +[[!template text="""all want to know, um, the, you know, whether you have to bootstrap and the typical complexities,""" start="00:16:21.440" video="qanda-windows" id="subtitle"]] +[[!template text="""but otherwise you might be able to skip that in, in, in the abstract. Um,""" start="00:16:27.600" video="qanda-windows" id="subtitle"]] +[[!template text="""is that right? Or is it, is it the make, uh, so, and if they make file doesn't exist,""" start="00:16:36.080" video="qanda-windows" id="subtitle"]] +[[!template text="""make install. I know I'm looking at that in question whether it's correct. Sorry about that.""" start="00:16:41.520" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, in any case, uh, so auto-gen configure make install is our recipe. Auto-gen creates the""" start="00:16:46.640" video="qanda-windows" id="subtitle"]] +[[!template text="""configure script, configure creates the make file, the make file. Um, in the case of windows,""" start="00:16:55.600" video="qanda-windows" id="subtitle"]] +[[!template text="""I almost always want the install, uh, and to specify some location where the installed emacs""" start="00:17:01.840" video="qanda-windows" id="subtitle"]] +[[!template text="""will land. This is where all of the recipes for packaging emacs go. And if I were, uh, you know,""" start="00:17:08.080" video="qanda-windows" id="subtitle"]] +[[!template text="""using this as a movie to upgrade, I personally would do that by, by specifying an install path,""" start="00:17:19.120" video="qanda-windows" id="subtitle"]] +[[!template text="""quote unquote, on top of, uh, a main installation. I don't do that. I update shortcuts mainly based""" start="00:17:24.640" video="qanda-windows" id="subtitle"]] +[[!template text="""on what specifically I want to try, uh, in an effort to, to, to, to notice, uh, interesting""" start="00:17:31.520" video="qanda-windows" id="subtitle"]] +[[!template text="""patches and confirm they work on windows, which mostly they do. There's not a lot of code in my""" start="00:17:37.600" video="qanda-windows" id="subtitle"]] +[[!template text="""experience that is, uh, windows specific and very, very little around the build process.""" start="00:17:44.400" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. Huge rabbit hole zone. And I still have a minute before I have to, uh, kick off""" start="00:17:50.320" video="qanda-windows" id="subtitle"]] +[[!template text="""the first part of our demo. So let's, let's keep, keep diving in, um, the, those specific part""" start="00:17:57.440" video="qanda-windows" id="subtitle"]] +[[!template text="""windows specific parts beside the dot exe extension that we're going to find slammed""" start="00:18:07.120" video="qanda-windows" id="subtitle"]] +[[!template text="""onto all of our familiar, uh, executables. We're also going to have emacs client W,""" start="00:18:11.920" video="qanda-windows" id="subtitle"]] +[[!template text="""which is a wrapper that hides, um, how hard it is to get, uh, to, to, to get it,""" start="00:18:18.400" video="qanda-windows" id="subtitle"]] +[[!template text="""how bad the abstraction is between the window management layer and the GUI,""" start="00:18:27.600" video="qanda-windows" id="subtitle"]] +[[!template text="""and then all the different parts on windows. Essentially, it wants to create a shell window.""" start="00:18:32.400" video="qanda-windows" id="subtitle"]] +[[!template text="""If we just double click emacs dot exe. So emacs client W, uh, and run emacs,""" start="00:18:37.040" video="qanda-windows" id="subtitle"]] +[[!template text="""they're going to solve that problem. Um, uh, wrapping emacs and emacs client respectively.""" start="00:18:42.960" video="qanda-windows" id="subtitle"]] +[[!template text="""And, um, just, uh, all right. So let's, let's go ahead and do something. I'll, I'm going to""" start="00:18:51.600" video="qanda-windows" id="subtitle"]] +[[!template text="""take away the ticker here for a minute. And what you're not seeing is off stage. I am killing that""" start="00:19:00.320" video="qanda-windows" id="subtitle"]] +[[!template text="""so we don't get built in parallel. Um, so, um, so at this point I'm going to open up a shell and""" start="00:19:08.080" video="qanda-windows" id="subtitle"]] +[[!template text="""I'm going to start talking just a little bit about my local build environment, which we haven't""" start="00:19:19.680" video="qanda-windows" id="subtitle"]] +[[!template text="""gotten into. In fact, just to make that even easier, let's, um, let's just take a look at it""" start="00:19:24.240" video="qanda-windows" id="subtitle"]] +[[!template text="""a little bit. Probably the easiest spot is here.""" start="00:19:32.640" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. So here we have the familiar windows, my computer interface. I have the G drive and the""" start="00:19:47.680" video="qanda-windows" id="subtitle"]] +[[!template text="""H drive, four terabyte drives, um, dedicated to my, um, really overblown emacs build process.""" start="00:19:55.680" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, this just lets me be super lazy. There's no reason you need any massive amount of storage""" start="00:20:08.160" video="qanda-windows" id="subtitle"]] +[[!template text="""to do any of this. Um, inside here, and now I'll actually switch you back to the other screen.""" start="00:20:14.000" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, we'll, we'll find,""" start="00:20:23.040" video="qanda-windows" id="subtitle"]] +[[!template text="""oops, sorry about that. I didn't take the time to label that one. Um, so here you can see""" start="00:20:37.280" video="qanda-windows" id="subtitle"]] +[[!template text="""the primary output that I'm looking at through this automated process. I come along, I look at""" start="00:20:46.480" video="qanda-windows" id="subtitle"]] +[[!template text="""the bug reports, or maybe I'm just restarting my computer and choosing what emacs version at random.""" start="00:20:53.760" video="qanda-windows" id="subtitle"]] +[[!template text="""And then in that case, I look at this modified date and I say, um, my config that I, you know,""" start="00:20:59.840" video="qanda-windows" id="subtitle"]] +[[!template text="""that I'm playing with right now is all set for emacs 30, or I'm testing the both and I'm""" start="00:21:06.240" video="qanda-windows" id="subtitle"]] +[[!template text="""relaunching both of these. Right. So for me, that starts by diving into the install folder,""" start="00:21:11.120" video="qanda-windows" id="subtitle"]] +[[!template text="""going into the bin folder, which looks exactly the way my automation leaves it. I then come in""" start="00:21:16.400" video="qanda-windows" id="subtitle"]] +[[!template text="""to run the run emacs and I create a shortcut, um, to it. So I'm a keyboard person. So that's""" start="00:21:22.720" video="qanda-windows" id="subtitle"]] +[[!template text="""usually done like this. And then I just know that the context menu is going to come up in the right""" start="00:21:34.320" video="qanda-windows" id="subtitle"]] +[[!template text="""place. So I'll come up and, um, possibly change the, change the shortcut, right.""" start="00:21:40.400" video="qanda-windows" id="subtitle"]] +[[!template text="""If I don't mess with it. Um, so here's where I'll add my minus Q, if that's kind of where""" start="00:21:53.120" video="qanda-windows" id="subtitle"]] +[[!template text="""my world was at, or it kind of depends on what I'm doing with these, which varies week to week.""" start="00:22:01.280" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, so restarting my emacs, uh, involves doing the same thing, going to my desktop""" start="00:22:07.440" video="qanda-windows" id="subtitle"]] +[[!template text="""and where you'll find a number of emac shortcuts and, um, updating the shortcut in the same manner""" start="00:22:12.560" video="qanda-windows" id="subtitle"]] +[[!template text="""joint actually, maybe we'll just, let's go back there and just show it.""" start="00:22:23.920" video="qanda-windows" id="subtitle"]] +[[!template text="""So if we look at, for example, my ERC,""" start="00:22:28.000" video="qanda-windows" id="subtitle"]] +[[!template text="""you can see, it's going to be pointing at one of these clones and then it's going to""" start="00:22:31.760" video="qanda-windows" id="subtitle"]] +[[!template text="""maybe tell me that I want, it wants to be full screen. Nope, not currently. And then it might,""" start="00:22:39.760" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, have some stuff in there about auto-loading at config and what""" start="00:22:44.720" video="qanda-windows" id="subtitle"]] +[[!template text="""connections I'm going to, some commands I've defined to start connections.""" start="00:22:48.720" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. And sorry, I got a phone call. I was checking. It wasn't in an org, the org,""" start="00:22:53.280" video="qanda-windows" id="subtitle"]] +[[!template text="""not the other organizers giving me the hook. So, um, all right. So that's, that's probably""" start="00:22:57.680" video="qanda-windows" id="subtitle"]] +[[!template text="""enough on the local system. Let's get back to the, to, to building emacs. And now it hopefully makes""" start="00:23:04.160" video="qanda-windows" id="subtitle"]] +[[!template text="""a certain amount of sense when I say we're going to wander over to the H drive and, and, and, and,""" start="00:23:11.440" video="qanda-windows" id="subtitle"]] +[[!template text="""hopefully makes a certain amount of sense when I say we're going to wander over to the H drive""" start="00:23:17.920" video="qanda-windows" id="subtitle"]] +[[!template text="""and recreate the structure that, um, both my process sort of assumes and the scripts you'll""" start="00:23:22.560" video="qanda-windows" id="subtitle"]] +[[!template text="""find in the admin NT, uh, build disk folder in source used to assume. Those scripts are in need""" start="00:23:31.520" video="qanda-windows" id="subtitle"]] +[[!template text="""of some love. And in just a little bit, I'll be mentioning a build, uh, a, uh, a, a, a particular""" start="00:23:41.440" video="qanda-windows" id="subtitle"]] +[[!template text="""bug that you might want to pay attention to if you're interested in making a self-installer.""" start="00:23:49.440" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. So, um, we're going to create, uh, an emacs build directory.""" start="00:23:54.800" video="qanda-windows" id="subtitle"]] +[[!template text="""And we've got a handy git clone stage, git clone command stage for ourself. That would work. Um,""" start="00:24:04.320" video="qanda-windows" id="subtitle"]] +[[!template text="""do not currently see anybody lobbying for that. So instead we will run the rather faster""" start="00:24:19.360" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, W get command on Savannah, which is not pasted in here. Nice. Let's see if I can freehand it.""" start="00:24:27.120" video="qanda-windows" id="subtitle"]] +[[!template text="""Not going to do it. Uh,""" start="00:24:36.080" video="qanda-windows" id="subtitle"]] +[[!template text="""okay.""" start="00:24:40.720" video="qanda-windows" id="subtitle"]] +[[!template text="""I beg your pardon. I'm grabbing a URL from the internet.""" start="00:24:52.000" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, okay. Yeah, I can, I can honestly, I can freehand it, whatever. Okay. Sorry. I, uh,""" start="00:25:00.080" video="qanda-windows" id="subtitle"]] +[[!template text="""I didn't have that bookmarked in all handy. Like I thought I did. Um, so we'll just say""" start="00:25:07.680" video="qanda-windows" id="subtitle"]] +[[!template text="""ftp.gnu.org slash, uh, what is it? Pub emacs, emacs-29.1, uh, .org.gnu.org.exe.""" start="00:25:13.200" video="qanda-windows" id="subtitle"]] +[[!template text="""I really think I'd have this command sitting around. It makes me want to scrap the whole""" start="00:25:30.480" video="qanda-windows" id="subtitle"]] +[[!template text="""demo. I'm not going to lie. Okay. How am I doing? Um, I think at least 15 minutes. Um,""" start="00:25:47.040" video="qanda-windows" id="subtitle"]] +[[!template text="""but in the command that you were freehanding, should the pub be GNU instead?""" start="00:25:54.720" video="qanda-windows" id="subtitle"]] +[[!template text="""Oh, thanks. I'm sorry.""" start="00:25:59.120" video="qanda-windows" id="subtitle"]] +[[!template text="""There we go. Thank you. All right. And then we'll,""" start="00:26:07.440" video="qanda-windows" id="subtitle"]] +[[!template text="""and I'm not sure I provided commands for this either,""" start="00:26:17.760" video="qanda-windows" id="subtitle"]] +[[!template text="""but it is trivially easy to do. And while that happens, we'll get to move on a few slides.""" start="00:26:20.720" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, the configure script I'm not talking about in a lot of detail, but I do want to mention that the""" start="00:26:31.760" video="qanda-windows" id="subtitle"]] +[[!template text="""GNU binaries are provided with native, uh, compilation enabled. That's the feature that""" start="00:26:38.000" video="qanda-windows" id="subtitle"]] +[[!template text="""uses gcc lib gcc get on windows. If available, that lib gcc get will be used. Um, but when,""" start="00:26:44.800" video="qanda-windows" id="subtitle"]] +[[!template text="""but, uh, if, if, uh, emacs has that feature, then it will take by compile, uh, native code and,""" start="00:26:55.360" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, asynchronously compile that as needed, uh, with the ahead of time feature. We're going to""" start="00:27:03.200" video="qanda-windows" id="subtitle"]] +[[!template text="""do as much of that ahead of time. And for folks that are consuming the windows binary, the""" start="00:27:10.880" video="qanda-windows" id="subtitle"]] +[[!template text="""thinking goes that they might not have my assist too. They might not have lib gcc jet. They might""" start="00:27:15.360" video="qanda-windows" id="subtitle"]] +[[!template text="""be happy that they're enabled in a, you know, a lot of time running emacs on their local environments""" start="00:27:21.360" video="qanda-windows" id="subtitle"]] +[[!template text="""at all, you know, in a, maybe a lockdown, uh, corporate context. So aside that, um, there's""" start="00:27:30.400" video="qanda-windows" id="subtitle"]] +[[!template text="""your first glimpse at the configure, um, program that we're going to run in a moment. In fact,""" start="00:27:39.120" video="qanda-windows" id="subtitle"]] +[[!template text="""I'm going to go as far as putting it on the clipboard. Um, really just looking at this,""" start="00:27:45.120" video="qanda-windows" id="subtitle"]] +[[!template text="""the AOT flag is the one I'd call attention to, but it's worth understanding that windows doesn't""" start="00:27:52.160" video="qanda-windows" id="subtitle"]] +[[!template text="""provide a D bus capability. So windows native program isn't going to be able to depend on D""" start="00:27:57.120" video="qanda-windows" id="subtitle"]] +[[!template text="""bus. We're going to, we're going to explicitly ask that that be left out. I think that's actually""" start="00:28:02.000" video="qanda-windows" id="subtitle"]] +[[!template text="""optional and it's documentation. I think the configure program is smart enough to know that""" start="00:28:07.600" video="qanda-windows" id="subtitle"]] +[[!template text="""we don't want D bus on windows. Um, otherwise we tend to compile with things. Um, there there's""" start="00:28:12.080" video="qanda-windows" id="subtitle"]] +[[!template text="""missing documentation. We could say the, uh, all of the libraries are treated in the way I mentioned""" start="00:28:20.080" video="qanda-windows" id="subtitle"]] +[[!template text="""in that, um, JPEG support will be available as long as the JPEG is, is available in our environment""" start="00:28:26.320" video="qanda-windows" id="subtitle"]] +[[!template text="""and configure script certainly notices that, um, the GNU provided binaries are provided with""" start="00:28:34.880" video="qanda-windows" id="subtitle"]] +[[!template text="""minus O2. And that's also my default personally on windows. Um, however, and I'm going to skip""" start="00:28:40.320" video="qanda-windows" id="subtitle"]] +[[!template text="""this since I mentioned it, um, mentioned, uh, and, uh, um, so I guess I'll say, um, you can,""" start="00:28:47.280" video="qanda-windows" id="subtitle"]] +[[!template text="""um, say with the, it's worth knowing that you, if you're not one reason that, that you're building""" start="00:28:59.680" video="qanda-windows" id="subtitle"]] +[[!template text="""might be because you want to turn off native compilation for whatever reason. If you have""" start="00:29:06.560" video="qanda-windows" id="subtitle"]] +[[!template text="""low juices, you get, get, but don't want Emacs to use it. Uh, especially as that default looks like""" start="00:29:11.200" video="qanda-windows" id="subtitle"]] +[[!template text="""it could be changing with Emacs 30. Um, the, uh, the debug configuration, um, this is, this is the,""" start="00:29:16.640" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, kind of, uh, what, what I'm currently using this on commentary, uh, I've seen on the next""" start="00:29:26.480" video="qanda-windows" id="subtitle"]] +[[!template text="""development list. Let's check on our checkout and see if we can't get a build running. Um,""" start="00:29:33.200" video="qanda-windows" id="subtitle"]] +[[!template text="""this is a release build, so I won't be starting with, uh, so we'll start by hopping into its""" start="00:29:45.280" video="qanda-windows" id="subtitle"]] +[[!template text="""directory and we, um, we have, uh, but not. Okay. So that tells us we're going to run""" start="00:29:51.440" video="qanda-windows" id="subtitle"]] +[[!template text="""our configure program, but we don't need to run a config IC. So,""" start="00:30:14.640" video="qanda-windows" id="subtitle"]] +[[!template text="""so let's get that going and, uh,""" start="00:30:31.280" video="qanda-windows" id="subtitle"]] +[[!template text="""hopefully that's showing through just enough to be fun, not too much to be distracting.""" start="00:30:36.000" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, the, uh, the unoptimized, uh, uh, um, please report issues. If your Emacs is crashing,""" start="00:30:45.040" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, to the Emacs development list, not to me personally. Um, although you are of course,""" start="00:30:55.760" video="qanda-windows" id="subtitle"]] +[[!template text="""welcome to copy me. Um, if you especially I'm subscribed to that list, so I get all the mail.""" start="00:31:01.200" video="qanda-windows" id="subtitle"]] +[[!template text="""So I don't mind being copied. Uh, and, uh, as well, if you think it's, uh,""" start="00:31:06.960" video="qanda-windows" id="subtitle"]] +[[!template text="""you know, related to packaging, that actually makes sense or windows related to even, and,""" start="00:31:15.040" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, it can be tested with an extra snapshot that should be uploaded to the canoe alpha side.""" start="00:31:20.160" video="qanda-windows" id="subtitle"]] +[[!template text="""I could look at that if I have time. There's with the configure script to make file for""" start="00:31:25.120" video="qanda-windows" id="subtitle"]] +[[!template text="""Emacs is really, really complicated. If time permits, which I'm now confident it will not,""" start="00:31:32.160" video="qanda-windows" id="subtitle"]] +[[!template text="""we will look at, uh, make file that I tried writing that, uh, orchestrates this whole""" start="00:31:39.840" video="qanda-windows" id="subtitle"]] +[[!template text="""process that I'm talking about. Um, as, uh, let's see. So the build, uh, build process,""" start="00:31:44.240" video="qanda-windows" id="subtitle"]] +[[!template text="""I run my builds with, uh, explosively specifying the max CPU, uh, with minus J, but minus B one""" start="00:31:52.160" video="qanda-windows" id="subtitle"]] +[[!template text="""to get the full build, uh, full log into your recipes. That is probably the magic thing.""" start="00:32:03.120" video="qanda-windows" id="subtitle"]] +[[!template text="""Matt, um, shouldn't to understand what, uh,""" start="00:32:09.040" video="qanda-windows" id="subtitle"]] +[[!template text="""or that, uh, that, that, uh, that I'm glad that I know, uh, as I'm trying to write my automations,""" start="00:32:16.000" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, the, um, so I call that out here, the binary, uh, releases. Um, okay. So in this section,""" start="00:32:26.960" video="qanda-windows" id="subtitle"]] +[[!template text="""we're going to start to get into what are all those files. And there's a bug report related to""" start="00:32:36.080" video="qanda-windows" id="subtitle"]] +[[!template text="""that, but I didn't get into here. So, um, that's kind of to the point about the less said about""" start="00:32:41.120" video="qanda-windows" id="subtitle"]] +[[!template text="""this, the better, uh, that's my explanation for stepping through some of these slides.""" start="00:32:46.640" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, of course we'll share them all, uh, uh, hopefully by the time that this video is published.""" start="00:32:50.800" video="qanda-windows" id="subtitle"]] +[[!template text="""Oh, I mentioned, um, I may have mentioned already freshly installed, but, uh, fully installed. Uh,""" start="00:32:58.960" video="qanda-windows" id="subtitle"]] +[[!template text="""the, the, the key distinction here is that, uh, Emacs is distributed in the binary form for Windows""" start="00:33:06.640" video="qanda-windows" id="subtitle"]] +[[!template text="""with some DLL files that actually come from the mysys2 project. There's an implication there to""" start="00:33:15.200" video="qanda-windows" id="subtitle"]] +[[!template text="""there's an implication there to GCC that I definitely want to get to it talking about.""" start="00:33:21.760" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, so freshly installed means we haven't copied those binaries from the mysys2, uh,""" start="00:33:28.080" video="qanda-windows" id="subtitle"]] +[[!template text="""installation into the Emacs, uh, installation. Uh, and then, uh, when we re-archived that""" start="00:33:35.840" video="qanda-windows" id="subtitle"]] +[[!template text="""local Emacs installation, that's how we're going to create the full zip.""" start="00:33:45.360" video="qanda-windows" id="subtitle"]] +[[!template text="""So hopefully that actually is a pretty good summary of what all those files are. Um, but""" start="00:33:48.640" video="qanda-windows" id="subtitle"]] +[[!template text="""there are readme files, uh, on the FTP that do a pretty good job, um, if you can dig enough to find""" start="00:33:54.160" video="qanda-windows" id="subtitle"]] +[[!template text="""one and my apologies for, uh, tardiness getting a new version on that posted. Um, the Emacs, uh,""" start="00:34:00.320" video="qanda-windows" id="subtitle"]] +[[!template text="""so those dependencies, uh, are listed within Emacs itself. And as we'll just talk about in a moment,""" start="00:34:11.120" video="qanda-windows" id="subtitle"]] +[[!template text="""there's a way, uh, that we can use, we can access that when we collect them in order to meet, uh,""" start="00:34:17.040" video="qanda-windows" id="subtitle"]] +[[!template text="""the GCC requirement that is essentially to include, um, include the sources for the,""" start="00:34:24.240" video="qanda-windows" id="subtitle"]] +[[!template text="""for those binaries, the things that were compiled against. Um, the, uh, so, so here we go,""" start="00:34:31.840" video="qanda-windows" id="subtitle"]] +[[!template text="""we're, we're into the build process. Let's just take a look and see if configure it got done.""" start="00:34:41.200" video="qanda-windows" id="subtitle"]] +[[!template text="""It sure did. And now we can see a table of, of hopefully good, but good and bad news, um,""" start="00:34:45.280" video="qanda-windows" id="subtitle"]] +[[!template text="""and potential, um, where we're learning that we're using the pdumper strategy and any number of other""" start="00:34:52.240" video="qanda-windows" id="subtitle"]] +[[!template text="""things that we might be messing with as our motivation for, for building ourselves on Emacs.""" start="00:34:57.840" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, again, this table represents, uh, what you'll, what, what, what it looks like for me when I'm""" start="00:35:04.320" video="qanda-windows" id="subtitle"]] +[[!template text="""building for the GNU distributed binaries. All right. So, um, kind of moving, moving as quickly""" start="00:35:12.560" video="qanda-windows" id="subtitle"]] +[[!template text="""as I can here. I'm at 40 after, I believe that's the five minute mark. So, um, having just succeeded""" start="00:35:22.720" video="qanda-windows" id="subtitle"]] +[[!template text="""in, in configuring Emacs, I don't think we're going to build it. Uh, uh, I don't think we're""" start="00:35:31.200" video="qanda-windows" id="subtitle"]] +[[!template text="""going to actually get to running make install. Um, but I have it sitting here on my keyboard""" start="00:35:37.040" video="qanda-windows" id="subtitle"]] +[[!template text="""or clipboard, assuming that we will, right? No. Oh, wow. I think I've managed to confuse this.""" start="00:35:43.280" video="qanda-windows" id="subtitle"]] +[[!template text="""All right. So for me, that looks simply like, uh, make, uh, V equals one install, uh,""" start="00:35:54.320" video="qanda-windows" id="subtitle"]] +[[!template text="""prefix equals, uh,""" start="00:36:08.160" video="qanda-windows" id="subtitle"]] +[[!template text="""and we can at least get it kicked off.""" start="00:36:18.400" video="qanda-windows" id="subtitle"]] +[[!template text="""And that can, that command is just, uh, just is no, no different than I showed on the slide where""" start="00:36:20.640" video="qanda-windows" id="subtitle"]] +[[!template text="""I, where I gave it, uh, wasn't planning to stop and explain it. I was just planning to paste it.""" start="00:36:27.680" video="qanda-windows" id="subtitle"]] +[[!template text="""So, so, so again, recapping the rest of the process here and maybe actually making it,""" start="00:36:33.360" video="qanda-windows" id="subtitle"]] +[[!template text="""if you can believe it or not, through the rest of these slides, um, we, to, to, to create the""" start="00:36:38.640" video="qanda-windows" id="subtitle"]] +[[!template text="""full set of binaries, we're going to need a no dependent, no depths archive. That's without the""" start="00:36:44.800" video="qanda-windows" id="subtitle"]] +[[!template text="""mysys2, uh, deal provided DLLs, just the things that we compile as part of making Emacs. Um,""" start="00:36:49.600" video="qanda-windows" id="subtitle"]] +[[!template text="""the, uh, the build depths zip script is provided with the source distribution is your tool for,""" start="00:37:00.320" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, meeting the GPL requirements, right? Source as mentioned before,""" start="00:37:07.840" video="qanda-windows" id="subtitle"]] +[[!template text="""um, there is a second bug that I did, uh, include some more information on in my notes already.""" start="00:37:12.640" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, that, uh, that gets into the details of this other feature I alluded to.""" start="00:37:19.680" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, I'll just skip into that. Um, we, we can, with, with, uh, with a, an appropriate version""" start="00:37:26.480" video="qanda-windows" id="subtitle"]] +[[!template text="""of that, which you may need a patch, uh, to, to have, you can list out the dependencies""" start="00:37:35.680" video="qanda-windows" id="subtitle"]] +[[!template text="""and, and that version as well. Can consider the dependencies of the Emacs binary versus""" start="00:37:42.240" video="qanda-windows" id="subtitle"]] +[[!template text="""the hard-coded list you might find, depending on when you look at this file in the source tree.""" start="00:37:47.200" video="qanda-windows" id="subtitle"]] +[[!template text="""The diff, um, so I also have a hack here that, uh, works around the absolute requirement to""" start="00:37:53.680" video="qanda-windows" id="subtitle"]] +[[!template text="""run this with the mysys2 and not the minGW64 script. Um, once we've made that zip file that""" start="00:38:01.600" video="qanda-windows" id="subtitle"]] +[[!template text="""contain that's, that's our installed Emacs without the DLLs provided by mysys2, we'll then unpack""" start="00:38:18.320" video="qanda-windows" id="subtitle"]] +[[!template text="""the dependencies that were created by that Python script we just talked about from the Emacs source""" start="00:38:25.360" video="qanda-windows" id="subtitle"]] +[[!template text="""tree. At that point, once those are unpacked, we can now make what's called the full installer,""" start="00:38:30.960" video="qanda-windows" id="subtitle"]] +[[!template text="""or sometimes I might call it the unqualified installer, because it's just going to be called""" start="00:38:38.080" video="qanda-windows" id="subtitle"]] +[[!template text="""Emacs29.1.zip. Um, and that, uh, that file, which, which creates the, the, the, the, the,""" start="00:38:42.800" video="qanda-windows" id="subtitle"]] +[[!template text="""which creates the archive, uh, that, uh, that, that, that file is exactly the same,""" start="00:38:54.800" video="qanda-windows" id="subtitle"]] +[[!template text="""plus the, uh, the dependencies that we unzipped in the bin folder of the installed Emacs.""" start="00:39:02.640" video="qanda-windows" id="subtitle"]] +[[!template text="""The, uh, executable self-installer, which I would love to have more time to talk about.""" start="00:39:09.680" video="qanda-windows" id="subtitle"]] +[[!template text="""I gave a few pointers here on the hard part of running it. Most importantly,""" start="00:39:14.480" video="qanda-windows" id="subtitle"]] +[[!template text="""if I've installed in any kind of funny looking name, I end up renaming it to like Emacs-29.1""" start="00:39:19.680" video="qanda-windows" id="subtitle"]] +[[!template text="""or Emacs-29. or 30.0.50 or whatever. And I just renamed that installed Emacs folder.""" start="00:39:26.640" video="qanda-windows" id="subtitle"]] +[[!template text="""And then I go to the root of wherever I created that, the parent directory above it.""" start="00:39:35.200" video="qanda-windows" id="subtitle"]] +[[!template text="""And that's where I make my copy of the Emacs NSI, um, the, the NSIS script.""" start="00:39:40.320" video="qanda-windows" id="subtitle"]] +[[!template text="""And, uh, that's also where I, and then, um, then from that parent directory, I execute,""" start="00:39:47.520" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, making sys, uh, here. I, as mentioned, um, I, I can get away with this because I have it""" start="00:39:55.600" video="qanda-windows" id="subtitle"]] +[[!template text="""on my path and it's my recollection. I think I tested this and couldn't reproduce the problem.""" start="00:40:02.560" video="qanda-windows" id="subtitle"]] +[[!template text="""So I didn't document it here, but I've had some problems with running this""" start="00:40:07.520" video="qanda-windows" id="subtitle"]] +[[!template text="""when, uh, when NSIS wasn't on my path. The, uh, the, the, the final step here""" start="00:40:11.200" video="qanda-windows" id="subtitle"]] +[[!template text="""and the last, the GPL requirement is to include all the sources, except when I'm doing a release""" start="00:40:20.400" video="qanda-windows" id="subtitle"]] +[[!template text="""build, I always do this. Um, and that's the new practice when making Snapchat binaries is to go""" start="00:40:27.600" video="qanda-windows" id="subtitle"]] +[[!template text="""ahead and include the sources, even though we might have the specific revision number, um,""" start="00:40:34.320" video="qanda-windows" id="subtitle"]] +[[!template text="""our thinking is we want absolute clarity, um, that, that somebody, uh, can say, okay,""" start="00:40:39.840" video="qanda-windows" id="subtitle"]] +[[!template text="""this binary did this thing, send me the source for it. I'm going to go take that into my own""" start="00:40:46.800" video="qanda-windows" id="subtitle"]] +[[!template text="""open source, or yeah, maybe they would, the jerks, um, into my own open source project.""" start="00:40:51.200" video="qanda-windows" id="subtitle"]] +[[!template text="""And, um, you know, off they go, uh, and that needs to be possible.""" start="00:40:56.880" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, so, um, beyond that, the rest of this is, is really detailed that you find covered in the GNU""" start="00:41:04.800" video="qanda-windows" id="subtitle"]] +[[!template text="""maintainers manual. Um, this is the, the current set of Windows binaries that, um, it's busily""" start="00:41:12.480" video="qanda-windows" id="subtitle"]] +[[!template text="""working on creating a like for like a mirror to behind the scenes here is called a 29.1 underscore""" start="00:41:19.520" video="qanda-windows" id="subtitle"]] +[[!template text="""two. Um, and I have a lot of automation, uh, available on this site. So at this point,""" start="00:41:29.040" video="qanda-windows" id="subtitle"]] +[[!template text="""I'm just, I think I'm only a minute, 40 seconds over. I'm gonna invite my, uh, co-organizers""" start="00:41:36.080" video="qanda-windows" id="subtitle"]] +[[!template text="""back onto the call or any volunteers that want to jump in and anybody, if there's people on the""" start="00:41:45.200" video="qanda-windows" id="subtitle"]] +[[!template text="""BBB, I'd be happy to take questions. If there aren't, um, I have a screen full of, uh, the""" start="00:41:49.760" video="qanda-windows" id="subtitle"]] +[[!template text="""automation stuff ready to go as a kind of a second ring in my circus today. So if you're still with""" start="00:41:57.440" video="qanda-windows" id="subtitle"]] +[[!template text="""me, thanks a lot for joining me. And I really enjoyed this talk. Uh, if this is where we're""" start="00:42:04.080" video="qanda-windows" id="subtitle"]] +[[!template text="""going to close it out, I don't know where we're at for schedule today. Thanks a lot for a great""" start="00:42:08.640" video="qanda-windows" id="subtitle"]] +[[!template text="""talk, Corwin. Um, in terms of like schedule, yeah, you went over a little bit for the official,""" start="00:42:14.560" video="qanda-windows" id="subtitle"]] +[[!template text="""like, um, schedule or time of your talk, but I think, uh, we actually have maybe like six or""" start="00:42:20.880" video="qanda-windows" id="subtitle"]] +[[!template text="""seven more minutes, um, here on stream for, um, questions and such, if folks have questions,""" start="00:42:26.880" video="qanda-windows" id="subtitle"]] +[[!template text="""or if you want to like quickly maybe show one or two more things. Um, but I think the hard stuff""" start="00:42:32.640" video="qanda-windows" id="subtitle"]] +[[!template text="""is about like maybe 10 minutes ish for now. And then we'll have to rush over to, um, uh, for the""" start="00:42:38.320" video="qanda-windows" id="subtitle"]] +[[!template text="""closing remarks. So, well, that sounds awesome. Okay. So I'm looking at the, the dev chat. Uh,""" start="00:42:43.520" video="qanda-windows" id="subtitle"]] +[[!template text="""I see a comment on cross-compiling the emacs, but I'm sorry, I'm looking at IRC primarily, but,""" start="00:42:55.520" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, feel free to jump in if you're on, uh, BBB with me, or, uh, uh, if, if you put something on""" start="00:43:01.040" video="qanda-windows" id="subtitle"]] +[[!template text="""the pad, I'm sure, uh, we'll see it between the two of us, uh, over here. Okay. So cross-compiling""" start="00:43:08.160" video="qanda-windows" id="subtitle"]] +[[!template text="""emacs for Serenity. I haven't tried really any cross-compiling. I think that would be very""" start="00:43:16.400" video="qanda-windows" id="subtitle"]] +[[!template text="""interesting. I would most likely focus on doing exactly what I do on a GNU system, completely""" start="00:43:20.640" video="qanda-windows" id="subtitle"]] +[[!template text="""ditching. Um, so I guess with my, my remaining time, rather than walking through code, um, for""" start="00:43:28.240" video="qanda-windows" id="subtitle"]] +[[!template text="""my automation, which can be another talk, if in fact there's an interest in that, um, I want to,""" start="00:43:35.760" video="qanda-windows" id="subtitle"]] +[[!template text="""I guess, say a couple of words about the non-free operating system that I'm using here. I did my""" start="00:43:42.080" video="qanda-windows" id="subtitle"]] +[[!template text="""best to use no non-free software other than the, uh, the operating system that is the context for""" start="00:43:48.480" video="qanda-windows" id="subtitle"]] +[[!template text="""this talk in preparing this talk for you. I personally have a lot more, uh, time and energy,""" start="00:43:58.880" video="qanda-windows" id="subtitle"]] +[[!template text="""I have to say, invested in proprietary tools for doing a lot of the things that, that go into this.""" start="00:44:07.920" video="qanda-windows" id="subtitle"]] +[[!template text="""So I really respect the work of people that pull that off. Um, I'm sorry I didn't get my pre-recorded""" start="00:44:15.840" video="qanda-windows" id="subtitle"]] +[[!template text="""stuff, uh, kind of in order for everybody, but I just want to stress, like, uh, it is all absolutely""" start="00:44:22.000" video="qanda-windows" id="subtitle"]] +[[!template text="""possible and just hats off to everybody that, that used, uh, entirely free software to get their,""" start="00:44:30.320" video="qanda-windows" id="subtitle"]] +[[!template text="""get their recordings done in time. Um, and what you did see, unless it was provided by the operating""" start="00:44:36.240" video="qanda-windows" id="subtitle"]] +[[!template text="""system in my presentation today, was all, uh, free software with the debatable exception of""" start="00:44:43.360" video="qanda-windows" id="subtitle"]] +[[!template text="""NSYS, which styles itself as open source, maybe for, uh, marketing reasons.""" start="00:44:49.200" video="qanda-windows" id="subtitle"]] +[[!template text="""Okay, uh, in any case, uh, certainly we can get all that source.""" start="00:44:56.720" video="qanda-windows" id="subtitle"]] +[[!template text="""Thanks for the note, Corin. It's good to know that, uh, building or, uh, yeah, doing the build of Emacs""" start="00:45:08.080" video="qanda-windows" id="subtitle"]] +[[!template text="""for Windows on Windows can be done, uh, using only free software. Yeah, absolutely.""" start="00:45:14.720" video="qanda-windows" id="subtitle"]] +[[!template text="""Probably the right closing note, right? Um, I just, uh, thanks again to the organizers for""" start="00:45:23.440" video="qanda-windows" id="subtitle"]] +[[!template text="""bearing with me. And like, every time I was like, you guys, I'm terrible at this. They're just like,""" start="00:45:29.520" video="qanda-windows" id="subtitle"]] +[[!template text="""no, you're doing fine. Keep going. You did a great job live last time. You can do it live,""" start="00:45:33.920" video="qanda-windows" id="subtitle"]] +[[!template text="""you know, and, and saying all the right things to just, uh, encourage me to come back,""" start="00:45:38.240" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, this year and every year.""" start="00:45:43.920" video="qanda-windows" id="subtitle"]] +[[!template text="""Well, as I said before, we were very lucky to have you and the rest of the team, of course,""" start="00:45:49.760" video="qanda-windows" id="subtitle"]] +[[!template text="""as well. And, um, goes without saying, but all the speakers and the audience, the participants as""" start="00:45:53.520" video="qanda-windows" id="subtitle"]] +[[!template text="""well. So, um, so, uh, are we, we're still live over here that, you know, you know, me, I'm the""" start="00:45:59.520" video="qanda-windows" id="subtitle"]] +[[!template text="""Mike Hogg that I am. I can't resist, um, throwing, throwing up another screen here. And, uh, in fact,""" start="00:46:14.240" video="qanda-windows" id="subtitle"]] +[[!template text="""let's go ahead and go back to our, to our crawler, right? And I'll bring back our build""" start="00:46:22.800" video="qanda-windows" id="subtitle"]] +[[!template text="""if it finishes and maybe we'll show making the installer as well. Um, uh, but I have the CPU""" start="00:46:32.160" video="qanda-windows" id="subtitle"]] +[[!template text="""account turned down a little bit here. Uh, note, I didn't specify minus J here. Um, so, uh, over""" start="00:46:40.480" video="qanda-windows" id="subtitle"]] +[[!template text="""here is my automation. Uh, in case you do want to take a look, I can at least provide the""" start="00:46:49.680" video="qanda-windows" id="subtitle"]] +[[!template text="""orientation of what you're looking at. Scrape log is probably my first thing I want to show off.""" start="00:46:54.000" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, it's not beautiful, but this works, uh, pretty well for me to get a sense of something might""" start="00:46:59.760" video="qanda-windows" id="subtitle"]] +[[!template text="""have changed in terms of how many warnings or errors are happening when I build Emacs. So I""" start="00:47:08.400" video="qanda-windows" id="subtitle"]] +[[!template text="""have this whole automation going on and I frequently want to answer the question,""" start="00:47:14.720" video="qanda-windows" id="subtitle"]] +[[!template text="""you know, what's the change rate in, uh, warnings or what have you. So this kind of gives me a count""" start="00:47:19.280" video="qanda-windows" id="subtitle"]] +[[!template text="""of that. Um, so from there, uh, accrued CI is the script we're watching run in the other pane.""" start="00:47:26.400" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, we can see it's, uh, just starting to do its thing again.""" start="00:47:37.840" video="qanda-windows" id="subtitle"]] +[[!template text="""And, uh, the make file I mentioned, this is a top-down rewrite of everything else that I've done.""" start="00:47:48.800" video="qanda-windows" id="subtitle"]] +[[!template text="""It has some bugs right now. Um, the, uh, the build distribution is the main script that I use for my""" start="00:47:57.040" video="qanda-windows" id="subtitle"]] +[[!template text="""personal builds. This is what is run by the crude CI script. Uh, it has a fun tie-in to this, uh,""" start="00:48:08.640" video="qanda-windows" id="subtitle"]] +[[!template text="""web interface here, um, where we can, you don't need the port number when you go to it. That's""" start="00:48:17.120" video="qanda-windows" id="subtitle"]] +[[!template text="""just if I'm going to post. Um, the, uh, blah, blah, blah, blah, blah. This, this script is""" start="00:48:23.200" video="qanda-windows" id="subtitle"]] +[[!template text="""really long and complicated and probably needs some diving into, but you can see that, um, one""" start="00:48:33.680" video="qanda-windows" id="subtitle"]] +[[!template text="""of the complexities I have to deal with is that I'm going to need something in the format of an""" start="00:48:39.120" video="qanda-windows" id="subtitle"]] +[[!template text="""emacs-version for strategic, um, nsys reasons. So, uh, it takes care of kind of every complexity""" start="00:48:43.840" video="qanda-windows" id="subtitle"]] +[[!template text="""that I mentioned today in some respects, um, as does the make file. Build release is, um, another""" start="00:48:54.480" video="qanda-windows" id="subtitle"]] +[[!template text="""fairly useful incarnation of this. This is just focused on the release process, and this does""" start="00:49:03.120" video="qanda-windows" id="subtitle"]] +[[!template text="""work, uh, for example, to create the, the, the, you know, like, like, well, I could like, uh,""" start="00:49:11.360" video="qanda-windows" id="subtitle"]] +[[!template text="""for like files as far as I can tell. So what are currently posted for emacs 29.1 and the release""" start="00:49:18.800" video="qanda-windows" id="subtitle"]] +[[!template text="""candidate. Um, so I'll probably use that next time. And if it's still like, for like, I'll""" start="00:49:25.600" video="qanda-windows" id="subtitle"]] +[[!template text="""probably post the ones that came from this. Um, uh, building, uh, TreeSitter, I make some DLLs""" start="00:49:32.400" video="qanda-windows" id="subtitle"]] +[[!template text="""there. If you're looking for hints on how to get going or just simply, uh, a huge long list""" start="00:49:40.960" video="qanda-windows" id="subtitle"]] +[[!template text="""of Git repositories that make grammars, you can use that is here as well. Um, finally, I mentioned""" start="00:49:47.120" video="qanda-windows" id="subtitle"]] +[[!template text="""I have a, um, I have a website where I publish my own personal snapshots that I make, uh, that""" start="00:49:55.840" video="qanda-windows" id="subtitle"]] +[[!template text="""folder full of install directories, but all of the usual GNU style binary distributables, including""" start="00:50:04.800" video="qanda-windows" id="subtitle"]] +[[!template text="""the source code and the source code for the dependencies. Um, the, uh, so this program is""" start="00:50:11.680" video="qanda-windows" id="subtitle"]] +[[!template text="""another one of those complicated find commands and therefore potentially the most useful thing""" start="00:50:22.320" video="qanda-windows" id="subtitle"]] +[[!template text="""in here to take to you. Um, and here I'm deleting, uh, binaries older than 17 years. Uh, everything""" start="00:50:27.680" video="qanda-windows" id="subtitle"]] +[[!template text="""except the, uh, node apps file and the sources of it you'll find on my website. Currently those""" start="00:50:34.960" video="qanda-windows" id="subtitle"]] +[[!template text="""indefinitely, I'll probably roll out 120 days or something, um, for those eventually.""" start="00:50:42.240" video="qanda-windows" id="subtitle"]] +[[!template text="""Oh, uh, I can talk about this one even. Um, the, uh, so here you'll see the two branches that I'm""" start="00:50:53.600" video="qanda-windows" id="subtitle"]] +[[!template text="""tracking. The job of this script is, uh, this runs on the website. I call it with a, like a remote""" start="00:51:00.400" video="qanda-windows" id="subtitle"]] +[[!template text="""rsync, uh, type, uh, or an SSA remote, uh, SSH command. Um, and right after the rsync,""" start="00:51:06.560" video="qanda-windows" id="subtitle"]] +[[!template text="""rsyncing up any new Emacs that I built. And, uh, it's, uh, it's job is to update my fancy""" start="00:51:15.920" video="qanda-windows" id="subtitle"]] +[[!template text="""directory indexing. So let's look at Corwin's website. Here's my Emacs 29 folder.""" start="00:51:26.080" video="qanda-windows" id="subtitle"]] +[[!template text="""We have about two more minutes, Corwin. Yeah. It'll take that entire two minutes to, uh,""" start="00:51:37.360" video="qanda-windows" id="subtitle"]] +[[!template text="""load this directory because I am, because I have not yet ever pruned any of these dang binaries.""" start="00:51:50.400" video="qanda-windows" id="subtitle"]] +[[!template text="""So every version of, uh, Emacs 29 that I've ever made for myself is probably here. Nice.""" start="00:51:56.400" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh, I strongly recommend that you bookmark this folder if you're using these for something and""" start="00:52:03.600" video="qanda-windows" id="subtitle"]] +[[!template text="""you always want the latest. Um, so here, this particular, uh, latest 29, Emacs 29 latest,""" start="00:52:08.480" video="qanda-windows" id="subtitle"]] +[[!template text="""or simply replace the 29 with 30 to get those. Uh, alas, no, no such luck for TreeSetter.""" start="00:52:14.240" video="qanda-windows" id="subtitle"]] +[[!template text="""But if we look at, uh, that,""" start="00:52:23.120" video="qanda-windows" id="subtitle"]] +[[!template text="""live this long without making a typo. Now look at me.""" start="00:52:36.400" video="qanda-windows" id="subtitle"]] +[[!template text="""Uh-oh. Oh.""" start="00:52:40.320" video="qanda-windows" id="subtitle"]] +[[!template text="""So here, um, you know, we can see the icon application and so on, even in the TreeSetter""" start="00:52:51.520" video="qanda-windows" id="subtitle"]] +[[!template text="""folder. This is all I'm talking about, about the fanciness that's set up by that other script that""" start="00:52:56.720" video="qanda-windows" id="subtitle"]] +[[!template text="""I'm showing over here and run after each time I run the upload. It just""" start="00:53:02.400" video="qanda-windows" id="subtitle"]] +[[!template text="""looks to see if anything's new and add some lines to the .htaccess file.""" start="00:53:07.840" video="qanda-windows" id="subtitle"]] +[[!template text="""Um, I'm particularly proud of this one. I'm not going to lie. Um, linking out to each,""" start="00:53:15.840" video="qanda-windows" id="subtitle"]] +[[!template text="""each, uh, project that we're using, letting us know the commit version,""" start="00:53:22.400" video="qanda-windows" id="subtitle"]] +[[!template text="""and then, uh, for the DLLs, quick link out to the log and the signature file for this DLL. Um,""" start="00:53:26.560" video="qanda-windows" id="subtitle"]] +[[!template text="""I find that a lot, just a lot more readable than, uh, listing them all out individually. And I'd""" start="00:53:36.960" video="qanda-windows" id="subtitle"]] +[[!template text="""love to do something like that on the GNU site. So I'm, I think we've got to be out of time by""" start="00:53:46.160" video="qanda-windows" id="subtitle"]] +[[!template text="""now. I've just got to say, hey, thanks again for having me, uh, for those that, uh, watch the talk""" start="00:53:53.360" video="qanda-windows" id="subtitle"]] +[[!template text="""either live or after the conference. Uh, appreciate everyone's support to get me to""" start="00:53:59.600" video="qanda-windows" id="subtitle"]] +[[!template text="""the point where I will be able to, uh, to do this, this, this cool volunteer task,""" start="00:54:04.400" video="qanda-windows" id="subtitle"]] +[[!template text="""uh, which is fun and easy to do and reach out to me if you're interested in helping with it.""" start="00:54:10.320" video="qanda-windows" id="subtitle"]] +[[!template text="""Well, awesome. Thanks a lot for the awesome talk, Corbyn. And, uh, of course, as a fellow""" start="00:54:18.960" video="qanda-windows" id="subtitle"]] +[[!template text="""core, uh, core organizer, uh, for all, for all that you do, um, in and around Emacs Conf""" start="00:54:24.320" video="qanda-windows" id="subtitle"]] +[[!template text="""and of course for, uh, GNU Emacs as well, it's much appreciated.""" start="00:54:29.920" video="qanda-windows" id="subtitle"]] +[[!template text="""Big, big words from coming from you, my friend. Um, thanks for the kind words.""" start="00:54:36.160" video="qanda-windows" id="subtitle"]] +[[!template text="""Cheers. My pleasure. All right. And with that, I think we're gonna, uh, wrap up the dev, uh,""" start="00:54:45.040" video="qanda-windows" id="subtitle"]] +[[!template text="""track here and, uh, we'll be with you again shortly in a few minutes on the gen stream,""" start="00:54:49.840" video="qanda-windows" id="subtitle"]] +[[!template text="""the gen track for the closing remarks for today, um, only for today, because we're going to be""" start="00:54:55.360" video="qanda-windows" id="subtitle"]] +[[!template text="""back tomorrow again as well. So don't go anywhere and, uh, see you on the gen track in a bit.""" start="00:55:00.400" video="qanda-windows" id="subtitle"]] +[[!template text="""Oh my God, I did it. We got done within the time. You're my hero. Um, and thank you so""" start="00:55:25.920" video="qanda-windows" id="subtitle"]] +[[!template text="""much for just keeping me honest there and, uh, like helping me keep my eye on the time and such.""" start="00:55:32.720" video="qanda-windows" id="subtitle"]] +[[!template text="""You have to look at the recording and see whether you feel like doing it again.""" start="00:55:41.520" video="qanda-windows" id="subtitle"]] +[[!template text="""I'm sorry. I had my sound screwed up and I'm sorry if I talked over somebody,""" start="00:55:56.160" video="qanda-windows" id="subtitle"]] +[[!template text="""I couldn't hear anything on mumble until this very moment.""" start="00:55:59.520" video="qanda-windows" id="subtitle"]] +[[!template text="""Oh, uh, because he's your webcam for it. Um, like as a, like a virtual webcam thingy,""" start="00:56:03.520" video="qanda-windows" id="subtitle"]] +[[!template text="""it was low res, especially when things are changing as you're scrolling around. So we'll""" start="00:56:09.440" video="qanda-windows" id="subtitle"]] +[[!template text="""see what kind of recording we can recover from it. And then you can decide whether you maybe""" start="00:56:15.760" video="qanda-windows" id="subtitle"]] +[[!template text="""want to clean it up with like screenshots. I recorded on this end too. We shouldn't have""" start="00:56:19.920" video="qanda-windows" id="subtitle"]] +[[!template text="""that problem with my recording. Thank you. Thank you. Thank you. I think we're still live on the""" start="00:56:26.480" video="qanda-windows" id="subtitle"]] +[[!template text="""dev stream. Someone could, uh, take that off. Oh, yes. Because, uh, I'll, I'll set it to rebroadcast.""" start="00:56:30.720" video="qanda-windows" id="subtitle"]] +[[!template text="""Yeah. I love doing that for the closing remarks. That's a fine tradition""" start="00:56:45.520" video="qanda-windows" id="subtitle"]] +[[!template text="""or it's a tradition now. Cause I'm pretty sure this means we've done it twice.""" start="00:56:52.000" video="qanda-windows" id="subtitle"]] +[[!template text="""I once heard that, you know, uh, as a fan-ish meaning like a fan-ish is a term of endearment""" start="00:57:01.680" video="qanda-windows" id="subtitle"]] +[[!template text="""for a science fiction fan to another. We say we're, we're fans or things we do are fan-ish and""" start="00:57:07.360" video="qanda-windows" id="subtitle"]] +[[!template text="""a fan-ish tradition then is if you do it three times, it's tradition, but we're on a budget here.""" start="00:57:12.800" video="qanda-windows" id="subtitle"]] +[[!template text="""So, all right. I think we should, um, head over to mumble and talk on mumble. Um, and just decide""" start="00:57:19.680" video="qanda-windows" id="subtitle"]] +[[!template text="""and see like which big blue button room we're going to be in for closing. Okay. So we're clear""" start="00:57:31.600" video="qanda-windows" id="subtitle"]] +[[!template text="""on BBB here? Yep. I think so.""" start="00:57:36.240" video="qanda-windows" id="subtitle"]] + +Questions or comments? Please e-mail [corwin@bru.st](mailto:corwin@bru.st?subject=Comment%20for%20EmacsConf%202023%20windows%3A%20Windows%20into%20Freedom) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/windows-before.md b/2023/info/windows-before.md new file mode 100644 index 00000000..a3de3379 --- /dev/null +++ b/2023/info/windows-before.md @@ -0,0 +1,18 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 58-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="windows-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 57:48 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/4DeRkvJyKFdCBLWnHtsZW2">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><div>Listen to just the audio:<br /><audio controls preload="none" id="windows-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus"></audio></div><div></div><div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/windows-nav.md b/2023/info/windows-nav.md new file mode 100644 index 00000000..05dc3b17 --- /dev/null +++ b/2023/info/windows-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a> +Next by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/woof-nav.md b/2023/info/woof-nav.md new file mode 100644 index 00000000..35fd3ab8 --- /dev/null +++ b/2023/info/woof-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a> +Next by track: <a href="/2023/talks/sun-open">Sunday opening remarks</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/world-after.md b/2023/info/world-after.md new file mode 100644 index 00000000..ce8bdc00 --- /dev/null +++ b/2023/info/world-after.md @@ -0,0 +1,381 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="world-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Draw and scribble in GNU Emacs""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:00:00.780" video="mainVideo-world" id="subtitle"]] +[[!template text="""drawing and scribbling in Emacs using SVG.""" start="00:00:02.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's start with `canvas-mode`.""" start="00:00:07.167" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will define the width and the height.""" start="00:00:10.067" video="mainVideo-world" id="subtitle"]] +[[!template text="""The default is polyline,""" start="00:00:17.540" video="mainVideo-world" id="subtitle"]] +[[!template text="""which means you can scribble anything that you want.""" start="00:00:19.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""Very handy for taking quick notes.""" start="00:00:23.733" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we will look at""" start="00:00:30.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""drawing a triangle using some lines.""" start="00:00:32.700" video="mainVideo-world" id="subtitle"]] +[[!template text="""Okay. Now let's draw a circle.""" start="00:00:46.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can use the mouse to adjust""" start="00:00:57.267" video="mainVideo-world" id="subtitle"]] +[[!template text="""the radius of the circle.""" start="00:00:58.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""There is some problem with ellipse,""" start="00:01:02.860" video="mainVideo-world" id="subtitle"]] +[[!template text="""we will look at it at the end of the video.""" start="00:01:04.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now let's put up some text,""" start="00:01:07.940" video="mainVideo-world" id="subtitle"]] +[[!template text="""a typical "Hello World".""" start="00:01:11.767" video="mainVideo-world" id="subtitle"]] +[[!template text="""Size, let's do a 20 font size,""" start="00:01:15.067" video="mainVideo-world" id="subtitle"]] +[[!template text="""and we will use the default font family.""" start="00:01:19.880" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, we will look at undoing what we have drawn.""" start="00:01:32.360" video="mainVideo-world" id="subtitle"]] +[[!template text="""Just press u for deleting the last drawn object.""" start="00:01:37.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""And you can continue pressing""" start="00:01:43.067" video="mainVideo-world" id="subtitle"]] +[[!template text="""u for consecutive deletions.""" start="00:01:45.800" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can also make a selection of the objects""" start="00:01:51.960" video="mainVideo-world" id="subtitle"]] +[[!template text="""on the screen using your mouse and then press u.""" start="00:01:54.533" video="mainVideo-world" id="subtitle"]] +[[!template text="""This will delete all the objects in one go.""" start="00:01:57.700" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we are looking at stroke color.""" start="00:02:02.600" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will use a brown stroke color""" start="00:02:06.660" video="mainVideo-world" id="subtitle"]] +[[!template text="""for drawing our objects.""" start="00:02:08.633" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, let's look at stroke width.""" start="00:02:12.880" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will use a width of 5.""" start="00:02:20.420" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, let's fill up the objects with a fill color.""" start="00:02:27.980" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we will look at zoom.""" start="00:02:41.620" video="mainVideo-world" id="subtitle"]] +[[!template text="""Use the mouse to select a region and zoom.""" start="00:02:47.160" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can also use +, - for zooming in and out.""" start="00:02:50.120" video="mainVideo-world" id="subtitle"]] +[[!template text="""Press 0 for resetting the zoom.""" start="00:02:54.360" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, let's save the file,""" start="00:03:07.133" video="mainVideo-world" id="subtitle"]] +[[!template text="""and q or Enter for exiting the canvas-mode.""" start="00:03:14.540" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we will open the file in Emacs itself.""" start="00:03:19.667" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can see the file,""" start="00:03:25.220" video="mainVideo-world" id="subtitle"]] +[[!template text="""you can do Control-c Control-c (`C-c C-c`).""" start="00:03:26.180" video="mainVideo-world" id="subtitle"]] +[[!template text="""Finally, we look at ellipse.""" start="00:03:32.000" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks!""" start="00:03:44.420" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""SVG Symbols library""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will draw""" start="00:03:46.400" video="mainVideo-world" id="subtitle"]] +[[!template text="""schematics using symbols from SVG library in Emacs.""" start="00:03:48.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""Press capital L to activate the symbol library""" start="00:03:52.067" video="mainVideo-world" id="subtitle"]] +[[!template text="""that you can see on the right hand side,""" start="00:03:55.000" video="mainVideo-world" id="subtitle"]] +[[!template text="""and place the symbol on the canvas.""" start="00:03:57.867" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's add another register to this diagram.""" start="00:04:01.960" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can press capital R to rotate the symbol.""" start="00:04:06.640" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's place it on the canvas.""" start="00:04:11.820" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we will add a voltage source to the circuit.""" start="00:04:17.240" video="mainVideo-world" id="subtitle"]] +[[!template text="""To connect the symbols,""" start="00:04:31.667" video="mainVideo-world" id="subtitle"]] +[[!template text="""we will have to use some connecting wires.""" start="00:04:33.180" video="mainVideo-world" id="subtitle"]] +[[!template text="""For that, press capital W""" start="00:04:36.967" video="mainVideo-world" id="subtitle"]] +[[!template text="""to activate the connection mode.""" start="00:04:39.467" video="mainVideo-world" id="subtitle"]] +[[!template text="""Click anywhere on the canvas""" start="00:04:46.920" video="mainVideo-world" id="subtitle"]] +[[!template text="""to draw intermediate points, and press Esc""" start="00:04:48.567" video="mainVideo-world" id="subtitle"]] +[[!template text="""to exit that particular connection.""" start="00:04:53.133" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's connect other symbols too.""" start="00:05:00.033" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:05:16.633" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""GNU Emacs: A multimedia editor""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:05:20.140" video="mainVideo-world" id="subtitle"]] +[[!template text="""some basic multimedia editing using Emacs.""" start="00:05:22.167" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's start a media-edit session.""" start="00:05:24.933" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's open a video file.""" start="00:05:27.460" video="mainVideo-world" id="subtitle"]] +[[!template text="""The left-hand side is your viewer area,""" start="00:05:32.000" video="mainVideo-world" id="subtitle"]] +[[!template text="""and the right-hand side is your track area.""" start="00:05:34.100" video="mainVideo-world" id="subtitle"]] +[[!template text="""In the track area, you can use normal Emacs""" start="00:05:36.700" video="mainVideo-world" id="subtitle"]] +[[!template text="""text editing movements.""" start="00:05:39.667" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now press `C-c r` to refresh the viewer mode""" start="00:05:42.040" video="mainVideo-world" id="subtitle"]] +[[!template text="""with the exact time frame.""" start="00:05:48.167" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now press SPC to play or pause the video.""" start="00:05:52.767" video="mainVideo-world" id="subtitle"]] +[[!template text="""This looks like an interesting point in the video,""" start="00:05:59.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""let's track it and split it. Press Enter to do that.""" start="00:06:03.233" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will extract some 10 seconds of this video.""" start="00:06:11.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's use this.""" start="00:06:20.733" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now go here and delete all these lines.""" start="00:06:23.233" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's review our edited clip.""" start="00:06:26.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""Looks good! Now press e to export the video.""" start="00:06:44.133" video="mainVideo-world" id="subtitle"]] +[[!template text="""Provide an output file name.""" start="00:06:51.833" video="mainVideo-world" id="subtitle"]] +[[!template text="""This will use FFmpeg to convert, and you can""" start="00:06:57.560" video="mainVideo-world" id="subtitle"]] +[[!template text="""output to any file format supported by FFmpeg.""" start="00:07:04.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""Okay. Let's open up shell and view this""" start="00:07:16.967" video="mainVideo-world" id="subtitle"]] +[[!template text="""video file in an external video player.""" start="00:07:21.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:07:57.160" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Fill PDF form using GNU Emacs""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:08:03.367" video="mainVideo-world" id="subtitle"]] +[[!template text="""editing a PDF form using GNU Emacs.""" start="00:08:05.567" video="mainVideo-world" id="subtitle"]] +[[!template text="""To start, we have to enable the annotation.""" start="00:08:09.760" video="mainVideo-world" id="subtitle"]] +[[!template text="""Then we can use Tab to move forward and Shift+Tab""" start="00:08:13.840" video="mainVideo-world" id="subtitle"]] +[[!template text="""to move backwards through the fields.""" start="00:08:18.533" video="mainVideo-world" id="subtitle"]] +[[!template text="""To edit a field, we press e.""" start="00:08:22.480" video="mainVideo-world" id="subtitle"]] +[[!template text="""So let's edit a text box. We'll call it 'city'.""" start="00:08:25.967" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, we will edit a drop-down.""" start="00:08:33.580" video="mainVideo-world" id="subtitle"]] +[[!template text="""Again, press e, and you get a select.""" start="00:08:35.840" video="mainVideo-world" id="subtitle"]] +[[!template text="""Use the Minibuffer to select one of the values.""" start="00:08:38.680" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's select 'France'.""" start="00:08:45.833" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now let's edit a radio box.""" start="00:08:48.500" video="mainVideo-world" id="subtitle"]] +[[!template text="""A checkbox or a radio box can be toggled using t.""" start="00:08:52.180" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can disable…""" start="00:08:55.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now let's save the file, `doc-view-save-form`.""" start="00:08:58.660" video="mainVideo-world" id="subtitle"]] +[[!template text="""It will ask for a file name.""" start="00:09:05.140" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's call it `filled1.pdf`. If the file exists,""" start="00:09:08.360" video="mainVideo-world" id="subtitle"]] +[[!template text="""it will ask you if you want to overwrite.""" start="00:09:13.400" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now let's verify this new file.""" start="00:09:17.260" video="mainVideo-world" id="subtitle"]] +[[!template text="""In Firefox, we'll copy this file name, call it filled1.""" start="00:09:21.460" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's verify the values.""" start="00:09:27.160" video="mainVideo-world" id="subtitle"]] +[[!template text="""You have city, France and Driving License selected.""" start="00:09:29.100" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:09:32.620" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Desktop and window management in GNU Emacs""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:09:34.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""desktop and window management in GNU Emacs.""" start="00:09:37.660" video="mainVideo-world" id="subtitle"]] +[[!template text="""We'll start with `task-view`.""" start="00:09:40.460" video="mainVideo-world" id="subtitle"]] +[[!template text="""Top row shows all the desktops,""" start="00:09:47.740" video="mainVideo-world" id="subtitle"]] +[[!template text="""and rest of the images are the active windows""" start="00:09:50.467" video="mainVideo-world" id="subtitle"]] +[[!template text="""in that particular desktop.""" start="00:09:54.400" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can tap to select""" start="00:09:59.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""and double tap to activate a particular window.""" start="00:10:09.160" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can use m to move selected windows""" start="00:10:13.320" video="mainVideo-world" id="subtitle"]] +[[!template text="""to any of the desktops at the top.""" start="00:10:16.767" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's check the third desktop.""" start="00:10:25.100" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's bring it back to the second desktop.""" start="00:10:29.320" video="mainVideo-world" id="subtitle"]] +[[!template text="""The best part,""" start="00:10:49.980" video="mainVideo-world" id="subtitle"]] +[[!template text="""you can select multiple windows""" start="00:10:51.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""and form a group by pressing g.""" start="00:10:54.800" video="mainVideo-world" id="subtitle"]] +[[!template text="""Then you can select any of the windows""" start="00:10:59.980" video="mainVideo-world" id="subtitle"]] +[[!template text="""in this group to activate the complete group.""" start="00:11:04.867" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:11:07.640" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Screen mirroring in GNU Emacs""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:11:10.440" video="mainVideo-world" id="subtitle"]] +[[!template text="""screen mirroring using GNU Emacs.""" start="00:11:12.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""Run `wfd`. Select an interface.""" start="00:11:14.280" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now it will scan for all the available devices""" start="00:11:18.780" video="mainVideo-world" id="subtitle"]] +[[!template text="""for screen mirroring.""" start="00:11:20.967" video="mainVideo-world" id="subtitle"]] +[[!template text="""I'll select my TV, which is an LG WebOS TV.""" start="00:11:24.800" video="mainVideo-world" id="subtitle"]] +[[!template text="""If you don't decline, it will start streaming.""" start="00:11:30.400" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's change some buffer to check the visuals.""" start="00:11:38.720" video="mainVideo-world" id="subtitle"]] +[[!template text="""To terminate the session, just click on quit.""" start="00:11:45.140" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:11:50.220" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Swipe for Text Input in GNU Emacs""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Using Sweep to swipe and type "as you like it."]""" start="00:11:53.033" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Formula Editor in GNU Emacs""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Formula Editor]""" start="00:12:25.533" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Typing fractions in the formula]""" start="00:12:39.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Adding brackets and an exponent]""" start="00:12:45.033" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Transliteration in Emacs""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Hindi (Devanagari script) Phonetic typing]""" start="00:12:59.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Phonetic typing Gujarati, Bangla, Kannada, and Tamil]""" start="00:13:05.200" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Social Media client - Tumblr, Reddit""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Browsing Reddit in Emacs]""" start="00:13:09.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Browsing Tumblr in Emacs]""" start="00:13:19.533" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Browsing X (Twitter) in Emacs]""" start="00:13:29.533" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Comics Builder""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Generating comic from a text script]""" start="00:13:40.000" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Matching game""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Matching color names with color boxes]""" start="00:13:49.567" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Interactive XPath Builder in GNU Emacs""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Running `xpath-builder` on an XML file]""" start="00:13:59.567" video="mainVideo-world" id="subtitle"]] +[[!template text="""[Filtering `title`, `para`, and `author` from the XML]""" start="00:14:01.833" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Interactive JSON Builder in GNU Emacs""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Filtering `father`, `father.name`, `children`""" start="00:14:10.767" video="mainVideo-world" id="subtitle"]] +[[!template text="""`children[1]` from a JSON using JSON Builder]""" start="00:14:29.200" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:14:35.233" video="mainVideo-world" id="subtitle"]] +[[!template text="""generating getters and setters in Java using Emacs.""" start="00:14:37.633" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will run `srecode-getset-dialog`.""" start="00:14:41.660" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will get an option to select particular fields,""" start="00:14:46.233" video="mainVideo-world" id="subtitle"]] +[[!template text="""you can expand and collapse.""" start="00:14:48.767" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can select all or deselect all,""" start="00:14:51.833" video="mainVideo-world" id="subtitle"]] +[[!template text="""or you can choose any particular getter.""" start="00:14:54.100" video="mainVideo-world" id="subtitle"]] +[[!template text="""So let's do protected version of this. Here you go.""" start="00:14:56.386" video="mainVideo-world" id="subtitle"]] +[[!template text="""If you want to generate for other fields,""" start="00:15:02.633" video="mainVideo-world" id="subtitle"]] +[[!template text="""you can re-run it.""" start="00:15:06.067" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can check the one that you have already""" start="00:15:08.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""generated is not there.""" start="00:15:11.267" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now select all, and you can see rest of the""" start="00:15:13.100" video="mainVideo-world" id="subtitle"]] +[[!template text="""getters and setters have been generated.""" start="00:15:22.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:15:23.933" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""Generate C header""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]] + +[[!template text="""[Generating C headers using `srecode-gen-header`]""" start="00:15:26.133" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""C Rename symbols""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:16:11.640" video="mainVideo-world" id="subtitle"]] +[[!template text="""renaming method across multiple files in a project.""" start="00:16:13.833" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's start with `semantic-symref-symbol`.""" start="00:16:17.633" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we have the references.""" start="00:16:24.640" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's use the menu to open all these occurrences.""" start="00:16:26.800" video="mainVideo-world" id="subtitle"]] +[[!template text="""To rename it, we have to use""" start="00:16:35.400" video="mainVideo-world" id="subtitle"]] +[[!template text=""""Rename Symbol in Open hits."""" start="00:16:38.433" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's rename it to underscore 1 (`_1`).""" start="00:16:41.920" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will verify it by compiling the project.""" start="00:16:46.440" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's open the `*Messages*` buffer to see the results""" start="00:16:57.720" video="mainVideo-world" id="subtitle"]] +[[!template text="""more clearly. No errors.""" start="00:17:00.300" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:17:04.167" video="mainVideo-world" id="subtitle"]] + +[[!template new="1" text="""SQL (offline)""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]] + +[[!template text="""Hello. In this video, we will look at""" start="00:17:07.640" video="mainVideo-world" id="subtitle"]] +[[!template text="""SQL editing with Semantic.""" start="00:17:09.733" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will define a schema in this SQL document.""" start="00:17:12.440" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's create a table.""" start="00:17:16.620" video="mainVideo-world" id="subtitle"]] +[[!template text="""We get already existing tables""" start="00:17:27.000" video="mainVideo-world" id="subtitle"]] +[[!template text="""in the current document.""" start="00:17:30.267" video="mainVideo-world" id="subtitle"]] +[[!template text="""It also supports auto-completion of some keywords.""" start="00:17:38.533" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we can do some queries on the tables.""" start="00:17:57.033" video="mainVideo-world" id="subtitle"]] +[[!template text="""We have `SELECT` as the keyword or the SQL,""" start="00:18:00.900" video="mainVideo-world" id="subtitle"]] +[[!template text="""so we will select the SQL.""" start="00:18:03.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""Here we have all the tables existing in this schema.""" start="00:18:06.833" video="mainVideo-world" id="subtitle"]] +[[!template text="""We can also use an alias for completions.""" start="00:18:13.560" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now let's look at a more complex example.""" start="00:18:25.633" video="mainVideo-world" id="subtitle"]] +[[!template text="""We will try to do a join on two tables.""" start="00:18:31.267" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's add a `WHERE` clause.""" start="00:18:43.367" video="mainVideo-world" id="subtitle"]] +[[!template text="""Next, let's do insert.""" start="00:19:06.600" video="mainVideo-world" id="subtitle"]] +[[!template text="""You can just click on Tab to go to the next field.""" start="00:19:23.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""Let's fill in the columns.""" start="00:19:27.967" video="mainVideo-world" id="subtitle"]] +[[!template text="""And do a Tab to go to the values""" start="00:19:30.700" video="mainVideo-world" id="subtitle"]] +[[!template text="""and add the corresponding values.""" start="00:19:32.667" video="mainVideo-world" id="subtitle"]] +[[!template text="""Finally, an update.""" start="00:19:37.000" video="mainVideo-world" id="subtitle"]] +[[!template text="""Now we will try to delete this""" start="00:19:48.033" video="mainVideo-world" id="subtitle"]] +[[!template text="""with a `WHERE col11 = 4`.""" start="00:20:00.700" video="mainVideo-world" id="subtitle"]] +[[!template text="""Lastly, let's try dropping the table.""" start="00:20:07.333" video="mainVideo-world" id="subtitle"]] +[[!template text="""That's all for this video. Thanks.""" start="00:20:16.267" video="mainVideo-world" id="subtitle"]] +[[!template text="""Slide with the text "Let's Make Computing Personal."""" start="00:20:21.867" video="mainVideo-world" id="subtitle"]] + + + +Captioner: bhavin192 + +<a name="world-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: Okay, folks. Thanks, Anand,""" start="00:00:07.120" video="qanda-world" id="subtitle"]] +[[!template text="""for the great talk. So here is the live Q&A.""" start="00:00:11.259" video="qanda-world" id="subtitle"]] +[[!template text="""Hi. Hello. I see questions being posted on""" start="00:00:22.279" video="qanda-world" id="subtitle"]] +[[!template text="""the pad. Would you like me to read them out""" start="00:00:23.920" video="qanda-world" id="subtitle"]] +[[!template text="""or would you prefer to read them yourself?""" start="00:00:25.320" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 1]: Okay. I'll try reading it out.""" start="00:00:31.880" video="qanda-world" id="subtitle"]] +[[!template text="""If there are audio issues,""" start="00:00:33.340" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure, thanks.""" start="00:00:35.420" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 1]: just let me know. A lot of what you showed""" start="00:00:37.360" video="qanda-world" id="subtitle"]] +[[!template text="""was the type of stuff Emacs didn't do very""" start="00:00:39.960" video="qanda-world" id="subtitle"]] +[[!template text="""well. This stuff looks like it could be""" start="00:00:43.040" video="qanda-world" id="subtitle"]] +[[!template text="""useful for using Emacs with a touch screen""" start="00:00:45.020" video="qanda-world" id="subtitle"]] +[[!template text="""and a tablet. Have you used it for purposes""" start="00:00:46.960" video="qanda-world" id="subtitle"]] +[[!template text="""like this? No right now it's more proof of""" start="00:00:53.160" video="qanda-world" id="subtitle"]] +[[!template text="""concept stage so I don't use it more than you""" start="00:00:58.580" video="qanda-world" id="subtitle"]] +[[!template text="""know just making some demo software.""" start="00:01:03.420" video="qanda-world" id="subtitle"]] +[[!template text="""The next question is, is there a mode for""" start="00:01:12.100" video="qanda-world" id="subtitle"]] +[[!template text="""using FFmpeg through Emacs or did you make it""" start="00:01:15.080" video="qanda-world" id="subtitle"]] +[[!template text="""yourself? Okay so this is something that I""" start="00:01:20.160" video="qanda-world" id="subtitle"]] +[[!template text="""built. So the base of it is XWidget in Emacs,""" start="00:01:26.800" video="qanda-world" id="subtitle"]] +[[!template text="""which is already there.""" start="00:01:28.160" video="qanda-world" id="subtitle"]] +[[!template text="""But then I had to add a few control code for""" start="00:01:35.080" video="qanda-world" id="subtitle"]] +[[!template text="""controlling VLC. So ffmpeg is like a shell""" start="00:01:42.240" video="qanda-world" id="subtitle"]] +[[!template text="""command that finally stitches those bits of""" start="00:01:46.840" video="qanda-world" id="subtitle"]] +[[!template text="""video clips. But what actually plays is VLC,""" start="00:01:51.780" video="qanda-world" id="subtitle"]] +[[!template text="""and it's not FFmpeg. Hope that's clear.""" start="00:01:55.860" video="qanda-world" id="subtitle"]] +[[!template text="""The next question is these demos are always""" start="00:02:03.580" video="qanda-world" id="subtitle"]] +[[!template text="""so impressive. Do you plan to upstream any of""" start="00:02:06.020" video="qanda-world" id="subtitle"]] +[[!template text="""these projects into Emacs?""" start="00:02:07.040" video="qanda-world" id="subtitle"]] +[[!template text="""Right now, okay, let me read the complete""" start="00:02:13.940" video="qanda-world" id="subtitle"]] +[[!template text="""questions. These demos are always so""" start="00:02:16.220" video="qanda-world" id="subtitle"]] +[[!template text="""impressive. Do you plan to upstream any of""" start="00:02:17.960" video="qanda-world" id="subtitle"]] +[[!template text="""these projects into Emacs or to publish them""" start="00:02:19.960" video="qanda-world" id="subtitle"]] +[[!template text="""as, for example, helper packages?""" start="00:02:21.780" video="qanda-world" id="subtitle"]] +[[!template text="""So right now, as it stands,""" start="00:02:26.480" video="qanda-world" id="subtitle"]] +[[!template text="""I personally don't intend to do that because""" start="00:02:30.720" video="qanda-world" id="subtitle"]] +[[!template text="""I don't have that time but I have signed my""" start="00:02:34.900" video="qanda-world" id="subtitle"]] +[[!template text="""signed assignment copyright assignment so""" start="00:02:38.720" video="qanda-world" id="subtitle"]] +[[!template text="""anybody has time and motivation to do it they""" start="00:02:41.600" video="qanda-world" id="subtitle"]] +[[!template text="""can pick up the code and help me with that.""" start="00:02:47.120" video="qanda-world" id="subtitle"]] +[[!template text="""The next is, how did you make that electronic""" start="00:02:53.200" video="qanda-world" id="subtitle"]] +[[!template text="""circuit diagram? Is there a mode with the""" start="00:03:00.600" video="qanda-world" id="subtitle"]] +[[!template text="""symbols already available.""" start="00:03:02.560" video="qanda-world" id="subtitle"]] +[[!template text="""Okay so electronic circuit diagram is you""" start="00:03:08.240" video="qanda-world" id="subtitle"]] +[[!template text="""know the canvas mode but and what you see is""" start="00:03:13.340" video="qanda-world" id="subtitle"]] +[[!template text="""the is an extension of that canvas mode which""" start="00:03:19.540" video="qanda-world" id="subtitle"]] +[[!template text="""uses a symbol library.""" start="00:03:25.440" video="qanda-world" id="subtitle"]] +[[!template text="""And so The only difference is you press""" start="00:03:31.980" video="qanda-world" id="subtitle"]] +[[!template text="""capital L to open up that symbol library.""" start="00:03:34.160" video="qanda-world" id="subtitle"]] +[[!template text="""In this case, this symbol library happens to""" start="00:03:37.700" video="qanda-world" id="subtitle"]] +[[!template text="""be just a library of electronic symbols.""" start="00:03:41.380" video="qanda-world" id="subtitle"]] +[[!template text="""It can be any category of symbols and then""" start="00:03:44.640" video="qanda-world" id="subtitle"]] +[[!template text="""you and use it to draw on your,""" start="00:03:47.600" video="qanda-world" id="subtitle"]] +[[!template text="""in the canvas major mode.""" start="00:03:50.640" video="qanda-world" id="subtitle"]] +[[!template text="""Next question is, I have seen your blog post""" start="00:04:02.240" video="qanda-world" id="subtitle"]] +[[!template text="""with some of these features But can you link""" start="00:04:04.700" video="qanda-world" id="subtitle"]] +[[!template text="""to the repo where you are doing the""" start="00:04:06.280" video="qanda-world" id="subtitle"]] +[[!template text="""development for these packages?""" start="00:04:07.940" video="qanda-world" id="subtitle"]] +[[!template text="""Sure, I can do that Most of these are""" start="00:04:18.899" video="qanda-world" id="subtitle"]] +[[!template text="""available on my blogs.""" start="00:04:20.279" video="qanda-world" id="subtitle"]] +[[!template text="""Typically the Reddit post always has a link""" start="00:04:26.200" video="qanda-world" id="subtitle"]] +[[!template text="""to my blog. But I'll post it in this 1 as""" start="00:04:31.480" video="qanda-world" id="subtitle"]] +[[!template text="""well.""" start="00:04:31.680" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 0]: I'll quickly note that we have about 4 more""" start="00:04:48.480" video="qanda-world" id="subtitle"]] +[[!template text="""minutes of live Q&A, but if folks have more""" start="00:04:52.540" video="qanda-world" id="subtitle"]] +[[!template text="""questions, they're welcome to either continue""" start="00:04:55.320" video="qanda-world" id="subtitle"]] +[[!template text="""asking on the pad or come join us here on Big""" start="00:04:59.060" video="qanda-world" id="subtitle"]] +[[!template text="""Blue Button and continue chatting once the""" start="00:05:02.080" video="qanda-world" id="subtitle"]] +[[!template text="""stream moves on to the next talk.""" start="00:05:03.440" video="qanda-world" id="subtitle"]] +[[!template text="""Thank you.""" start="00:05:03.940" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 1]: Yes, so here's the link.""" start="00:05:13.360" video="qanda-world" id="subtitle"]] +[[!template text="""And so right now, all of my development goes""" start="00:05:23.240" video="qanda-world" id="subtitle"]] +[[!template text="""into a single development branch in this""" start="00:05:26.360" video="qanda-world" id="subtitle"]] +[[!template text="""repository. But depending on the feature that""" start="00:05:28.940" video="qanda-world" id="subtitle"]] +[[!template text="""you're looking at, you can look at that""" start="00:05:31.500" video="qanda-world" id="subtitle"]] +[[!template text="""particular post and that post will have a""" start="00:05:33.820" video="qanda-world" id="subtitle"]] +[[!template text="""link to the specific files that include the""" start="00:05:37.120" video="qanda-world" id="subtitle"]] +[[!template text="""changes.""" start="00:05:37.320" video="qanda-world" id="subtitle"]] +[[!template text="""Okay, there's a feedback.""" start="00:06:24.236" video="qanda-world" id="subtitle"]] +[[!template text="""Thank you for showing so many new""" start="00:06:26.520" video="qanda-world" id="subtitle"]] +[[!template text="""possibilities with Emacs.""" start="00:06:27.500" video="qanda-world" id="subtitle"]] +[[!template text="""I'm glad you like those possibilities.""" start="00:06:30.960" video="qanda-world" id="subtitle"]] +[[!template text="""And hopefully, you know,""" start="00:06:32.540" video="qanda-world" id="subtitle"]] +[[!template text="""with Emacs, the possibilities are really""" start="00:06:34.540" video="qanda-world" id="subtitle"]] +[[!template text="""endless. So I really encourage more people to""" start="00:06:38.480" video="qanda-world" id="subtitle"]] +[[!template text="""explore it and, you know,""" start="00:06:41.120" video="qanda-world" id="subtitle"]] +[[!template text="""try things that people have so far only been""" start="00:06:49.280" video="qanda-world" id="subtitle"]] +[[!template text="""using other applications for.""" start="00:06:52.160" video="qanda-world" id="subtitle"]] +[[!template text="""The next question is coming up.""" start="00:06:59.580" video="qanda-world" id="subtitle"]] +[[!template text="""Okay, the PDF form filling is especially""" start="00:07:07.540" video="qanda-world" id="subtitle"]] +[[!template text="""interesting. I would love to do my taxes in""" start="00:07:10.200" video="qanda-world" id="subtitle"]] +[[!template text="""Emacs. Yes, In most cases you should be able""" start="00:07:16.400" video="qanda-world" id="subtitle"]] +[[!template text="""to do it unless there are a lot of JavaScript""" start="00:07:18.900" video="qanda-world" id="subtitle"]] +[[!template text="""involved with the PDF.""" start="00:07:20.500" video="qanda-world" id="subtitle"]] +[[!template text="""For a simple form, you should be able to do""" start="00:07:24.800" video="qanda-world" id="subtitle"]] +[[!template text="""it.""" start="00:07:24.960" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, we have about 1 minute remaining on the""" start="00:08:19.480" video="qanda-world" id="subtitle"]] +[[!template text="""live stream. If folks have any other""" start="00:08:21.660" video="qanda-world" id="subtitle"]] +[[!template text="""questions, please do continue posting on the""" start="00:08:24.960" video="qanda-world" id="subtitle"]] +[[!template text="""pad or come and join BigBlueButton with an""" start="00:08:27.540" video="qanda-world" id="subtitle"]] +[[!template text="""ad. And thanks again, Adam,""" start="00:08:28.940" video="qanda-world" id="subtitle"]] +[[!template text="""for a great talk and for the discussions and""" start="00:08:30.880" video="qanda-world" id="subtitle"]] +[[!template text="""questions and answers.""" start="00:08:31.560" video="qanda-world" id="subtitle"]] +[[!template text="""[Speaker 1]: Great, thanks.""" start="00:08:36.100" video="qanda-world" id="subtitle"]] + +Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20world%3A%20GNU%20Emacs%3A%20A%20World%20of%20Possibilities) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/world-before.md b/2023/info/world-before.md new file mode 100644 index 00000000..3b34d3bb --- /dev/null +++ b/2023/info/world-before.md @@ -0,0 +1,32 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 21-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +<div class="vid"><video controls preload="none" id="world-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="world-mainVideo" data=""" +00:00:00.780 Draw and scribble in GNU Emacs +03:46.400 SVG Symbols library +05:20.140 GNU Emacs: A multimedia editor +08:03.367 Fill PDF form using GNU Emacs +09:34.900 Desktop and window management in GNU Emacs +11:10.440 Screen mirroring in GNU Emacs +11:53.033 Swipe for Text Input in GNU Emacs +12:25.533 Formula Editor in GNU Emacs +12:59.433 Transliteration in Emacs +13:09.433 Social Media client - Tumblr, Reddit +13:40.000 Comics Builder +13:49.567 Matching game +13:59.567 Interactive XPath Builder in GNU Emacs +14:10.767 Interactive JSON Builder in GNU Emacs +14:35.233 GNU Emacs as a lightweight IDE (CEDET Semantic): Java - Generate getter/setter +15:26.133 Generate C header +16:11.640 C Rename symbols +17:07.640 SQL (offline) + +"""]]<div></div>Duration: 20:31 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li><li><a href="https://toobnix.org/w/jFaSuNYt2FqibtcAvmVdbF">View on Toobnix</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/world-nav.md b/2023/info/world-nav.md new file mode 100644 index 00000000..0c9d9fb1 --- /dev/null +++ b/2023/info/world-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/scheme">Bringing joy to Scheme programming</a> +Next by track: <a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a> +Track: <span class="sched-track Development">Development</span> +</div> diff --git a/2023/info/writing-after.md b/2023/info/writing-after.md new file mode 100644 index 00000000..1523f77d --- /dev/null +++ b/2023/info/writing-after.md @@ -0,0 +1,520 @@ +<!-- Automatically generated by emacsconf-publish-after-page --> + + +<a name="writing-mainVideo-transcript"></a> +# Transcript + + +[[!template new="1" text="""Intro""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""Hello everyone, I'm Jeremy Friesen, pronouns he/him,""" start="00:00:00.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and today I'll be talking about""" start="00:00:04.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""how Emacs turbocharges my writing.""" start="00:00:05.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Quick intro: I've been programming since 1998""" start="00:00:08.600" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and blogging since 2011.""" start="00:00:11.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""In May of 2020 I switched to Emacs,""" start="00:00:14.080" video="mainVideo-writing" id="subtitle"]] +[[!template text="""having previously used a long list of different editors.""" start="00:00:16.640" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Curious about how Emacs impacted my writing,""" start="00:00:19.920" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I wrote some stuff on my personal site and""" start="00:00:23.040" video="mainVideo-writing" id="subtitle"]] +[[!template text="""found that I blogged about 95 words per day prior to Emacs,""" start="00:00:25.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and with Emacs I'm blogging about 340.""" start="00:00:30.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Now, this is not a fair comparison, many things changed.""" start="00:00:33.720" video="mainVideo-writing" id="subtitle"]] +[[!template text="""A pandemic removed 2 hours of commute every day""" start="00:00:37.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""as a big contributor.""" start="00:00:40.920" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Ultimately though, I've used Emacs and extended it""" start="00:00:44.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""to reduce barriers to capturing and writing and thinking,""" start="00:00:47.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and I'm always on the lookout for minor refinements""" start="00:00:50.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""that help me stay in my thinking.""" start="00:00:53.320" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""How I got here""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""How I got here was I started in WordPress,""" start="00:00:57.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""then I moved to Jekyll, and then to Hugo,""" start="00:00:59.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and through that process I started writing in Markdown.""" start="00:01:02.600" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And when I was learning Emacs,""" start="00:01:05.440" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I also didn't want to learn Org Mode,""" start="00:01:07.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""it felt intimidating because it could do so many things.""" start="00:01:09.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I later learned Org Mode grows with you,""" start="00:01:12.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and that's where I'm at now.""" start="00:01:15.520" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""But I didn't realize that friction""" start="00:01:18.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""between writing Markdown for my public blog""" start="00:01:20.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and then adopting Org Mode locally""" start="00:01:23.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""for writing and time tracking and things like that.""" start="00:01:25.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And also, where did I put things,""" start="00:01:28.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""because migrating the formats was just a little clunky.""" start="00:01:31.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So ultimately I spent some time thinking about the data flow""" start="00:01:35.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and where I would put things,""" start="00:01:38.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""this kind of pre-thinking,""" start="00:01:39.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""where does stuff go when it comes into and out of my brain.""" start="00:01:41.040" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Domains for notes""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""So I have many domains where I'll write towards.""" start="00:01:45.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""The ones for this presentation are going to be""" start="00:01:49.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""blog posts, epigraphs, glossary, and melange.""" start="00:01:51.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Melange is, I don't know where it goes,""" start="00:01:54.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""but now I do, I just throw it in melange.""" start="00:01:56.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I began exploring Org Mode via Org Roam,""" start="00:02:01.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""but I've ultimately switched from Org Roam""" start="00:02:04.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""to the simplified Denote package.""" start="00:02:07.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I didn't use a lot of the functionality""" start="00:02:10.640" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and I appreciate the plain text reality of Denote.""" start="00:02:13.200" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Demo""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""So let's hop into the demo.""" start="00:02:15.920" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to split my screen.""" start="00:02:18.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Over on the right is going to be""" start="00:02:19.920" video="mainVideo-writing" id="subtitle"]] +[[!template text="""where I'm going to be live typing stuff.""" start="00:02:21.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So let's get going.""" start="00:02:24.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""You'll notice I don't do a lot of screen splitting.""" start="00:02:27.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It just makes it easier to focus.""" start="00:02:29.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So let's create a note.""" start="00:02:32.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""All right, I have bound hyper to my command key,""" start="00:02:34.040" video="mainVideo-writing" id="subtitle"]] +[[!template text="""my right command key.""" start="00:02:41.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""This opens up a whole world.""" start="00:02:42.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to create a blog post""" start="00:02:43.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and we're going to name it the ever popular "hello world".""" start="00:02:45.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It's Emacs.""" start="00:02:49.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Great.""" start="00:02:50.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""We've saved it.""" start="00:02:51.520" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Dabbrev and hippie-expand""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""One of the things I encourage everybody to do""" start="00:02:55.440" video="mainVideo-writing" id="subtitle"]] +[[!template text="""is to watch Jay Dixit's presentation, Emacs for Writers.""" start="00:02:57.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It showed me the utility of Dabbrev for quick auto correction.""" start="00:03:02.040" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I also love using hippie-expand.""" start="00:03:08.080" video="mainVideo-writing" id="subtitle"]] +[[!template text="""When I watch VS coders code, it's always a little sad pants""" start="00:03:11.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""because they're thinking about coding or writing""" start="00:03:14.640" video="mainVideo-writing" id="subtitle"]] +[[!template text="""in terms of their code.""" start="00:03:17.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""But I have found as a programmer, I tend to write more tech,""" start="00:03:19.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""more like English instead of programming code.""" start="00:03:24.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I think it's important to understand these tools""" start="00:03:27.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""that help me write better.""" start="00:03:30.720" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Links""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""All right, we're going to go with links.""" start="00:03:32.840" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Links are foundational for the web.""" start="00:03:34.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to insert a public link,""" start="00:03:37.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""which is a role playing game that I love,""" start="00:03:41.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Worlds Without Number.""" start="00:03:43.440" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I'm going to go ahead and describe it.""" start="00:03:45.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""A role playing game.""" start="00:03:48.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""But I don't want to always say role playing game.""" start="00:03:49.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to abbreviate it.""" start="00:03:53.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I wrote a function that will transform it.""" start="00:03:54.600" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And let's take a look at what that looks like on the inside.""" start="00:03:57.080" video="mainVideo-writing" id="subtitle"]] +[[!template text="""When I do this real quick, it's toggling it back and forth.""" start="00:04:00.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I'll just keep doing that.""" start="00:04:06.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I also have the idea of public notes and private notes.""" start="00:04:10.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Public is things that's going to have a URL.""" start="00:04:13.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I met a person at a conference.""" start="00:04:15.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""He gave a talk on something that I thought was very useful.""" start="00:04:16.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I didn't write down what he talked about on his note.""" start="00:04:19.640" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I wrote it where it was more relevant to the topic.""" start="00:04:23.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I can use a backlink to go find that.""" start="00:04:26.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Next up, I demonstrate the abbreviation.""" start="00:04:31.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I also have dates.""" start="00:04:34.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""This is a semantic date in HTML5.""" start="00:04:35.840" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I can just have the year.""" start="00:04:38.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I can also just have something like that date is today.""" start="00:04:41.840" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And we have date links.""" start="00:04:48.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I don't have backlinks built up for that,""" start="00:04:52.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""but I have ideas of how I go about doing it.""" start="00:04:54.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And last up, thank you Frank Herbert,""" start="00:04:56.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I want to introduce epigraphs.""" start="00:04:58.760" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So this is epigraph.""" start="00:05:00.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I just have that, any sufficiently, dot, dot, dot.""" start="00:05:04.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And that's my epigraph.""" start="00:05:08.720" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Backlinks, I mentioned that.""" start="00:05:10.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Let's go take a look at Jonathan, right?""" start="00:05:16.720" video="mainVideo-writing" id="subtitle"]] +[[!template text="""He's a Rubyist, but importantly is the backlinks.""" start="00:05:19.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""He gave a talk on, that's right, PDFs.""" start="00:05:23.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I can go look at what he spoke to""" start="00:05:27.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and I can reference that because I will remember""" start="00:05:28.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""that talk or I will remember, oh, I need to look up PDFs.""" start="00:05:31.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Oh, I have something in PDFs.""" start="00:05:36.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Again, it's about stumbling upon data in a good way.""" start="00:05:39.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So thinking of making linking easy helps me""" start="00:05:43.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""create more and more ways to find things,""" start="00:05:48.320" video="mainVideo-writing" id="subtitle"]] +[[!template text="""both by links, backlinks, indices, file searches, and so forth.""" start="00:05:52.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It's all about information organization.""" start="00:05:57.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Next up is a really cool function of org capture.""" start="00:05:59.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So let's take a look here.""" start="00:06:04.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to start a clock.""" start="00:06:06.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It's running.""" start="00:06:08.040" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I'm going to bring up my browser.""" start="00:06:09.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I'm going to go ahead and capture to the content to clock.""" start="00:06:11.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And it brings up this block quote, which is lovely.""" start="00:06:19.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And boom, I'm going to save it.""" start="00:06:23.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm going to close this.""" start="00:06:25.720" video="mainVideo-writing" id="subtitle"]] +[[!template text="""We're back here to my "hello world".""" start="00:06:28.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And it has grabbed a block quote for this.""" start="00:06:30.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Again, it helps me gather stuff up quickly.""" start="00:06:33.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I've bound that also in my RSS feed.""" start="00:06:38.040" video="mainVideo-writing" id="subtitle"]] +[[!template text="""We're going to skip over macros, blocks, and the abstract.""" start="00:06:41.120" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And we're going to get into the export""" start="00:06:44.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""because this is where we can see the magic""" start="00:06:45.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""that happens because I want to take things""" start="00:06:47.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""from private to public.""" start="00:06:49.600" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I have bound a key.""" start="00:06:51.080" video="mainVideo-writing" id="subtitle"]] +[[!template text="""These are my menu of things I don't want to forget.""" start="00:06:53.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I will export.""" start="00:06:55.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And here we go.""" start="00:06:56.760" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Here is my blog post in markdown format with Hugo shortcodes.""" start="00:06:57.840" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So let's go take a look at what that looks like.""" start="00:07:04.960" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Localhost.""" start="00:07:07.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'm not writing in Rails.""" start="00:07:09.360" video="mainVideo-writing" id="subtitle"]] +[[!template text=""""Hello world" right there.""" start="00:07:12.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""This is the epigraph.""" start="00:07:14.920" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I have a mention of Worlds without Number.""" start="00:07:17.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I have mentioned this as a abbreviation.""" start="00:07:22.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I include the first time this text.""" start="00:07:24.800" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Here's also Jonathan.""" start="00:07:27.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""He is not a public reference thing.""" start="00:07:30.200" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Also, I have these things here.""" start="00:07:33.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And here's my captured information""" start="00:07:37.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""along with the citation link to it.""" start="00:07:39.400" video="mainVideo-writing" id="subtitle"]] +[[!template text="""Again, helpful to be consistent.""" start="00:07:42.600" video="mainVideo-writing" id="subtitle"]] + +[[!template new="1" text="""Conclusion""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]] + +[[!template text="""In conclusion, when I started learning Emacs,""" start="00:07:49.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I quickly shifted to vanilla Emacs and just started writing.""" start="00:07:52.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""As I wrote, when I needed to do something that I'd previously""" start="00:07:55.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""done in a text editor, I'd find an experiment with a package.""" start="00:07:59.520" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I continue that mindset.""" start="00:08:03.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""As I write, I'm attending to what I'm doing.""" start="00:08:04.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And eventually, I realize if I were to just write""" start="00:08:06.840" video="mainVideo-writing" id="subtitle"]] +[[!template text="""a function that does this one thing,""" start="00:08:08.880" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'd have a smoother writing experience.""" start="00:08:11.640" video="mainVideo-writing" id="subtitle"]] +[[!template text="""This helps me practice my craft, extend my editor,""" start="00:08:13.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""understand its capabilities, and begin exploring other things.""" start="00:08:16.360" video="mainVideo-writing" id="subtitle"]] +[[!template text="""The goal of this is all to minimize the distractions.""" start="00:08:20.000" video="mainVideo-writing" id="subtitle"]] +[[!template text="""As I'm thinking about it, I wanted to quickly add it""" start="00:08:23.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""and then move along,""" start="00:08:25.760" video="mainVideo-writing" id="subtitle"]] +[[!template text="""basically creating breadcrumbs for me""" start="00:08:27.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""to follow my thoughts in the future.""" start="00:08:29.560" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And one of those functions is""" start="00:08:31.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""I'd like to write an extender for my abbr,""" start="00:08:33.160" video="mainVideo-writing" id="subtitle"]] +[[!template text="""abbreviation export to work in Latex.""" start="00:08:36.480" video="mainVideo-writing" id="subtitle"]] +[[!template text="""It's like halfway there.""" start="00:08:38.680" video="mainVideo-writing" id="subtitle"]] +[[!template text="""So I'm looking forward to getting that done""" start="00:08:40.280" video="mainVideo-writing" id="subtitle"]] +[[!template text="""when I have some time and can prioritize it.""" start="00:08:42.240" video="mainVideo-writing" id="subtitle"]] +[[!template text="""But for now, thank you.""" start="00:08:45.440" video="mainVideo-writing" id="subtitle"]] +[[!template text="""And I look forward to your questions.""" start="00:08:47.800" video="mainVideo-writing" id="subtitle"]] + + + +Captioner: bala + +<a name="writing-qanda-transcript"></a> +# Q&A transcript (unedited) + +[[!template text="""[Speaker 0]: All right, I've started the recording,""" start="00:00:00.060" video="qanda-writing" id="subtitle"]] +[[!template text="""so Sasha, you don't need to worry about this.""" start="00:00:01.400" video="qanda-writing" id="subtitle"]] +[[!template text="""Hi Jeremy, how are you doing?""" start="00:00:03.240" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: I'm doing great, how about you?""" start="00:00:04.779" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: I am also doing great,""" start="00:00:08.039" video="qanda-writing" id="subtitle"]] +[[!template text="""I am feeling replenished after this lunch""" start="00:00:09.380" video="qanda-writing" id="subtitle"]] +[[!template text="""break and I am happy to go back for 4 more""" start="00:00:11.780" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: Me too. Let me""" start="00:00:15.900" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: hours of conferences. just,""" start="00:00:14.179" video="qanda-writing" id="subtitle"]] +[[!template text="""yeah great, Let me just put up the questions.""" start="00:00:17.303" video="qanda-writing" id="subtitle"]] +[[!template text="""So Jeremy is going to read the questions and""" start="00:00:20.660" video="qanda-writing" id="subtitle"]] +[[!template text="""answer them and I will be doing jazz hands in""" start="00:00:22.440" video="qanda-writing" id="subtitle"]] +[[!template text="""the background or provide any bits of""" start="00:00:24.380" video="qanda-writing" id="subtitle"]] +[[!template text="""information I may, considering that Orgrim""" start="00:00:26.599" video="qanda-writing" id="subtitle"]] +[[!template text="""has been mentioned during the presentation""" start="00:00:28.860" video="qanda-writing" id="subtitle"]] +[[!template text="""and everyone's going to want to ask me.""" start="00:00:30.080" video="qanda-writing" id="subtitle"]] +[[!template text="""at... Show me? Yeah, go.""" start="00:00:35.640" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: So I'm looking I'm looking at the,""" start="00:00:35.080" video="qanda-writing" id="subtitle"]] +[[!template text="""do you think the line numbers for writing""" start="00:00:39.280" video="qanda-writing" id="subtitle"]] +[[!template text="""documents is kind of a distraction,""" start="00:00:41.160" video="qanda-writing" id="subtitle"]] +[[!template text="""especially for notes? No,""" start="00:00:43.260" video="qanda-writing" id="subtitle"]] +[[!template text="""I do software development and that left""" start="00:00:47.860" video="qanda-writing" id="subtitle"]] +[[!template text="""fringe is kind of invisible,""" start="00:00:51.180" video="qanda-writing" id="subtitle"]] +[[!template text="""but I do like to use jump to line.""" start="00:00:53.680" video="qanda-writing" id="subtitle"]] +[[!template text="""So I just bind that to control L and it's""" start="00:00:56.320" video="qanda-writing" id="subtitle"]] +[[!template text="""helpful to just see that.""" start="00:00:59.580" video="qanda-writing" id="subtitle"]] +[[!template text="""So no, I haven't noticed that.""" start="00:01:02.980" video="qanda-writing" id="subtitle"]] +[[!template text="""There are other ways to jump around in Emacs,""" start="00:01:05.500" video="qanda-writing" id="subtitle"]] +[[!template text="""but I like to have many different ways.""" start="00:01:07.540" video="qanda-writing" id="subtitle"]] +[[!template text="""So, yeah. Then how do you manage private and""" start="00:01:11.000" video="qanda-writing" id="subtitle"]] +[[!template text="""public data with your Zettelkasten?""" start="00:01:17.120" video="qanda-writing" id="subtitle"]] +[[!template text="""1 of my blockers on putting my Zettelkasten""" start="00:01:20.820" video="qanda-writing" id="subtitle"]] +[[!template text="""on the web is I don't want everything to be""" start="00:01:23.600" video="qanda-writing" id="subtitle"]] +[[!template text="""public, especially fleeting notes.""" start="00:01:26.240" video="qanda-writing" id="subtitle"]] +[[!template text="""So 1 thing is I only explicitly export a file""" start="00:01:31.360" video="qanda-writing" id="subtitle"]] +[[!template text="""to Hugo and I have that,""" start="00:01:36.560" video="qanda-writing" id="subtitle"]] +[[!template text="""I can like, I can export this.""" start="00:01:39.380" video="qanda-writing" id="subtitle"]] +[[!template text="""That doesn't show up very well.""" start="00:01:41.520" video="qanda-writing" id="subtitle"]] +[[!template text="""So it's export probably export org to take on""" start="00:01:44.540" video="qanda-writing" id="subtitle"]] +[[!template text="""rules and we'll export the buffer.""" start="00:01:50.280" video="qanda-writing" id="subtitle"]] +[[!template text="""And then any that I referenced,""" start="00:01:53.760" video="qanda-writing" id="subtitle"]] +[[!template text="""like these are all links,""" start="00:01:57.080" video="qanda-writing" id="subtitle"]] +[[!template text="""any notes that are not public will be""" start="00:01:58.660" video="qanda-writing" id="subtitle"]] +[[!template text="""exported as the text, but there won't be a""" start="00:02:04.380" video="qanda-writing" id="subtitle"]] +[[!template text="""link to it. So it's having the very""" start="00:02:06.480" video="qanda-writing" id="subtitle"]] +[[!template text="""deliberate, this is going up.""" start="00:02:10.160" video="qanda-writing" id="subtitle"]] +[[!template text="""And so I send it over into Hugo,""" start="00:02:13.040" video="qanda-writing" id="subtitle"]] +[[!template text="""which is its own repository,""" start="00:02:15.900" video="qanda-writing" id="subtitle"]] +[[!template text="""and either massage it there or whatnot.""" start="00:02:18.700" video="qanda-writing" id="subtitle"]] +[[!template text="""Is that any further questions on that 1?""" start="00:02:22.800" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: I don't think so.""" start="00:02:27.980" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: Is there anything special you're using from""" start="00:02:33.940" video="qanda-writing" id="subtitle"]] +[[!template text="""org to Hugo markdown? This looks like a""" start="00:02:36.940" video="qanda-writing" id="subtitle"]] +[[!template text="""really nice setup. I like to give it a try.""" start="00:02:38.960" video="qanda-writing" id="subtitle"]] +[[!template text="""Yes, there I have a bespoke build process.""" start="00:02:43.840" video="qanda-writing" id="subtitle"]] +[[!template text="""Having started in WordPress,""" start="00:02:48.900" video="qanda-writing" id="subtitle"]] +[[!template text="""working through Jekyll,""" start="00:02:50.280" video="qanda-writing" id="subtitle"]] +[[!template text="""going to Hugo, and then switching from""" start="00:02:51.460" video="qanda-writing" id="subtitle"]] +[[!template text="""Markdown to org mode, I've backed into this""" start="00:02:54.200" video="qanda-writing" id="subtitle"]] +[[!template text="""private public Zettelkasten,""" start="00:02:57.740" video="qanda-writing" id="subtitle"]] +[[!template text="""which is really nice. And I have added quite""" start="00:03:00.140" video="qanda-writing" id="subtitle"]] +[[!template text="""a bit of code. There's my dog.""" start="00:03:04.840" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: blogging.""" start="00:03:15.520" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: In my So I have, how do I export like side""" start="00:03:10.640" video="qanda-writing" id="subtitle"]] +[[!template text="""notes because I want I have marginalia""" start="00:03:20.720" video="qanda-writing" id="subtitle"]] +[[!template text="""instead of like the footnotes,""" start="00:03:23.200" video="qanda-writing" id="subtitle"]] +[[!template text="""but I still use org mode footnotes.""" start="00:03:24.940" video="qanda-writing" id="subtitle"]] +[[!template text="""And so I've got a bunch of these things and""" start="00:03:27.520" video="qanda-writing" id="subtitle"]] +[[!template text="""this is all available up on GitHub And I'll""" start="00:03:29.700" video="qanda-writing" id="subtitle"]] +[[!template text="""provide a link in the document.""" start="00:03:32.800" video="qanda-writing" id="subtitle"]] +[[!template text="""Yeah, so there's quite a bit of making the""" start="00:03:36.740" video="qanda-writing" id="subtitle"]] +[[!template text="""export work how I want it.""" start="00:03:42.280" video="qanda-writing" id="subtitle"]] +[[!template text="""And I've been kind of fiddling with also""" start="00:03:45.040" video="qanda-writing" id="subtitle"]] +[[!template text="""improving like LaTeX or PDF export.""" start="00:03:48.840" video="qanda-writing" id="subtitle"]] +[[!template text="""So yeah, I have a long running to do item to""" start="00:03:54.720" video="qanda-writing" id="subtitle"]] +[[!template text="""fully lay out my bespoke build process.""" start="00:03:59.480" video="qanda-writing" id="subtitle"]] +[[!template text="""Because once it gets to Hugo,""" start="00:04:02.920" video="qanda-writing" id="subtitle"]] +[[!template text="""there's also additional work that I do to""" start="00:04:04.960" video="qanda-writing" id="subtitle"]] +[[!template text="""compile what is kind of a personal,""" start="00:04:07.440" video="qanda-writing" id="subtitle"]] +[[!template text="""like a digital garden-ish,""" start="00:04:12.340" video="qanda-writing" id="subtitle"]] +[[!template text="""it's really a blog focused 1.""" start="00:04:15.160" video="qanda-writing" id="subtitle"]] +[[!template text="""So yeah, it's at Jeremy F on GitHub at dot""" start="00:04:18.160" video="qanda-writing" id="subtitle"]] +[[!template text="""Emacs. And you'll be looking for JF""" start="00:04:28.080" video="qanda-writing" id="subtitle"]] +[[!template text="""blogging.l that has some of this.""" start="00:04:33.200" video="qanda-writing" id="subtitle"]] +[[!template text="""Also jforgmode.l will have some of that.""" start="00:04:37.360" video="qanda-writing" id="subtitle"]] +[[!template text="""Yeah, I wanna circle back to that,""" start="00:04:45.400" video="qanda-writing" id="subtitle"]] +[[!template text="""anything to prevent private links from""" start="00:04:49.540" video="qanda-writing" id="subtitle"]] +[[!template text="""getting accidentally being made publicly""" start="00:04:51.560" video="qanda-writing" id="subtitle"]] +[[!template text="""accessible. Yes. So previous to using denote,""" start="00:04:54.560" video="qanda-writing" id="subtitle"]] +[[!template text="""I also used org-roam. So I have this idea of""" start="00:05:02.440" video="qanda-writing" id="subtitle"]] +[[!template text="""a node in org-roam has roam refs.""" start="00:05:06.480" video="qanda-writing" id="subtitle"]] +[[!template text="""And org-roam is much more robust about that.""" start="00:05:13.360" video="qanda-writing" id="subtitle"]] +[[!template text="""So anytime you mention a ref,""" start="00:05:15.660" video="qanda-writing" id="subtitle"]] +[[!template text="""it will count it as a backlink.""" start="00:05:18.740" video="qanda-writing" id="subtitle"]] +[[!template text="""So for example, if my node was my blog,""" start="00:05:20.820" video="qanda-writing" id="subtitle"]] +[[!template text="""take on rules, anytime,""" start="00:05:23.860" video="qanda-writing" id="subtitle"]] +[[!template text="""anywhere in my org Rome repository,""" start="00:05:26.000" video="qanda-writing" id="subtitle"]] +[[!template text="""I mentioned takeonrules.com,""" start="00:05:30.700" video="qanda-writing" id="subtitle"]] +[[!template text="""it would treat it as a backlink.""" start="00:05:33.280" video="qanda-writing" id="subtitle"]] +[[!template text="""So from that Rome refs,""" start="00:05:35.740" video="qanda-writing" id="subtitle"]] +[[!template text="""I have a, I will interrogate,""" start="00:05:39.780" video="qanda-writing" id="subtitle"]] +[[!template text="""and this is not the function for I will look""" start="00:05:45.720" video="qanda-writing" id="subtitle"]] +[[!template text="""at the node to see does it have a Rome ref""" start="00:05:47.800" video="qanda-writing" id="subtitle"]] +[[!template text="""and if it does I will treat it as a public""" start="00:05:51.040" video="qanda-writing" id="subtitle"]] +[[!template text="""link. So I don't I haven't bled out any""" start="00:05:53.760" video="qanda-writing" id="subtitle"]] +[[!template text="""private information because again going back""" start="00:05:59.060" video="qanda-writing" id="subtitle"]] +[[!template text="""to I only publish a document and the document""" start="00:06:01.620" video="qanda-writing" id="subtitle"]] +[[!template text="""I'm explicitly doing so and then my process""" start="00:06:06.340" video="qanda-writing" id="subtitle"]] +[[!template text="""filters out any links that do not have public""" start="00:06:09.220" video="qanda-writing" id="subtitle"]] +[[!template text="""URLs. It will just dump it in there as maybe""" start="00:06:12.720" video="qanda-writing" id="subtitle"]] +[[!template text="""a span with a ref class of it so that I can""" start="00:06:17.140" video="qanda-writing" id="subtitle"]] +[[!template text="""kind of know that that came from there.""" start="00:06:20.640" video="qanda-writing" id="subtitle"]] +[[!template text="""Yes, So the font I am using is,""" start="00:06:29.600" video="qanda-writing" id="subtitle"]] +[[!template text="""so this is another font.""" start="00:06:36.820" video="qanda-writing" id="subtitle"]] +[[!template text="""What font were you using in EWW?""" start="00:06:38.620" video="qanda-writing" id="subtitle"]] +[[!template text="""I think I'm using IOS Becca and ET Bembo.""" start="00:06:42.940" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Okay, show me your EWW.""" start="00:06:51.700" video="qanda-writing" id="subtitle"]] +[[!template text="""If we are doing full ricing setup,""" start="00:06:53.560" video="qanda-writing" id="subtitle"]] +[[!template text="""I can recognize Yosefka just by looking at""" start="00:06:55.440" video="qanda-writing" id="subtitle"]] +[[!template text="""it.""" start="00:06:58.440" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: So let's... Yeah, so yeah,""" start="00:06:50.640" video="qanda-writing" id="subtitle"]] +[[!template text="""ET Bembo, I'm using these 2 fonts as kind of""" start="00:07:01.300" video="qanda-writing" id="subtitle"]] +[[!template text="""my anchor. So the variable pitch is ETBembo.""" start="00:07:06.240" video="qanda-writing" id="subtitle"]] +[[!template text="""My blog started off with a Tufta style CSS""" start="00:07:10.240" video="qanda-writing" id="subtitle"]] +[[!template text="""and I really pared it down and got rid of any""" start="00:07:14.100" video="qanda-writing" id="subtitle"]] +[[!template text="""of the additional fonts because they can be""" start="00:07:16.360" video="qanda-writing" id="subtitle"]] +[[!template text="""used as trackers. And I'm like,""" start="00:07:19.940" video="qanda-writing" id="subtitle"]] +[[!template text="""nope, you decide what font you want for your""" start="00:07:21.580" video="qanda-writing" id="subtitle"]] +[[!template text="""browser. I don't need to tell you what looks""" start="00:07:24.020" video="qanda-writing" id="subtitle"]] +[[!template text="""good for you. Yeah, so the story of Take On""" start="00:07:26.420" video="qanda-writing" id="subtitle"]] +[[!template text="""Rules, I have to thank my partner and lovely""" start="00:07:33.680" video="qanda-writing" id="subtitle"]] +[[!template text="""wife for that. She kind of nudged me to do""" start="00:07:37.480" video="qanda-writing" id="subtitle"]] +[[!template text="""some blogging, and we spent some time""" start="00:07:41.180" video="qanda-writing" id="subtitle"]] +[[!template text="""thinking about it. And originally,""" start="00:07:43.080" video="qanda-writing" id="subtitle"]] +[[!template text="""it started off as writing about rules for""" start="00:07:45.160" video="qanda-writing" id="subtitle"]] +[[!template text="""role-playing games or tabletop games.""" start="00:07:48.700" video="qanda-writing" id="subtitle"]] +[[!template text="""And it has extended far beyond that.""" start="00:07:51.820" video="qanda-writing" id="subtitle"]] +[[!template text="""The blog, as I've shifted,""" start="00:07:54.960" video="qanda-writing" id="subtitle"]] +[[!template text="""as I think I mentioned in the presentation,""" start="00:07:56.920" video="qanda-writing" id="subtitle"]] +[[!template text="""as I've shifted towards an everything and""" start="00:07:59.060" video="qanda-writing" id="subtitle"]] +[[!template text="""nothing approach, the blog is anything I want""" start="00:08:01.640" video="qanda-writing" id="subtitle"]] +[[!template text="""to write about anymore.""" start="00:08:05.180" video="qanda-writing" id="subtitle"]] +[[!template text="""There's haikus up there with some regularity.""" start="00:08:06.980" video="qanda-writing" id="subtitle"]] +[[!template text="""So the name is now a relic of a past.""" start="00:08:10.080" video="qanda-writing" id="subtitle"]] +[[!template text="""So yeah, the thing and nothing is,""" start="00:08:18.340" video="qanda-writing" id="subtitle"]] +[[!template text="""and I put that in the about on my blog.""" start="00:08:22.360" video="qanda-writing" id="subtitle"]] +[[!template text="""So it's, I highly encourage like,""" start="00:08:25.640" video="qanda-writing" id="subtitle"]] +[[!template text="""I feel great. Once I like said,""" start="00:08:29.440" video="qanda-writing" id="subtitle"]] +[[!template text="""oh, I don't have to write this towards a""" start="00:08:34.440" video="qanda-writing" id="subtitle"]] +[[!template text="""topical blog post or like what the topic is,""" start="00:08:36.740" video="qanda-writing" id="subtitle"]] +[[!template text="""it freed it up. And I know that it comes at a""" start="00:08:40.380" video="qanda-writing" id="subtitle"]] +[[!template text="""potential compromise because it's very much""" start="00:08:44.800" video="qanda-writing" id="subtitle"]] +[[!template text="""me being a voice up there instead of""" start="00:08:47.500" video="qanda-writing" id="subtitle"]] +[[!template text="""something that is curated and filtered""" start="00:08:51.960" video="qanda-writing" id="subtitle"]] +[[!template text="""through a specific channel like I could have""" start="00:08:53.760" video="qanda-writing" id="subtitle"]] +[[!template text="""a technical blog but I decided I'm just gonna""" start="00:08:56.060" video="qanda-writing" id="subtitle"]] +[[!template text="""tag it as programming or emacs and let you""" start="00:08:59.340" video="qanda-writing" id="subtitle"]] +[[!template text="""find it and you can subscribe to the rss""" start="00:09:02.420" video="qanda-writing" id="subtitle"]] +[[!template text="""feeds of each tag that you find applicable""" start="00:09:04.920" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: right thank you so we are we are at the last""" start="00:09:10.120" video="qanda-writing" id="subtitle"]] +[[!template text="""question on the pad but I see that some""" start="00:09:13.840" video="qanda-writing" id="subtitle"]] +[[!template text="""people have joined us on the blue button.""" start="00:09:16.100" video="qanda-writing" id="subtitle"]] +[[!template text="""So, hi everyone! We have about 6 minutes""" start="00:09:18.480" video="qanda-writing" id="subtitle"]] +[[!template text="""until we need to go to the next talk,""" start="00:09:22.420" video="qanda-writing" id="subtitle"]] +[[!template text="""but if anyone has a question on the blue""" start="00:09:24.220" video="qanda-writing" id="subtitle"]] +[[!template text="""button, I'm thinking about James who's joined""" start="00:09:26.460" video="qanda-writing" id="subtitle"]] +[[!template text="""us and who was kind enough to drop a thank""" start="00:09:28.780" video="qanda-writing" id="subtitle"]] +[[!template text="""you line on the blue button.""" start="00:09:32.780" video="qanda-writing" id="subtitle"]] +[[!template text="""Do you want to unmute yourself and ask a""" start="00:09:33.940" video="qanda-writing" id="subtitle"]] +[[!template text="""question maybe? I'm not putting pressure by""" start="00:09:35.460" video="qanda-writing" id="subtitle"]] +[[!template text="""the way, I don't feel like you need to but it""" start="00:09:39.520" video="qanda-writing" id="subtitle"]] +[[!template text="""just... I speak all the time otherwise I'm""" start="00:09:41.870" video="qanda-writing" id="subtitle"]] +[[!template text="""very happy to spend time with our speakers""" start="00:09:44.060" video="qanda-writing" id="subtitle"]] +[[!template text="""you know but you know EmacsConf it's about,""" start="00:09:45.720" video="qanda-writing" id="subtitle"]] +[[!template text="""as Sasha told you during the intro,""" start="00:09:49.400" video="qanda-writing" id="subtitle"]] +[[!template text="""it's about making people take things,""" start="00:09:51.540" video="qanda-writing" id="subtitle"]] +[[!template text="""brilliant things out of their mind and put""" start="00:09:54.240" video="qanda-writing" id="subtitle"]] +[[!template text="""them outside in the public.""" start="00:09:56.100" video="qanda-writing" id="subtitle"]] +[[!template text="""And for us, you know, we get to see the talk""" start="00:09:57.940" video="qanda-writing" id="subtitle"]] +[[!template text="""evolve, we talk with people.""" start="00:10:00.660" video="qanda-writing" id="subtitle"]] +[[!template text="""So for us we are already quite cognizant of""" start="00:10:01.720" video="qanda-writing" id="subtitle"]] +[[!template text="""the topic and the point is not for us hosts""" start="00:10:03.840" video="qanda-writing" id="subtitle"]] +[[!template text="""to ask questions, it's mostly for you to ask""" start="00:10:06.360" video="qanda-writing" id="subtitle"]] +[[!template text="""questions and then we worry about all the""" start="00:10:09.780" video="qanda-writing" id="subtitle"]] +[[!template text="""fancy stuff in the background.""" start="00:10:11.580" video="qanda-writing" id="subtitle"]] +[[!template text="""Otherwise you damn well know I will ask""" start="00:10:13.900" video="qanda-writing" id="subtitle"]] +[[!template text="""questions about org-roam,""" start="00:10:16.080" video="qanda-writing" id="subtitle"]] +[[!template text="""about links, and nodes in general,""" start="00:10:18.900" video="qanda-writing" id="subtitle"]] +[[!template text="""because that's my bread and butter.""" start="00:10:20.460" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, I should add, like,""" start="00:10:24.720" video="qanda-writing" id="subtitle"]] +[[!template text="""the process of migrating the data from a""" start="00:10:27.440" video="qanda-writing" id="subtitle"]] +[[!template text="""WordPress export to markdown to org mode by""" start="00:10:31.820" video="qanda-writing" id="subtitle"]] +[[!template text="""way of Pandoc was, it was really insightful""" start="00:10:35.220" video="qanda-writing" id="subtitle"]] +[[!template text="""to help me understand how I want the data to""" start="00:10:39.720" video="qanda-writing" id="subtitle"]] +[[!template text="""flow and how I could create a repository for""" start="00:10:42.900" video="qanda-writing" id="subtitle"]] +[[!template text="""me of information and 1 that I could then""" start="00:10:47.580" video="qanda-writing" id="subtitle"]] +[[!template text="""send out into the world,""" start="00:10:50.940" video="qanda-writing" id="subtitle"]] +[[!template text="""the public information,""" start="00:10:52.540" video="qanda-writing" id="subtitle"]] +[[!template text="""while not having to worry about the private""" start="00:10:54.240" video="qanda-writing" id="subtitle"]] +[[!template text="""things that I might want to keep.""" start="00:10:58.460" video="qanda-writing" id="subtitle"]] +[[!template text="""So it was that process of just working""" start="00:11:01.620" video="qanda-writing" id="subtitle"]] +[[!template text="""through it to reflect on how I'm writing and""" start="00:11:04.240" video="qanda-writing" id="subtitle"]] +[[!template text="""what I started using writing for.""" start="00:11:08.940" video="qanda-writing" id="subtitle"]] +[[!template text="""I think Richard Feynman said,""" start="00:11:12.040" video="qanda-writing" id="subtitle"]] +[[!template text="""no, writing is my thinking.""" start="00:11:14.040" video="qanda-writing" id="subtitle"]] +[[!template text="""What I wrote is thinking.""" start="00:11:15.680" video="qanda-writing" id="subtitle"]] +[[!template text="""So it has helped to really frame that.""" start="00:11:18.240" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Yeah, I mean, there's an interesting""" start="00:11:22.800" video="qanda-writing" id="subtitle"]] +[[!template text="""ambivalent relationship because it feels like""" start="00:11:27.200" video="qanda-writing" id="subtitle"]] +[[!template text="""writing helps thinking and thinking helps""" start="00:11:29.220" video="qanda-writing" id="subtitle"]] +[[!template text="""writing in a way and nowhere have I""" start="00:11:31.800" video="qanda-writing" id="subtitle"]] +[[!template text="""personally been more aware of this than when""" start="00:11:35.340" video="qanda-writing" id="subtitle"]] +[[!template text="""coming up with networks of notes because it""" start="00:11:38.000" video="qanda-writing" id="subtitle"]] +[[!template text="""really I mean you use whichever word you want""" start="00:11:41.000" video="qanda-writing" id="subtitle"]] +[[!template text="""you know a second brain a collection of notes""" start="00:11:43.860" video="qanda-writing" id="subtitle"]] +[[!template text="""a slip box a repository of notes whichever""" start="00:11:45.900" video="qanda-writing" id="subtitle"]] +[[!template text="""the tool you use the point at the end is to""" start="00:11:48.860" video="qanda-writing" id="subtitle"]] +[[!template text="""resonate with you. It's kind of like""" start="00:11:52.080" video="qanda-writing" id="subtitle"]] +[[!template text="""extending those moments of consciousness that""" start="00:11:54.000" video="qanda-writing" id="subtitle"]] +[[!template text="""you have when you take your notes,""" start="00:11:57.280" video="qanda-writing" id="subtitle"]] +[[!template text="""and you make the entire gradient available.""" start="00:11:59.440" video="qanda-writing" id="subtitle"]] +[[!template text="""Sorry, I heard Sasha whispering in my ear""" start="00:12:04.260" video="qanda-writing" id="subtitle"]] +[[!template text="""sometimes. It's pretty pleasant.""" start="00:12:06.380" video="qanda-writing" id="subtitle"]] +[[!template text="""It's really shocking.""" start="00:12:09.520" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, Aaron, you had a question.""" start="00:12:12.660" video="qanda-writing" id="subtitle"]] +[[!template text="""Do I use denote just for my blogs or do I use""" start="00:12:15.040" video="qanda-writing" id="subtitle"]] +[[!template text="""it for other purposes?""" start="00:12:17.440" video="qanda-writing" id="subtitle"]] +[[!template text="""I use denote for all of my note taking and""" start="00:12:19.940" video="qanda-writing" id="subtitle"]] +[[!template text="""almost, I think it's exclusively org mode""" start="00:12:25.520" video="qanda-writing" id="subtitle"]] +[[!template text="""that I, that I use it in.""" start="00:12:28.920" video="qanda-writing" id="subtitle"]] +[[!template text="""But what I really appreciated in the""" start="00:12:30.600" video="qanda-writing" id="subtitle"]] +[[!template text="""consideration that Proc put forward was the""" start="00:12:33.400" video="qanda-writing" id="subtitle"]] +[[!template text="""file name encodes the information that's""" start="00:12:37.500" video="qanda-writing" id="subtitle"]] +[[!template text="""relevant. So it has helped me be able to""" start="00:12:40.940" video="qanda-writing" id="subtitle"]] +[[!template text="""query by using things like ripgrep,""" start="00:12:46.080" video="qanda-writing" id="subtitle"]] +[[!template text="""well not ripgrep, tree or I forget any more""" start="00:12:49.220" video="qanda-writing" id="subtitle"]] +[[!template text="""what I use. But having that the file encodes""" start="00:12:54.480" video="qanda-writing" id="subtitle"]] +[[!template text="""useful information. And it's so much more""" start="00:13:00.300" video="qanda-writing" id="subtitle"]] +[[!template text="""relevant when I look at having worked at a""" start="00:13:03.820" video="qanda-writing" id="subtitle"]] +[[!template text="""university that rolled out Google Drive to""" start="00:13:06.960" video="qanda-writing" id="subtitle"]] +[[!template text="""everyone without any guidance on how to""" start="00:13:10.520" video="qanda-writing" id="subtitle"]] +[[!template text="""organize stuff. And I worked at a library and""" start="00:13:12.840" video="qanda-writing" id="subtitle"]] +[[!template text="""it was just a nightmare watching things show""" start="00:13:16.120" video="qanda-writing" id="subtitle"]] +[[!template text="""up where you could never find it again.""" start="00:13:19.540" video="qanda-writing" id="subtitle"]] +[[!template text="""So, file name, the file name having the date,""" start="00:13:23.240" video="qanda-writing" id="subtitle"]] +[[!template text="""having the title and having tags just made so""" start="00:13:28.380" video="qanda-writing" id="subtitle"]] +[[!template text="""much sense to be findable.""" start="00:13:33.280" video="qanda-writing" id="subtitle"]] +[[!template text="""And yeah, I really do just use org.""" start="00:13:36.820" video="qanda-writing" id="subtitle"]] +[[!template text="""But if I am going to make txt files or other""" start="00:13:41.740" video="qanda-writing" id="subtitle"]] +[[!template text="""files, I have started adopting that structure""" start="00:13:47.220" video="qanda-writing" id="subtitle"]] +[[!template text="""and format.""" start="00:13:52.120" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Right. Well, Jeremy, we have about 1 minute""" start="00:13:56.840" video="qanda-writing" id="subtitle"]] +[[!template text="""and 30 seconds left until we go on to the""" start="00:14:00.900" video="qanda-writing" id="subtitle"]] +[[!template text="""next talk. Do you have any final words""" start="00:14:03.080" video="qanda-writing" id="subtitle"]] +[[!template text="""regarding your presentation or maybe where""" start="00:14:05.140" video="qanda-writing" id="subtitle"]] +[[!template text="""people can find you? I know you've already""" start="00:14:06.740" video="qanda-writing" id="subtitle"]] +[[!template text="""mentioned this but...""" start="00:14:08.400" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: Yeah, take on rules. I'm also on dice camp""" start="00:14:09.240" video="qanda-writing" id="subtitle"]] +[[!template text="""dice.campmastodon at take on rules and I've""" start="00:14:13.440" video="qanda-writing" id="subtitle"]] +[[!template text="""thought about emacs.h but we federate well So""" start="00:14:18.080" video="qanda-writing" id="subtitle"]] +[[!template text="""I appreciate that. And I can stay on and""" start="00:14:22.340" video="qanda-writing" id="subtitle"]] +[[!template text="""answer any further questions if folks have""" start="00:14:27.560" video="qanda-writing" id="subtitle"]] +[[!template text="""it.""" start="00:14:29.680" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Sure. So sorry. Sorry,""" start="00:14:31.420" video="qanda-writing" id="subtitle"]] +[[!template text="""I confused myself with the buttons talking to""" start="00:14:34.860" video="qanda-writing" id="subtitle"]] +[[!template text="""production and all. Well then,""" start="00:14:36.820" video="qanda-writing" id="subtitle"]] +[[!template text="""what I'm going to do is that the stream is""" start="00:14:38.960" video="qanda-writing" id="subtitle"]] +[[!template text="""going to move on to the next talk in about 50""" start="00:14:41.260" video="qanda-writing" id="subtitle"]] +[[!template text="""seconds. If people want to join and ask any""" start="00:14:43.740" video="qanda-writing" id="subtitle"]] +[[!template text="""questions, feel free to join on the blue""" start="00:14:46.160" video="qanda-writing" id="subtitle"]] +[[!template text="""button. The link is on the talk page or on""" start="00:14:49.160" video="qanda-writing" id="subtitle"]] +[[!template text="""IRC. And feel free to hang out as long as you""" start="00:14:51.380" video="qanda-writing" id="subtitle"]] +[[!template text="""want to ask as many questions as you want to""" start="00:14:54.480" video="qanda-writing" id="subtitle"]] +[[!template text="""Jeremy. We are recording all of this and""" start="00:14:56.160" video="qanda-writing" id="subtitle"]] +[[!template text="""we'll be publishing this later on once again.""" start="00:14:58.180" video="qanda-writing" id="subtitle"]] +[[!template text="""And all that's left for me to do is to thank""" start="00:15:01.120" video="qanda-writing" id="subtitle"]] +[[!template text="""you so much, Jeremy, for your presentation""" start="00:15:03.080" video="qanda-writing" id="subtitle"]] +[[!template text="""and your answers. And I will see you another""" start="00:15:05.740" video="qanda-writing" id="subtitle"]] +[[!template text="""time.""" start="00:15:08.200" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: So yeah, plasma strike.""" start="00:15:12.700" video="qanda-writing" id="subtitle"]] +[[!template text="""I'm not able to grant speaking powers.""" start="00:15:15.560" video="qanda-writing" id="subtitle"]] +[[!template text="""So if you wanted to type up something""" start="00:15:20.340" video="qanda-writing" id="subtitle"]] +[[!template text="""question-wise.""" start="00:15:22.160" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Oh, okay. I'll manage this in the background.""" start="00:15:24.000" video="qanda-writing" id="subtitle"]] +[[!template text="""So we're moving on to the next talk.""" start="00:15:26.000" video="qanda-writing" id="subtitle"]] +[[!template text="""We'll figure out the things about VBB,""" start="00:15:28.500" video="qanda-writing" id="subtitle"]] +[[!template text="""But in the meantime, enjoy the next talk.""" start="00:15:30.240" video="qanda-writing" id="subtitle"]] +[[!template text="""Bye. All right, Jeremy.""" start="00:15:34.140" video="qanda-writing" id="subtitle"]] +[[!template text="""We are now on the next talk.""" start="00:15:35.460" video="qanda-writing" id="subtitle"]] +[[!template text="""Sorry about having to mention multiple things""" start="00:15:37.080" video="qanda-writing" id="subtitle"]] +[[!template text="""at the same time. Speaking rights.""" start="00:15:39.240" video="qanda-writing" id="subtitle"]] +[[!template text="""I will try fixing this in the background.""" start="00:15:42.500" video="qanda-writing" id="subtitle"]] +[[!template text="""I need to get moving for the next talk,""" start="00:15:44.440" video="qanda-writing" id="subtitle"]] +[[!template text="""but I'll do it in the background and we'll""" start="00:15:46.120" video="qanda-writing" id="subtitle"]] +[[!template text="""let you know as soon as it's ready.""" start="00:15:48.040" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 1]: We're doing great. Okay.""" start="00:15:40.440" video="qanda-writing" id="subtitle"]] +[[!template text="""[Speaker 0]: Alright, bye bye Jeremy.""" start="00:15:51.220" video="qanda-writing" id="subtitle"]] + +Questions or comments? Please e-mail [jeremy@jeremyfriesen.com](mailto:jeremy@jeremyfriesen.com?subject=Comment%20for%20EmacsConf%202023%20writing%3A%20Emacs%20turbo-charges%20my%20writing) + + +<!-- End of emacsconf-publish-after-page --> diff --git a/2023/info/writing-before.md b/2023/info/writing-before.md new file mode 100644 index 00000000..e46b512f --- /dev/null +++ b/2023/info/writing-before.md @@ -0,0 +1,28 @@ +<!-- Automatically generated by emacsconf-publish-before-page --> +[[!toc ]] +Format: 9-min talk; Q&A: BigBlueButton conference room +Status: Q&A to be extracted from the room recordings + + + + + +# Talk + +<div class="vid"><video controls preload="none" id="writing-mainVideo"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="writing-mainVideo" data=""" +00:00.000 Intro +00:57.120 How I got here +01:18.400 Friction +01:45.960 Domains for notes +02:15.920 Demo +02:55.440 Dabbrev and hippie-expand +03:32.840 Links +07:49.160 Conclusion + +"""]]<div></div>Duration: 08:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li><li><a href="https://toobnix.org/w/ke3UCJaJSLyQr7Emv8VxST">View on Toobnix</a></li></ul></div></div> + +# Q&A + +<div class="vid"><video controls preload="none" id="writing-qanda"><source src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div>Listen to just the audio:<br /><audio controls preload="none" id="writing-qanda-audio" src="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus"></audio></div><div></div>Duration: 15:53 minutes<div class="files resources"><ul><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li></ul></div></div> +# Description +<!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2023/info/writing-nav.md b/2023/info/writing-nav.md new file mode 100644 index 00000000..fa3bdae7 --- /dev/null +++ b/2023/info/writing-nav.md @@ -0,0 +1,7 @@ + +<div class="talk-nav"> +Back to the [[talks]] +Previous by track: <a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a> +Next by track: <a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a> +Track: <span class="sched-track General">General</span> +</div> diff --git a/2023/organizers-notebook.md b/2023/organizers-notebook.md new file mode 100644 index 00000000..8fe6916b --- /dev/null +++ b/2023/organizers-notebook.md @@ -0,0 +1,2350 @@ +<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. --> +[[!sidebar content=""]] + +This file is automatically exported from [/2023/organizers-notebook/index.org](/2023/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/). + +Help wanted: + +- [Find volunteers for audio processing (normalization, noise reduction) and document the process](#audio) +- [Video editing: the eval talk is a little bit out of sync](#eval-video-sync) (by 2023-11-15 Wed) + +Help wanted: + +- [Figure out a better way to handle 480p stream](#lowres) + + +# Table of Contents + +- [Timeline](#timeline) + - [Dry run](#dry-run) + - [Dry run with more volunteers](#dry-run-2) +- [About this document](#about-this-doc) +- [Communications plan](#comms) + - [Next emacsconf-org update](#emacsconf-org-2023-10-21) +- [Good/better/best](#good-better-best) +- [Phases](#phases) + - [Draft CFP](#cfp) + - [Distribute CFP](#distrib-cfp) + - [Process submissions](#submission-process) + - [Draft schedule for EmacsConf 2023](#draft-schedule) + - [Prepare for the conference](#status) + - [Get ready for production](#go-live):preflight: + - [Harvest cool stuff](#org45dfd5e) + - [Make things easier for next year](#org3dd5255) + - [Volunteers](#coordinate-volunteers) + - [Lessons learned](#org5fa50a9) +- [Progress reports](#progress) +- [E-mail templates](#templates) + - [Review](#review) + - [Acceptance](#acceptance) +- [Archive](#archive) + - [Check with hyperdrive and core if they’re willing to swap](#hyperdrive-core):decision: + - [Test the idea of three tracks and more aligned times](#three-tracks):decision: + + +<a id="timeline"></a> + +# Timeline + +<table> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-left">CFP</td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-06-26 Mon]</span></span></td> +</tr> + + +<tr> +<td class="org-left">CFP deadline</td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-09-14 Thu]</span></span></td> +</tr> + + +<tr> +<td class="org-left">Speaker notifications</td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-09-25 Mon]</span></span></td> +</tr> + + +<tr> +<td class="org-left"><b>Publish schedule</b></td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-10-25 Wed]</span></span></td> +</tr> + + +<tr> +<td class="org-left">Video submission deadline</td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat]</span></span></td> +</tr> + + +<tr> +<td class="org-left">EmacsConf</td> +<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">[2023-12-02 Sat]</span></span>, <span class="timestamp-wrapper"><span class="timestamp">[2023-12-03 Sun]</span></span></td> +</tr> +</tbody> +</table> + +Last year, these were the actual dates: + +- July 17: CFP sent +- Sept 18: Original CFP deadline +- Sept 30: CFP closed after extension +- Oct 1: acceptances sent + + +<a id="dry-run"></a> + +## TODO Dry run + + +<a id="dry-run-2"></a> + +## TODO Dry run with more volunteers + + +<a id="about-this-doc"></a> + +# About this document + +Tags: + +- `conforg`: Requires access to private conf.org repository + + +<a id="comms"></a> + +# Communications plan + +Objectives: + +- keep everyone in the loop without them feeling like they’re overloaded + +Speakers: + +- [X] Send all speakers backstage access and upload instructions +- [ ] Send all speakers check-in instructions + +Volunteers: + +- [X] Send captioning volunteers the backstage info +- [ ] Send past captioning volunteers an invitation to participate - ask when there’s a lot of load +- [ ] Ask for help with audio processing + + +<a id="emacsconf-org-2023-10-21"></a> + +## Next emacsconf-org update + +backstage + +volunteers + +help wanted: + +audio processing + +intros + + +<a id="good-better-best"></a> + +# Good/better/best + +This table makes it easier to move the slider depending on who wants +to volunteer and how much we can get done. At some point, we’ll figure +out how to track our current status so we know what we need to +scramble to do in order to get the conference off the ground. **bold** +is our current goal. Feel free to volunteer for anything that +interests you! + +<table> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-left"> </td> +<td class="org-left">Good</td> +<td class="org-left">Better</td> +<td class="org-left">Best</td> +</tr> + + +<tr> +<td class="org-left">Autopilot</td> +<td class="org-left">offset TRAMP timers</td> +<td class="org-left">Crontab</td> +<td class="org-left">Can be toggled</td> +</tr> + + +<tr> +<td class="org-left">480p</td> +<td class="org-left">Someone’s computer</td> +<td class="org-left">Separate node</td> +<td class="org-left">Ansible setup</td> +</tr> + + +<tr> +<td class="org-left">Watch instructions</td> +<td class="org-left">Embed</td> +<td class="org-left">Reminder to prefer mpv</td> +<td class="org-left"> </td> +</tr> + + +<tr> +<td class="org-left">Audio</td> +<td class="org-left">As is</td> +<td class="org-left">Normalized</td> +<td class="org-left">Noise reduction</td> +</tr> + + +<tr> +<td class="org-left">Intros</td> +<td class="org-left">Standard, recorded</td> +<td class="org-left">Reviewed by speakers in backstage</td> +<td class="org-left">More details/context</td> +</tr> +</tbody> +</table> + + +<a id="phases"></a> + +# Phases + + +<a id="cfp"></a> + +## DONE Draft CFP + + +### How to mark pages as drafts + +Put inside double square brackets: `!template id=pagedraft` + + +### Considerations + +We could see if there are parts of the CFP that we can remove or +postpone. Here are some thoughts: + +- We might not need the 10+20+40 structure in the proposal. We did + that before because people tend to propose longer talks, and we had + to do lots of e-mail coordination in order to squeeze everything + into one track. If we’re doing multiple streams, there’s less time + pressure, so we might not need to confuse people with those + requirements. I think it would still be good to nudge people towards + 20 minutes for their prerecorded presentations (separate time for + Q&A) instead of 40 minutes, because it’s good for people’s attention + spans. As an incentive to consider a 5-10 minute talk, we can say + that 5-10 minute videos can be played extra times during the + conference to fill gaps. + - Choices: + - Keep the 10+20+40 structure so that people who want to propose + longer talks are nudged to think about shorter versions + - Strongly nudge people towards 20-minute talks, with repeats as + the incentive for shorter talks and extra coordination/waiting + needed for longer talks. People propose just the talk length + they want (and can optionally propose other talk lengths if they + want to be considered for them). +- We added emergency contact info, public contact info, pronouns, and + introduction to the submission form because we ended up going back + and forth with people in previous years, and sometimes we had + incomplete info and were panicking about how to reach people during + the conference. We could drop this from the submission form and do a + separate speaker information form. + - Choices: + - Talk submission, then speaker information form: less + intimidating for speakers + - Everything in one: easier for organizers + + +### Previous years + +- Ask for public e-mail or contact information, IRC handle in CFP + - Added to submit page. +- Be even more stringent about the 10/20/40-min splits. A lot of + speakers still default to the 20- or 40-min formats without + providing us shorter formats, and that puts strain on our schedule + and requires us to use a different template for the notification + (which can be confusing). We need to stress that not respecting the + format makes it harder not only for the organizers, but also for the + speakers themselves (since they will have to rethink their + presentation). Maybe we can have an e-mail template for a quick + reply that says something like “Just in case we need to squeeze + talks into shorter times, could you please also propose an outline + for a possible 10-minute talk that could get people interested in + your topic and point them to where they can find out more?” + - sachac: I’d love to experiment with rolling acceptances. If people + have a good 10-20 minute version of their talk and we want to + accept it in the program, it would be nice to be able to say yes + early so that they can start working on it. We can work with any + duplication of content in later proposals. +- Two people is the sweet number of reviewers to have for the + proposals before sending the notifications, and there’d be + diminishing returns with more. Two is enough to release the pressure + on SCHED, verify the metadata (esp. speaker availability), and + suggest a different ordering where appropriate. It can take a long + time to comb through the proposals (roughly 10 proposals per hour), + and whilst it’d be difficult to justify more in-depth reviewers, + other orgas can do a shallow-pass to catch red-flags or discuss the + submissions as they come in. Other organizers can always chime in on + topics they particularly care about so that their encouraging + comments or suggestions can be included in the acceptance e-mail. + - sachac: Who wants to help me with this? +- We extended CFP-end by two weeks this year, but that made it coincide + with speaker-notifs, and that’s awkward. Next time, we should only + extend the CFP by one week to avoid having to scramble with the + schedule until the very last day. + - Proposed dates in <https://emacsconf.org/2023/cfp/> have similar + spacing, so yeah, we’ll want to extend by only one week. +- Some people assume that they have to suggest longer formats even if + they intend their talks to be 10′ or 20′. We should change the + wording on the CFP to ask them to only provide alternatives for + shorter formats, not longer. + - Added a brief note to CFP. +- It was hard to squeeze all the org/hyperbole talk on day-1. + Generally, the people who submit these kinds of talk come from all + over the world, and US mornings are more accommodating than US + evenings when it comes to timezones. We might consider having two org + **mornings** rather than an org **day**; it would give us more flexibility + with those talks. + - Let’s see if we can do two streams again. That was fun. +- We’re starting to reach critical mass on the org-talks. We might want + to consider splitting the org-talks and the dev-talks into two + distinct events to allow them to grow independently. + - Let’s see if we can do two streams again. That was fun. +- We should associate time-of-day with CFP-deadline; otherwise, the + scheduler has to be on edge until the very end of the day. It’s worse + this year because we made CFP-end coincide with speaker-notif, so this + might not be as much of a problem next year. + - If we do rolling acceptances and we extend by at most one week + instead of two, this should be fine. +- It’s easier for us to extend beyond 5pm than to go before 9am + (especially for the West coast). Extending beyond 5pm puts strain on + European organizers and volunteers, though. + - Time pressure should be alleviated with multiple streams. +- Sometimes, ikiwiki on front0 took a lot of time to process the new + commits. sachac assumed this is due to a faulty regex parsing. We + should be able to find out more by looking at the logs from ikiwiki + after a slow commit. + - Seems speedy at the moment. +- Ask for preferred timezone in CFP + - Added to availability. +- Check with John Wiegley re: schedule - we always happen to coincide + with his work trips + - I checked with him and the people at his work don’t have a schedule + yet, so we should go ahead and plan + + +### Lessons learned for next year + +- Maybe incentivize proper timezone specification by saying we can translate times to their local time? +- Make sure to include cfp.org as an attachment instead of inline + + +### Other thoughts + +- sachac: bandali likes having the commitment to freedom section in the CFP as a form of activism +- sachac: I thought about pulling the deadline back to Sept 1, but it might be + good to keep it at Sept 14 so that anyone who tends to work with the + schoolyear can still have a little time to work on it. + + +<a id="distrib-cfp"></a> + +## DONE Distribute CFP + + +### DONE Add proposal review volunteers to emacsconf-submit + +- <https://lists.gnu.org/mailman/admin/emacsconf-submit/members/add> +- Ask volunteers to e-mail an SSH public key so they can be added via the gitolite-admin repo to the conf.org repo for the year + + +### First announcement + +- Remove draft tags :sachac: +- Post on emacsconf-discuss, emacs-tangents :bandali: :zaeph: +- Sticky on reddit.com/r/emacs +- Post in Emacs News :sachac: + + +### Reminder + + +<a id="submission-process"></a> + +## DONE Process submissions + +- Proposal received: sachac adds it to this document with status of PROPOSED + - Fields: + + EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, MIN_TIME, MAX_TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED +- jc doublechecks that the data has been correctly captured (especially EMAIL and AVAILABILITY) +- People review it (sachac, jc, etc.) and weigh in +- Proposal accepted: sachac e-mails the speaker and sets status to WAITING\_FOR\_EMAIL\_CONFIRM +- E-mail confirmation received: log it in the logbook +- Schedule set: sachac e-mails the speaker and sets status to WAITING\_FOR\_SCHED\_CONFIRM + + +### 2023-08-14 EmacsConf 2023 CFP progress report (8 talks accepted so far, 1 to review, 6 todo) + +The end of the EmacsConf 2023 call for participation is one month away +(Sept 14; <https://emacsconf.org/2023/cfp/>). Whee! So far, we’ve sent +early acceptances to the following talks and added them to the program +on the wiki (<https://emacsconf.org/2023/talks>): + +<table> + + +<colgroup> +<col class="org-right"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-right">Duration</td> +<td class="org-left">Title</td> +<td class="org-left">Speaker</td> +</tr> + + +<tr> +<td class="org-right">10</td> +<td class="org-left">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</td> +<td class="org-left">Chung-hong Chan</td> +</tr> + + +<tr> +<td class="org-right">20</td> +<td class="org-left">Authoring and presenting university courses with Emacs and a full libre software stack</td> +<td class="org-left">James Howell</td> +</tr> + + +<tr> +<td class="org-right">20</td> +<td class="org-left">Org-Mode workflow: informal reference tracking</td> +<td class="org-left">Christopher Howard</td> +</tr> + + +<tr> +<td class="org-right">20</td> +<td class="org-left">GNU Emacs for electronics, note-taking, and as lightweight IDE</td> +<td class="org-left">Anand Tamariya</td> +</tr> + + +<tr> +<td class="org-right">10</td> +<td class="org-left">A modern Emacs look-and-feel without pain</td> +<td class="org-left">Pedro A. Aranda</td> +</tr> + + +<tr> +<td class="org-right">10</td> +<td class="org-left">Writing a language server in OCaml for Emacs, fun, and profit</td> +<td class="org-left">Austin Theriault</td> +</tr> + + +<tr> +<td class="org-right">20</td> +<td class="org-left">LLM clients in Emacs, functionality and standardization</td> +<td class="org-left">Andrew Hyatt</td> +</tr> + + +<tr> +<td class="org-right">10</td> +<td class="org-left">The many ways to browse Hacker News from Emacs</td> +<td class="org-left">Mickael Kerjean</td> +</tr> +</tbody> +</table> + +We sent the speakers <https://emacsconf.org/2023/prepare/> in case +anyone wants to get started on their presentations. + +There’s one talk that’s waiting for feedback on the emacsconf-submit +before we send the early acceptance in about a week: + +<table> + + +<colgroup> +<col class="org-right"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-right">Duration</td> +<td class="org-left">Title</td> +<td class="org-left">Speaker</td> +</tr> + + +<tr> +<td class="org-right">20</td> +<td class="org-left">one.el: the static site generator for Emacs Lisp Programmers</td> +<td class="org-left">Tony Aldon</td> +</tr> +</tbody> +</table> + +There are several talk proposals that are in progress (need to +coordinate, don’t have speaker releases / full details / etc.): + +<table> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-left">Title</td> +<td class="org-left">Speaker</td> +</tr> + + +<tr> +<td class="org-left">Emacs MultiMedia System (EMMS)</td> +<td class="org-left">Yoni Rabkin</td> +</tr> + + +<tr> +<td class="org-left">Emacs development updates</td> +<td class="org-left">John Wiegley</td> +</tr> + + +<tr> +<td class="org-left">Watch Over Our Folders</td> +<td class="org-left">Bastien Guerry</td> +</tr> + + +<tr> +<td class="org-left">Emacs community information sharing?</td> +<td class="org-left">Jake B</td> +</tr> + + +<tr> +<td class="org-left">Emacs saves the Web</td> +<td class="org-left">Yuchen Pei</td> +</tr> + + +<tr> +<td class="org-left">How to build an Emacs 2: Revenge of the Lem</td> +<td class="org-left">Fermin</td> +</tr> +</tbody> +</table> + +This time last year, we had 2 proposals, with most of the proposals +coming in at the end of the CFP. This was usually when we started +panicking about not having lots of proposals, but I think we can skip +stressing about it this year. <laugh> Even with the program as it is +now, we’d already have a pretty fun EmacsConf. Can’t wait to see what +it’ll look like when more people get their proposals in! + +bandali, maybe we can do a 1-month and/or 2-week reminder about the +CFP deadline? I’d like to see if we can get away without officially +extending the CFP this time. + +Sacha + + +### Lessons learned from the CFP acceptance phase :lessons: + +- Early acceptances are nice. A few got comments within the 1-week + period, which helped refine the talk idea more. We probably don’t + need to make this a 2-week review period. +- It’s a good idea to send the review and acceptance e-mails even to + fellow organizers/volunteers, even if they’re quite familiar with + the page already. =) +- We successfully didn’t panic about submissions, yay! It was nice to + be able to draft schedules as we went along, and to compare the + dates with last year’s trends. +- I added some more automation for including a template in a mail + reply. Changing the subject to `EmacsConf 2023 acceptance: talk + title` made it easier to verify that talks had been responded to. +- I added `emacsconf-mail-add-submission` for parsing submissions from + e-mail and adding them to `emacsconf-org-file`. That was nice + because it automatically saved `EMAIL`, `DATE_SUBMITTED`, and + `DATE_TO_NOTIFY`. +- Displaying the schedule as a list with time constraints made it + easier to verify the time constraints and to see how I can fix + errors. +- Drafting the schedule in the public organizers notebook was nice + because I could share that with the speakers and other volunteers. + + +### DONE E-mail the speakers the upload and backstage instructions + + +### Handling a late submission + +doc + +- [ ] Add talk entry to conf.org +- [ ] Add talk to schedule in organizers notebook +- [ ] Add talk to the wiki +- [ ] Send speaker backstage information, upload information, and schedule +- [ ] Create BBB room +- [ ] Record intro + + +<a id="draft-schedule"></a> + +## Draft schedule for EmacsConf 2023 + +These times are in EST (GMT-5). + +<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> + +- Legend: dashed line means non-BBB Q&A; light gray means penciled-in talk; yellow means video already submitted and being processed + + +### Draft schedule as a list + +- 2023-12-02 Sat 09:00-09:10 [sat-open](https://emacsconf.org/2023/talks/sat-open "Saturday opening remarks"): Saturday opening remarks +- 2023-12-02 Sat 09:10-09:20 - <= 10:00 - [adventure](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp"): An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp (Chung-hong Chan) +- 2023-12-02 Sat 09:30-09:50 [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack"): Authoring and presenting university courses with Emacs and a full libre software stack (James Howell) +- 2023-12-02 Sat 10:00-10:10 - <= 10:30 - [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"): MatplotLLM, iterative natural language data visualization in org-babel (Abhinav Tushar) +- 2023-12-02 Sat 10:05-10:25 - on 2023-12-02 - [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"): Teaching computer and data science with literate programming tools (Marcus Birkenkrahe) +- 2023-12-02 Sat 10:20-10:40 [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"): Enhancing productivity with voice computing (Blaine Mooers) +- 2023-12-02 Sat 10:40-10:50 - <= 11:00 - [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table"): Who needs Excel? Managing your students qualifications with org-table (Daniel Molina) +- 2023-12-02 Sat 10:55-11:15 - >= 10:00 - [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization"): LLM clients in Emacs, functionality and standardization (Andrew Hyatt) +- 2023-12-02 Sat 11:05-11:15 - <= 15:00 - [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode"): Taming things with Org Mode (Gergely Nagy (algernon)) +- 2023-12-02 Sat 11:30-11:50 - <= 13:00 - [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers"): one.el: the static site generator for Emacs Lisp Programmers (Tony Aldon) +- 2023-12-02 Sat 13:00-13:10 [writing](https://emacsconf.org/2023/talks/writing "Emacs turbo-charges my writing"): Emacs turbo-charges my writing (Jeremy Friesen) +- 2023-12-02 Sat 13:00-13:20 - >= 11:00 - [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays"): Improving compiler diagnostics with overlays (Jeff Trull) +- 2023-12-02 Sat 13:25-13:35 [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today"): Why Nabokov would use Org-Mode if he were writing today (Edmund Jorgensen) +- 2023-12-02 Sat 13:35-13:45 [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages"): Editor Integrated REPL Driven Development for all languages (Musa Al-hassy) +- 2023-12-02 Sat 13:50-14:10 - no live Q&A - [collab](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel"): Collaborative data processing and documenting using org-babel (Jonathan Hartman, Lukas C. Bossert) +- 2023-12-02 Sat 14:00-15:00 [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"): REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ (Eduardo Ochs) +- 2023-12-02 Sat 14:20-14:40 - >= 12:00 - [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs"): How I play TTRPGs in Emacs (Howard Abrams) +- 2023-12-02 Sat 14:55-15:15 - >= 13:00 - [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking"): Org-Mode workflow: informal reference tracking (Christopher Howard) +- 2023-12-02 Sat 15:10-15:50 [doc](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode"): Literate Documentation with Emacs and Org Mode (Mike Hamrick) +- 2023-12-02 Sat 15:25-15:35 - between 15:00-16:00 - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"): (Un)entangling projects and repos (Alexey Bochkarev) +- 2023-12-02 Sat 15:45-15:55 - >= 12:00 - [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates"): Emacs development updates (John Wiegley) +- 2023-12-02 Sat 16:05-16:45 [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom"): Windows into Freedom (Corwin Brust) +- 2023-12-02 Sat 16:10-16:50 [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"): Emacs core development: how it works (Stefan Kangas) +- 2023-12-02 Sat 17:05-17:15 [sat-close](https://emacsconf.org/2023/talks/sat-close "Saturday closing remarks"): Saturday closing remarks +- 2023-12-03 Sun 08:59-09:04 [sun-open](https://emacsconf.org/2023/talks/sun-open "Sunday opening remarks"): Sunday opening remarks +- 2023-12-03 Sun 09:05-09:25 - <= 12:00 - [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs"): Top 10 ways Hyperbole amps up Emacs (Robert Weiner) +- 2023-12-03 Sun 09:40-10:00 [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"): Using Koutline for stream of thought journaling (Matthew Jorgensen (PlasmaStrike)) +- 2023-12-03 Sun 10:00-10:20 - <= 12:00 - [scheme](https://emacsconf.org/2023/talks/scheme "Bringing joy to Scheme programming"): Bringing joy to Scheme programming (Andrew Tropin) +- 2023-12-03 Sun 10:10-10:25 - <= 11:00 - [parallel](https://emacsconf.org/2023/talks/parallel "Parallel text replacement"): Parallel text replacement (Lovro, Valentino Picotti) +- 2023-12-03 Sun 10:35-10:45 - <= 13:00 - [eat](https://emacsconf.org/2023/talks/eat "Eat and Eat powered Eshell, fast featureful terminal inside Emacs"): Eat and Eat powered Eshell, fast featureful terminal inside Emacs (Akib Azmain Turja) +- 2023-12-03 Sun 10:35-10:55 - <= 11:30 - [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities"): GNU Emacs: A World of Possibilities (Anand Tamariya) +- 2023-12-03 Sun 11:00-11:20 - <= 13:00 - [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer"): The browser in a buffer (Michael Bauer) +- 2023-12-03 Sun 11:10-11:20 - between 11:00-13:00 - [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"): A modern Emacs look-and-feel without pain (Pedro A. Aranda) +- 2023-12-03 Sun 11:35-11:55 - <= 17:00 - [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs"): Speedcubing in Emacs (wasamasa) +- 2023-12-03 Sun 11:35-11:55 - <= 13:00 - [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp"): The Emacsen family, the design of an Emacs and the importance of Lisp (Fermin) +- 2023-12-03 Sun 13:00-13:35 - <= 14:00 - [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?"): emacs-gc-stats: Does garbage collection actually slow down Emacs? (Ihor Radchenko) +- 2023-12-03 Sun 13:00-13:40 [emms](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)"): Emacs MultiMedia System (EMMS) (Yoni Rabkin) +- 2023-12-03 Sun 13:50-14:30 - >= 11:00 - [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"): hyperdrive.el: Peer-to-peer filesystem in Emacs (Joseph Turner and Protesilaos Stavrou) +- 2023-12-03 Sun 13:55-14:25 [steno](https://emacsconf.org/2023/talks/steno "Programming with steno"): Programming with steno (Daniel Alejandro Tapia) +- 2023-12-03 Sun 14:35-14:45 [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"): Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs) (Jeremy Friesen) +- 2023-12-03 Sun 14:45-15:00 [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit"): Writing a language server in OCaml for Emacs, fun, and profit (Austin Theriault) +- 2023-12-03 Sun 15:10-15:40 - >= 15:00 - [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)"): Emacs saves the Web (maybe) (Yuchen Pei) +- 2023-12-03 Sun 15:15-15:45 - >= 12:00 - [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole"): What I learned by writing test cases for GNU Hyperbole (Mats Lidell) +- 2023-12-03 Sun 15:55-16:15 [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"): Sharing Emacs is Caring Emacs: Emacs education and why I embraced video (Jacob Boxerman) +- 2023-12-03 Sun 16:00-16:20 [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"): EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference (Sacha Chua) +- 2023-12-03 Sun 16:30-16:40 [sun-close](https://emacsconf.org/2023/talks/sun-close "Sunday closing remarks"): Sunday closing remarks + + +### Schedule announcements + +- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-02 Sat] </span></span> [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ") needs 60 minutes instead of 40, adjusting doc and windows +- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?") needs 35 minutes, adjusting later talks ([hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"), [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit"), [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole"), [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference")) +- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom") now on Sat afternoon devel track and [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference") now on Sunday afternoon devel track +- <span class="timestamp-wrapper"><span class="timestamp">[2023-12-01 Fri] </span></span> Cancelled [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode") +- <span class="timestamp-wrapper"><span class="timestamp">[2023-11-29 Wed] </span></span> Changed title for [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"), changed [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") Q&A to after the conference + + +### Schedule notes + +- **Schedule changes after the schedule FYI email from 2023-10-05**: + - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-29 Wed] </span></span> Allocated 15 minutes to [lspocaml](https://emacsconf.org/2023/talks/lspocaml "Writing a language server in OCaml for Emacs, fun, and profit") + - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-23 Thu] </span></span> Allocated 30 minutes to [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") + - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-14 Tue] </span></span> Update [steno](https://emacsconf.org/2023/talks/steno "Programming with steno") title; add Prot to [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") + - <span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat] </span></span> Moved [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp") earlier to accommodate live session, moved [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") later to accommodate travel + - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-31 Tue] </span></span> Cancelled hn, added [doc](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode") before [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference") + - Moved [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") talk to general track; removed afternoon break. Changed [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs"), [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"), [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking"), [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates"), [sat-close](https://emacsconf.org/2023/talks/sat-close "Saturday closing remarks"), [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays"), [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages"), [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"), [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"), and [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities"), but none of the talks moved by 2 hours or more, so no extra e-mails needed for now. + - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-08 Sun] </span></span> Added [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"). Moved [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") to Sun afternoon. + - <span class="timestamp-wrapper"><span class="timestamp">[2023-10-09 Mon] </span></span> Renamed `extending` to [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities") and moved it to the morning to accommodate IST. +- Saturday on the General track: Org day + misc + - [adventure](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp") is the first talk because of availability constraints; would be nice to connect it to [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs") + - [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack") for teaching, [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools") is also related, and [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") for grading + - [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode") and [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers") both deal with exports in some way. [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") would be nice to add here, but that one needs to be in the afternoon because of availability constraints. + - [writing](https://emacsconf.org/2023/talks/writing "Emacs turbo-charges my writing") is connected to [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today") (blog posts, novel). It’s also a little connected to [one](https://emacsconf.org/2023/talks/one "one.el: the static site generator for Emacs Lisp Programmers") (exporting a blog). + - [collab](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel") and [solo](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs") are amusing to pair together. + - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") and [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") are also Org-related. [ref](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") would be nice to place together with [nabokov](https://emacsconf.org/2023/talks/nabokov "Why Nabokov would use Org-Mode if he were writing today"), but that would move [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") too late. + - [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") is not Org-related, but probably good to share with everyone. +- Saturday morning Development track: large language models, AI. Has to be morning because of [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"). [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization") is about general interfaces, so we can put that last. Could have a general LLM discussion after the talks. Can’t swap it with Sunday morning because [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") should stick with [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") (Hyperbole talks), and the Hyperbole talks won’t fit into Saturday morning +- Saturday afternoon, developer track: REPLs, misc talks + - start off with developer tweaks: [overlay](https://emacsconf.org/2023/talks/overlay "Improving compiler diagnostics with overlays") (compilation), and then [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages") and [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ") are paired together + - [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs"): adding another file protocol, using HTTP APIs + - [world](https://emacsconf.org/2023/talks/world "GNU Emacs: A World of Possibilities") might be replays of demos + Q&A session if people are interested +- Sunday morning gen: Hyperbole (gen track, then crossing over to dev for testing) + misc talks + - Hyperbole mini-track is in the morning because of [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole")’s availability constraints; [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") go before it. Try to avoid conflicts so they can attend each other’s talks + - Sunday morning after [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") could be a fun extended “let’s write tests together” session if someone wants to lead it + - [parallel](https://emacsconf.org/2023/talks/parallel "Parallel text replacement") needs to go in the morning. Might be okay to include in the general talk. + - [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") and [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs") aren’t related to Hyperbole, but we need to fit them into the schedule somewhere. It would be nice to connect [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") (talking to web browsers from Emacs) to [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") (doing web stuff in Emacs instead), but [poltys](https://emacsconf.org/2023/talks/poltys "The browser in a buffer") needs to be in the morning (which is pretty full) and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") is in the afternoon because Yuchen is in Australia/Sydney. + - [cubing](https://emacsconf.org/2023/talks/cubing "Speedcubing in Emacs") can be something fun to transition to lunch, then. +- Sunday afternoon gen: misc talks, community + - [eat](https://emacsconf.org/2023/talks/eat "Eat and Eat powered Eshell, fast featureful terminal inside Emacs") is about shells and running commands, so it’s generally useful + - [emms](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)") is a user+dev talk + - community theme ([mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"), [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs"), [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video")), with an aside for [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") (using Emacs as a client for stuff). [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video") is possible closing keynote - encourage people to go out and explore/share all year? If not, [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") could be good for a closing talk - encouraging people to use Emacs for more stuff. +- Sunday dev: misc dev talks + - Morning: + - [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") is related to the Hyperbole talks [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"), so we don’t want to overlap with the Q&A for those talks + - [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"), [scheme](https://emacsconf.org/2023/talks/scheme "Bringing joy to Scheme programming"), [gc](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?"), [flat](https://emacsconf.org/2023/talks/flat "A modern Emacs look-and-feel without pain"), [windows](https://emacsconf.org/2023/talks/windows "Windows into Freedom"), [emacsconf](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"), [steno](https://emacsconf.org/2023/talks/steno "Programming with steno") + - [emacsen](https://emacsconf.org/2023/talks/emacsen "The Emacsen family, the design of an Emacs and the importance of Lisp") is more high-level and can talk about other editors +- checking with [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") and [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") if ~3pm Sunday afternoon (~7am Mon local time) is okay with them. It would be nice to pair it with [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs"), which is nice to connect to [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)") and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)"). +- Thinking about the flow: + - General: Org day, then misc talks Sunday morning and part of Sunday afternoon. Ending with a focus on community and expanding Emacs. It would be nice to get people excited about connecting and sharing throughout the year. + - Dev: people who are really curious about AI can connect on + Saturday morning and keep the conversation going. Some programming + tweaks are grouped together. The rest are mostly based on + availability. +- if the talks get cancelled, we can have an open meetup possibly with + breakout rooms +- coordination notes: + - TODO [uni](https://emacsconf.org/2023/talks/uni "Authoring and presenting university courses with Emacs and a full libre software stack"), [teaching](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"), [table](https://emacsconf.org/2023/talks/table "Who needs Excel? Managing your students qualifications with org-table") are all about Emacs, Org Mode, and teaching + - TODO [repl](https://emacsconf.org/2023/talks/repl "REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"), [eval](https://emacsconf.org/2023/talks/eval "Editor Integrated REPL Driven Development for all languages") + - [hyperamp](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs"), [koutline](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling"), and [test](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") are all in touch because they work on Hyperbole together + - [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") and [web](https://emacsconf.org/2023/talks/web "Emacs saves the Web (maybe)") + - [unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos"), [taming](https://emacsconf.org/2023/talks/taming "Taming things with Org Mode")? + - [matplotllm](https://emacsconf.org/2023/talks/matplotllm "MatplotLLM, iterative natural language data visualization in org-babel"), [voice](https://emacsconf.org/2023/talks/voice "Enhancing productivity with voice computing"), [llm](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization") (so they don’t all have to define LLMs?) +- The schedule doesn’t have neat aligned slots on purpose so that + organizers can jump between streams if needed, and also because we + have so many awesome talks. Somehow people managed to handle the + schedule last year. =) +- Next steps: + - Schedule: We’ll e-mail the draft schedule to speakers so that they + can get a sense of where they are in the schedule, see if they + really want to make it to a conflicting session’s Q&A live + (they’ll have early access to the videos), etc. + - Infrastructure: + - Dust off and document infrastructure, processes + - Sort out access to media.emacsconf.org so that we can get the upload service up and running + - Draft brief intros for talks, keeping in mind that we’re going to say them out loud + - Speakers will work on videos, and we can help with nudges/coordination if needed + + +### DONE E-mail all the speakers a link to the draft schedule + +so that they can confirm that I’ve got their availability correctly coded and ask for any adjustments in case they really want to attend someone else’s Q&A session + + +### DONE Announce schedule publicly + + +### DONE Incorporate “About the speaker” info on the wiki pages :conforg: + +Good idea to include it because that gives people (a) more context on +where a speaker is coming from, and (b) a feeling for the kinds of +backgrounds and interests people have. + + +### TODO Follow up with people we haven’t heard from in a while + +When do we want to do this? + +We don’t have to worry too much, because we can offer them the option of doing it live, +and we can have space in the schedule if they cancel last-minute. + + +<a id="status"></a> + +## Prepare for the conference + +<table> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">ITEM</th> +<th scope="col" class="org-left">TODO</th> +<th scope="col" class="org-left">STATUS</th> +</tr> +</thead> + +<tbody> +<tr> +<td class="org-left">Upload</td> +<td class="org-left">DONE</td> +<td class="org-left">Ready to go</td> +</tr> + + +<tr> +<td class="org-left">Prerec</td> +<td class="org-left">DONE</td> +<td class="org-left">Ready to go</td> +</tr> + + +<tr> +<td class="org-left">Captions</td> +<td class="org-left">INPROGRESS</td> +<td class="org-left">Ready to go; waiting for videos and captions</td> +</tr> + + +<tr> +<td class="org-left">Backstage</td> +<td class="org-left">DONE</td> +<td class="org-left">Ready to go</td> +</tr> + + +<tr> +<td class="org-left">Test assets</td> +<td class="org-left">DONE</td> +<td class="org-left">test videos generated</td> +</tr> + + +<tr> +<td class="org-left">BBB</td> +<td class="org-left"> </td> +<td class="org-left">redirects created, confirmed; next: e-mail speakers testing/checkin instructions</td> +</tr> + + +<tr> +<td class="org-left">VNC</td> +<td class="org-left">DONE</td> +<td class="org-left">confirmed access to emacsconf-gen and emacsconf-dev</td> +</tr> + + +<tr> +<td class="org-left">OBS</td> +<td class="org-left">DONE</td> +<td class="org-left">confirmed that gen and dev can stream</td> +</tr> + + +<tr> +<td class="org-left">Icecast</td> +<td class="org-left">DONE</td> +<td class="org-left">gen and dev confirmed with MPV</td> +</tr> + + +<tr> +<td class="org-left">MPV</td> +<td class="org-left">DONE</td> +<td class="org-left">confirmed that mpv can watch both streams</td> +</tr> + + +<tr> +<td class="org-left">Watch page</td> +<td class="org-left">DONE</td> +<td class="org-left">updated for 2023</td> +</tr> + + +<tr> +<td class="org-left">Status page</td> +<td class="org-left">DONE</td> +<td class="org-left">ready to go</td> +</tr> + + +<tr> +<td class="org-left">Public media</td> +<td class="org-left">DONE</td> +<td class="org-left">confirmed, set to protected so that we can test publishing live</td> +</tr> + + +<tr> +<td class="org-left">Mumble</td> +<td class="org-left">DONE</td> +<td class="org-left">confirmed gen and dev can connect, receive audio</td> +</tr> + + +<tr> +<td class="org-left">Etherpad</td> +<td class="org-left">DONE</td> +<td class="org-left">Ready to go, pads created</td> +</tr> + + +<tr> +<td class="org-left">Pad proxy</td> +<td class="org-left">DONE</td> +<td class="org-left">Ready to go, pad.emacsconf.org works</td> +</tr> + + +<tr> +<td class="org-left">Overlays</td> +<td class="org-left">DONE</td> +<td class="org-left">generated and uploaded</td> +</tr> + + +<tr> +<td class="org-left">Intros</td> +<td class="org-left">INPROGRESS</td> +<td class="org-left">all intros recorded, should send them to speakers for review</td> +</tr> + + +<tr> +<td class="org-left">IRC channels</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">IRC talk info</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">Announcements</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">Publishing updates live</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">Autopilot</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">YouTube</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">Peertube</td> +<td class="org-left"> </td> +<td class="org-left">Not yet started</td> +</tr> + + +<tr> +<td class="org-left">480p</td> +<td class="org-left"> </td> +<td class="org-left">Delegated to corwin</td> +</tr> + + +<tr> +<td class="org-left">Audio processing</td> +<td class="org-left"> </td> +<td class="org-left">Help wanted</td> +</tr> +</tbody> +</table> + + +### Status + +<svg width="800" height="300" version="1.1" xmlns="<http://www.w3.org/2000/svg>" xmlns:xlink="<http://www.w3.org/1999/xlink>"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="<https://emacsconf.org/2023/talks/sat-open>" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="<https://emacsconf.org/2023/talks/adventure>" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="<https://emacsconf.org/2023/talks/uni>" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="<https://emacsconf.org/2023/talks/teaching>" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="<https://emacsconf.org/2023/talks/table>" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="<https://emacsconf.org/2023/talks/one>" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="<https://emacsconf.org/2023/talks/writing>" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="<https://emacsconf.org/2023/talks/nabokov>" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="<https://emacsconf.org/2023/talks/collab>" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="<https://emacsconf.org/2023/talks/solo>" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="<https://emacsconf.org/2023/talks/ref>" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="<https://emacsconf.org/2023/talks/unentangling>" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="<https://emacsconf.org/2023/talks/devel>" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="<https://emacsconf.org/2023/talks/core>" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="<https://emacsconf.org/2023/talks/sat-close>" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="<https://emacsconf.org/2023/talks/matplotllm>" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="<https://emacsconf.org/2023/talks/voice>" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="<https://emacsconf.org/2023/talks/llm>" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="<https://emacsconf.org/2023/talks/overlay>" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="<https://emacsconf.org/2023/talks/eval>" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="<https://emacsconf.org/2023/talks/repl>" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="<https://emacsconf.org/2023/talks/doc>" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="<https://emacsconf.org/2023/talks/windows>" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="<https://emacsconf.org/2023/talks/sun-open>" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="<https://emacsconf.org/2023/talks/hyperamp>" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="<https://emacsconf.org/2023/talks/koutline>" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="<https://emacsconf.org/2023/talks/parallel>" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="<https://emacsconf.org/2023/talks/eat>" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="<https://emacsconf.org/2023/talks/poltys>" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="<https://emacsconf.org/2023/talks/cubing>" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="<https://emacsconf.org/2023/talks/emms>" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="<https://emacsconf.org/2023/talks/steno>" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="<https://emacsconf.org/2023/talks/mentor>" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="<https://emacsconf.org/2023/talks/web>" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="<https://emacsconf.org/2023/talks/sharing>" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="<https://emacsconf.org/2023/talks/sun-close>" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="<https://emacsconf.org/2023/talks/scheme>" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="<https://emacsconf.org/2023/talks/world>" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="<https://emacsconf.org/2023/talks/flat>" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="<https://emacsconf.org/2023/talks/emacsen>" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="<https://emacsconf.org/2023/talks/gc>" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="<https://emacsconf.org/2023/talks/hyperdrive>" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="<https://emacsconf.org/2023/talks/lspocaml>" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="<https://emacsconf.org/2023/talks/test>" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="<https://emacsconf.org/2023/talks/emacsconf>" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> + + +### DONE Upload + + +#### DONE Get access to media.emacsconf.org so that we can set up the upload service and the backstage area + + +##### DONE Decide what to do for backstage area and upload service :decision: + +- <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri]</span></span>: Got access to media.emacsconf.org, set up the backstage area + +- res.emacsconf.org + - up right away, so people can get started on captions + - more memory than media.emacsconf.org - is the upload service thrashing? +- media.emacsconf.org + - does not interfere with res streaming during the conference itself + - don’t need to send people multiple e-mails, risk confusion/out-of-date info + - access to media.emacsconf.org might be sorted out by <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri]</span></span> + - not in a big rush yet + + +### DONE Prerec + + +##### Set up for the new year + +As orga@res: + +- mkdir /data/emacsconf/$year +- rm ~/current +- ln -s /data/emacsconf/$year current +- ln -s /data/emacsconf/$year $year + +When we receive files + +- change the TODO status to PROCESSING +- mkdir ~/current/$slug +- copy the files to there +- rename-original $slug $file +- process-prerec $video +- Copy the files to the res:~/cache, laptop:~/proj/emacsconf/2023/cache, and media:~/backstage +- emacsconf-cache-all-video-data +- emacsconf-publish-info-pages +- emacsconf-publish-backstage-index + +(check that the reencode.sh process has kicked off; if not, call reencode.sh $video $prefix–reencoded.webm) + + +### INPROGRESS Captions + +- OpenAI Whisper SaaS (<https://platform.openai.com/docs/guides/speech-to-text/longer-inputs>) limits audio files to 25MB, so it’s probably easier to do it ourselves + + +#### TODO E-mail previous captioning volunteers to see if they’re interested in helping out + + +#### DONE E-mail captioning volunteers the backstage instructions + + +#### DONE E-mail current caption volunteers backstage information, captioning process, etc. + +I’ll wait a few days for Yoni to get back to us about whether he wants +to caption his own talk and/or seeing if other speakers will get their +talks in. + +`emacsconf-mail-backstage-info` + +Hi ${name}! + +You’re getting this e-mail because you have volunteered to help out +with captions for ${conf-name} ${year}. (Thank you so much!) + +I’m so excited! =) We’re starting to get recorded talks, which means +it’s time to get captions going. People really appreciate the +captions, especially when the captions have been lovingly edited by +volunteers who change things like “Emax” to “Emacs” and “metaX” to +“M-x”. + +Just like last year, we’re using OpenAI Whisper to give us a +reasonable starting point for transcripts. If working from scratch +works better for you, you’re welcome to do that too. + +We’ve set up ${backstage} as the backstage area where you can view the +videos and resources uploaded so far. You can access it with the +username "${backstage-user}“ and the password ”${backstage-password}“. +Please keep the backstage password and other speakers’ talk resources +secret. ${backstage-use} + +To call dibs on a video to caption, just send a message to me at +sacha@sachachua.com and I can update the page so that it’s assigned to +you. You can e-mail me the edited captions when you’re done. Don’t +worry too much about timestamps; we can re-align the text with the +audio afterwards. If life gets suddenly busy and you can’t see it all +the way through, no worries. Just e-mail me what you’ve got and I’ll +put it back in the pool. Every little bit helps! + +Thank you! + +Sacha Chua + + +#### TODO E-mail the emacsconf-org mailing list the announcement and the invitation to volunteer + + +#### TODO Try out Deepgram, play around with it for last-minute submissions? + + +#### DONE Get the autocaptions for emms up in the backstage area + + +#### Captions lessons learned :lessons: + +- OpenAI had a breaking API change, need to call `whisper.utils.get_writer` + - <https://github.com/dmarx/video-killed-the-radio-star/issues/101> + + vtt_writer = whisper.utils.get_writer('vtt', os.path.dirname(new_file)) + txt_writer = whisper.utils.get_writer('txt', os.path.dirname(new_file)) + vtt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None}) + txt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None}) + + +#### Reencoding + + +### DONE Backstage + + +<a id="test"></a> + +### DONE Test assets + +<file://ssh:res:/data/emacsconf/2023/assets/test> + + +#### DONE Generate test videos + + +#### Try autopilot + + (let* ((offset-seconds 60) + (start-time (time-add (current-time) offset-seconds)) + (emacsconf-schedule-validation-functions nil) + (emacsconf-schedule-default-buffer-minutes 1) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 1) + (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (schedule (emacsconf-schedule-prepare + (emacsconf-schedule-inflate-sexp + `(("GEN" + :start ,(format-time-string "%Y-%m-%d %H:%M" start-time) + :set-track "General") + (sat-open :time 1) + (adventure :time 1) ; pad Q&A + (uni :time 1) ; live Q&A + (teaching :time 1) + (table :time 1) + (taming :time 1) + (one :time 1) + (cubing :time 1) ; IRC + ("DEV" + :start + ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60)) + :set-track "Development") + (matplotllm :time 1) + (gc :time 1) ; pad + (repl :time 1) ; IRC + (voice :time 1) + (llm :time 1) + (overlay :time 1) + (eval :time 1) + (emacsconf :time 1)))))) + (emacsconf-stream-crontabs t schedule)) + + (let* ((offset-seconds 240) + (start-time (time-add (current-time) offset-seconds)) + (emacsconf-schedule-validation-functions nil) + (emacsconf-schedule-default-buffer-minutes 5) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5) + (emacsconf-schedule-strategies + '(emacsconf-schedule-ignore-fixed + emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (schedule (emacsconf-schedule-prepare + (emacsconf-schedule-inflate-sexp + `(("GEN" + :start ,(format-time-string "%Y-%m-%d %H:%M" start-time) + :set-track "General") + (sat-open) + (sun-open) + ("DEV" + :start + ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60)) + :set-track "Development") + (emacsconf)))))) + (emacsconf-stream-crontabs nil schedule)) + + +### BBB + +Generate them for possibly live presentations as well? We’ll see. + + +#### DONE Generate redirects + +We use redirects for Q&A sessions with BBB web conferences so that people can easily join the web conference. + +- <emacsconf-publish-bbb-static-redirects>: generate static redirects +- <emacsconf-publish-bbb-redirect-all> + + +#### DONE Generate BBB rooms + +BBB name convention from last year + +ec22-sat-am-dev Abin Simon (treesitter) + +That means things change if I move to a different time or track. +Other option: + +ec23 Speaker Name (talk-ids) + +Deleting old rooms: + + (spookfox-js-injection-eval-in-active-tab "[...document.querySelectorAll('.delete-room')].filter((o) => o.getAttribute('data-name').match(/ec22/))[0].click(); document.querySelector('#delete-confirm').click();" t) + +Creating new rooms + + (defun emacsconf-spookfox-create-bbb (group) + "Create a BBB room for this group of talks. + GROUP is (email . (talk talk talk)). + Needs a Spookfox connection." + (interactive (list (emacsconf-mail-complete-email-group))) + (let* ((bbb-name + (format "%s (%s) - %s%s" + (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ") + (plist-get (cadr group) :speakers) + emacsconf-id + emacsconf-year)) + path + (retrieve-command (format "window.location.origin + [...document.querySelectorAll('h4.room-name-text')].find((o) => o.textContent.trim() == '%s').closest('tr').querySelector('.delete-room').getAttribute('data-path')" bbb-name)) + (create-command (format "name=\"%s\"; + console.debug(name); + console.debug(document.querySelector('#create-room-block')); + document.querySelector('#create-room-block').click(); + console.debug(document.querySelector('#create-room-name')); + document.querySelector('#create-room-name').value = name; + document.querySelector('#room_mute_on_join').click(); + document.querySelector('.create-room-button').click();" + bbb-name))) + (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t)) + (unless path + (kill-new create-command) + (dolist (cmd (split-string create-command ";")) + (spookfox-js-injection-eval-in-active-tab cmd t) + (sleep-for 2)) + (sleep-for 2) + (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t))) + (when path + (dolist (talk (cdr group)) + (save-window-excursion + (emacsconf-with-talk-heading talk + (org-entry-put (point) "ROOM" path)))) + (cons bbb-name path)))) + + (let ((groups + (emacsconf-mail-groups + (seq-filter + (lambda (o) + (and (string-match "live" (or (plist-get o :q-and-a) "")) + (not (plist-get o :bbb-room)))) + (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))))) + (dolist (group groups) + (emacsconf-spookfox-create-bbb group))) + + +#### DONE Possibly generate BBB rooms for live presentations? + + +#### DONE Send testing instructions + + +### DONE VNC + +We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it. + +Success: + +- [X] Confirm that you can connect to emacsconf-gen via VNC +- [X] Confirm that you can connect to emacsconf-dev via VNC + +Setting up + +- <emacsconf-publish-res-index> + + +<a id="vnc-instructions"></a> + +#### Instructions + +NOTE: VNC+OBS doesn’t work well if you have a window manager that +automatically resizes windows, like i3. Please configure your window +manager so that the VNC window is not resized. + +1. Install a VNC viewer on your system (ex: tigervnc-viewer). + +2. Set up your local environment: + - gen: export TRACK=gen; export TRACK\_PORT=5905; export SSH\_PORT=46668 + - dev: export TRACK=dev; export TRACK\_PORT=5906; export SSH\_PORT=46668 + +3. Copy the password: + + scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH\_PORT + +4. Forward your local ports and connect via VNC viewer to the + appropriate forwarded port from your laptop: + + ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT & + sleep 5 # Give it time to establish the tunnels + xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK & + +If you get the following error: + + channel 2: open failed: connect failed: Connection refused + CConn: End of stream + CConn: The connection was dropped by the server before the session could + be established. + +then the VNC server hasn’t started yet. You can start it with + + ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc + +and then connect with: + + xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK & + + +#### TODO Ask bandali or zaeph to share their window manager configuration :bandali:zaeph: + + +### DONE OBS + +We use OBS to stream to Icecast on live.emacsconf.org. + +Success: Confirm that you can stream + +- [X] gen +- [X] dev + +New year: reprovision with + + ansible-playbook -i inventory.yml prod-playbook.yml --tags obs + +so that the year is updated in the shell scripts. + + +<a id="obs-instructions"></a> + +#### Instructions + +1. [Connect to the VNC session for the track.](#vnc-instructions) + +2. Start **recording** (not streaming). If you don’t see OBS when you connect, it’s probably on workspace 2, so you can switch with Alt-2. If you still don’t see it there, you can open a terminal with Alt-Enter and then run `track-obs`. After you start recording, confirm that it is now broadcasting to the stream. + +3. Verify with MPV on your local system: + + mpv https://live0.emacsconf.org/$TRACK.webm & + + +#### DONE Double-check OBS setup and streaming on res + + +### DONE Icecast + +Success: You can use [OBS+VNC to record](#obs-instructions), and the results can be viewed by mpv. + +- [X] Gen +- [X] Dev + +New year: reprovision with + + ansible-playbook -i inventory.yml prod-playbook.yml --tags stream + +so that the year is updated in the configuration. + +This is on live.emacsconf.org and can be restarted with `/etc/init.d/emacsconf restart`. + + +#### DONE Double-check icecast + + +### DONE MPV + + +### DONE Watch page + +live.emacsconf.org is on the front0.emacsconf.org server. + +To set up for the year: + +1. Create directories and update the Nginx configuration + + ansible-playbook -i inventory.yml prod-playbook.yml --tags live + +2. Generate the pages + + (emacsconf-publish-watch-pages) + +3. Add the $year/watch to the wiki. + +4. Create a $year/watch.md manually. + + +### DONE Status page + +Manually maintained + +/ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html + + +### DONE Public media + +Start of year: + +1. Set `media_protect_root` to true in Ansible `group_vars/all.yml`. +2. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media` +3. Generate the index with `emacsconf-publish-update-media` + +Confirm by setting a submitted talk to `PLAYING` and testing with +<emacsconf-publish-media-files-on-change> . The public media +directory should have the files and the entry should be in the index. +Switching it back to `TO_STREAM` and calling +<emacsconf-publish-media-files-on-change> should remove it. + + +#### TODO Switch public media to unprotected root before the conference + +1. Clear public media directory. +2. Set `media_protect_root` to false in Ansible `group_vars/all.yml`. +3. `ansible-playbook -i inventory.yml prod-playbook.yml --tags media` + +You can generate the index with `emacsconf-publish-update-media`. + + +### DONE Mumble + +If you see `Server connection rejected: Wrong certificate or password.`, use **Certificate Wizard** to reimport the .p12 file in that user’s home directory. + + +### DONE Etherpad + +<emacsconf-pad-prepopulate-all-talks> + + +#### DONE Create pads for all the talks + +Because the pads refer to the next and previous talks and include the talk titles, this is best redone after the schedule has settled down. + + +### DONE Pad proxy + + +### DONE Overlays + +<emacsconf-stream-generate-overlays> + + +### INPROGRESS Intros + +Intro slides + +<emacsconf-stream-generate-in-between-pages> +<emacsconf-pad-expand-intro> +[elisp:emacsconf-subed-intro-subtitles](emacsconf-subed-intro-subtitles) + +<http://ipa-reader.xyz/> + + +#### DONE Regenerate overlays + + +#### TODO Add all intros to the backstage so that people can review them + + +#### TODO Record intro for Mike Hamrick + +Next, we have “Literate Documentation with Emacs and Org Mode”, by Mike Hamrick. He will answer questions via BigBlueButton. You can join using the URL from the talk page or ask questions through Etherpad or IRC. + + +#### CANCELLED Write 1-2 sentence intros for all the talks + +We do a brief introduction before each talk so that people know the +topic of the next talk, the pronunciation of the speaker’s name, the +pronouns to use when referring to them, and the type of Q&A that will +follow. + +The template we used last year was: “In this talk, SPEAKER shares +TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A +METHOD.” + +This year, we asked speakers to contribute a short introduction. These +are in conf.org in the private repository. Many of the introductions +are a little longer than the template, but we might be able to handle +that. Some need to be rewritten into third-person (using the speaker’s +name/pronouns instead of I). Some might be a bit of a tongue-twister +and can be rewritten to be easier to say. + +We can store the introduction in the `INTRO_NOTE` property in +conf.org. + +Actually recording the introductions can wait until closer to the +conference because talk titles and Q&A methods can change. We can +verify speaker name pronunciations at that time. + +Hmm… Actually, we can go ahead and record all of these so that +speakers can doublecheck pronunciations, and then we’ll re-record them +in case someone wants to get fancier about intros. + + +##### Intros :levels: + +- Good: Use the same template as before: In this talk, SPEAKER shares + TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A + METHOD. +- Better: Include some more biographical information to give listeners some context. + + +##### DONE Do we want to use honorifics like Dr.? :decision: + +DECISION: Include in the intro-review email: + +> We will usually introduce you by your first name (or handle, if you +> prefer to go by a pseudonym) but if you’d rather be introduced +> differently (for example honorific followed by last-name, or whatever +> you prefer), just let us know. + +Let’s see if we can decide on this by <span class="timestamp-wrapper"><span class="timestamp">[2023-11-04 Sat] </span></span> so that we can +use it when recording the intros. + +- OPTION: Consistently using names without honorifics, even if indicated in the + speaker-submitted intros (as in previous EmacsConfs) + - Equality + - votes: zaeph +- CHOSEN: Asking speakers if they want us to use any honorifics in their intro: + + - Observes personal preferences + - votes: corwin, max, jc (We can also say that we prefer not to use honorifics (it’s not an academic + - Corwin’s suggested wording: We will usually introduce you by your first name (or handle, if you prefer to go by a pseudonym) but if you’d rather be introduced + differently (for example honorific followed by last-name, or + whatever you prefer) just let us know. + + conference) but we respect people’s preferences.) +- OPTION: Using honorifics based on e-mail signatures and intros: + - Recognizes credentials + + +#### DONE Record intro videos with 1-2 sentence intros for all the talks + + +#### DONE Record the rest of the intros + + +#### DONE Generate intro slides + +We generate intro slides to display in between talks so that people +can find out information about the previous talk and learn about the +next talk. It includes talk titles, speaker names, URLs, and Q&A +methods. The image will also be used for an introduction video if we +can record one before the conference. + +We also generate overlays that show talk information during the talk +itself. + +SVGs don’t support line-wrapping, so it helps to do a quick pass to +make sure all the talks are displayed properly. + +Hmm… Maybe I should take the names and pronouns off the video +overlay? Then there’s less worry about wrapping, and people can always +go to the URL to get more information. + +<emacsconf-stream-generate-in-between-pages> + + +#### TODO Ask speakers to review intros + +after they’ve uploaded their videos, since we might be able to check the pronunciation ourselves + + +### IRC channels + +- /opall +- /conftopic +- /deopall + + +#### TODO Confirm that the emacsconf user can connect + +I think I had that on orga@res.emacsconf.org + + +### IRC talk info + + +### Announcements + + +### Publishing updates live + + +### Autopilot + + +### YouTube + + +### Peertube + + +### 480p + +Consider increasing memory/cpu configuration on live? + + +<a id="lowres"></a> + +#### TODO Figure out a better way to handle 480p stream :corwin: + +It kept dropping last year and sachac didn’t have the mental bandwidth to figure it out. +Might need another node so that we don’t risk it getting killed for memory reasons? + +Corwin has volunteered to take this on + + +### Audio processing + + +<a id="audio"></a> + +#### TODO Find volunteers for audio processing (normalization, noise reduction) and document the process :helpwanted: + +- audio normalization +- noise reduction + + +### Other things people can help with + + +<a id="eval-video-sync"></a> + +#### TODO Video editing: the eval talk is a little bit out of sync :helpwanted: + +The circular video inset into +<https://media.emacsconf.org/2023/backstage/#eval> is a little bit out +of sync with the audio. Not sure if the screenshare is offset as well. +Maybe just nudging the audio a little bit will be enough to bring +these in sync? If someone would like to fix this, that would be +awesome. + + +### TODO Write something for merging in information from previous years if not specified + +- availability +- timezone +- name +- short name +- pronouns + + +<a id="go-live"></a> + +## Get ready for production :preflight: + + +### A day or two before + + +#### DONE Update the variables + +<a href="https://git.emacsconf.org/emacsconf-ansible/tree/group_vars/all.yml">group_vars/all.yml</a>: + + test_mode: false + media_protect_root: false + protect_stream_with_password: false + + ansible-playbook -i inventory.ml prod-playbook.yml --tags stream + ansible-playbook -i inventory.ml prod-playbook.yml --tags media + + +#### DONE Test the 480p! + + +#### DONE Resize the nodes :bandali: + +2022: + +- Front: 16GB +- Live: 64GB + + +#### TODO Update the BigBlueButton rooms so that users are not all moderators + + (require 'emacsconf-spookfox) + (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))) + (emacsconf-spookfox-update-bbb-settings + talk + '(("room_mute_on_join" . "true") + ("room_all_join_moderator" . "false") + ("room_anyone_can_start" . "true")) + )) + + +#### TODO Make sure conf.org and the publishing wiki are up to date + + +### On the day of the conference + + +#### TODO Update the emacsconf-tracks status + + +<a id="org45dfd5e"></a> + +## Harvest cool stuff + + +### Harvesting + +- download published recordings: (defun emacsconf-harvest-download-published-recordings (source dest) + "Copy the command for downloading published recordings from SOURCE to DEST." + (kill-new + (mapconcat (lambda (o) (if (plist-get o :bbb-meeting-id) + (format "rsync -avzue ssh %s%s %s\n" + source + (match-string 1 (plist-get o :bbb-rec)) + dest) + "")) + (emacsconf-get-talk-info)))) + + +### TODO Announce that videos have been uploaded :emacsconf: + + +### When the speaker posts a video to their own channel :process: + +1. Open the video. +2. Add it to the playlist. +3. Open the playlist: <https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP> +4. Move the video to the correct place. +5. Open the old video. +6. Remove the old video from the playlist. +7. Edit the video. Add the link to the new video in the description. +8. Select **Editor** from the left side. Add an info card and maybe an end screen pointing to the new video. +9. Update the `YOUTUBE_URL` property in the conf.org file. Commit and push. + + +### DONE Figure out which published presentations don’t have any deskshare, so I can just upload those directly + +The following talks do not have deskshares and can therefore be published by copying webcams.webm. + + (seq-keep + (lambda (o) + (when (plist-get o :bbb-meeting-id) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (unless (and dom (dom-by-tag dom 'event)) + (plist-get o :slug))))) + (emacsconf-get-talk-info)) + + (defun emacsconf-harvest-bbb-copy-webcams-only-sessions () + "Copy the webcam-only Q&A sessions as --answers.webm in the cache directory." + (interactive) + (seq-keep + (lambda (o) + (when (and (plist-get o :bbb-meeting-id) + (file-exists-p + (expand-file-name "video/webcams.webm" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (unless + (and dom + (dom-by-tag dom 'event)) + (unless (file-exists-p (expand-file-name + (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir)) + (copy-file + (expand-file-name "video/webcams.webm" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)) + (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir))) + (plist-get o :slug))))) + (emacsconf-get-talk-info))) + + (emacsconf-harvest-bbb-copy-webcams-only-sessions) + + (defun emacsconf-harvest-set-qa-public () + (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))) + (when (emacsconf-talk-file talk "--answers.webm") + (emacsconf-with-talk-heading talk + (org-entry-put (point) "QA_PUBLIC" "1"))))) + + +### DONE Figure out which talks have screenshares and process them + +hmm, speed is about the same on my computer? + +The following talks have deskshares and need splicing. + + (seq-keep + (lambda (o) + (when (plist-get o :bbb-meeting-id) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (when (and dom (dom-by-tag dom 'event)) + (plist-get o :slug))))) + (emacsconf-get-talk-info)) + + (emacsconf-extract-replace-strings + `((,(expand-file-name emacsconf-extract-bbb-published-dir) . "~/current/bbb-published/") + (,(expand-file-name emacsconf-cache-dir) . "~/current/cache")) + (mapconcat + (lambda (slug) + (let ((prefix (plist-get (emacsconf-resolve-talk (symbol-name slug)) :file-prefix))) + (format "if [ ! -f ~/current/cache/%s--answers--original.webm ]; then\n %s && cp ~/current/cache/%s--answers.webm ~/current/cache/%s--answers--original.webm\nfi" + prefix + (emacsconf-get-ffmpeg-to-splice-webcam-and-recording (symbol-name slug)) + prefix + prefix))) + '(teaching one writing sat-close hyperamp poltys sun-close voice scheme world flat emacsen gc) + "\n")) + + +### SOMEDAY Clean up storage on media :emacsconf: + + +### DONE Move answers to main for live talks + + (mapconcat + (lambda (o) + (and (null + (file-exists-p + (expand-file-name (concat (plist-get o :file-prefix) "--main.webm") + emacsconf-cache-dir))) + (file-exists-p + (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir)) + (format "cp %s %s; ../rm-from-cache %s\n" + (concat (plist-get o :file-prefix) "--answers.webm") + (concat (plist-get o :file-prefix) "--main.webm") + (concat (plist-get o :file-prefix) "--answers.webm") + ))) + (emacsconf-get-talk-info) + "") + + +<a id="org3dd5255"></a> + +## Make things easier for next year + + +### TODO Figure out better space usage for backstage vs public on media.emacsconf.org :emacsconf: + +Maybe I can use hard links or symbolic links? + + +### TODO Update the makefile :emacsconf: + + +<a id="coordinate-volunteers"></a> + +## Volunteers + + +### DONE E-mail the list asking people to sign up + +Hi everyone! + +EmacsConf is coming up soon! Here are some roles we need help with +during the conference: + +- Check-in (can handle both tracks): + - Keep an eye out for speakers on IRC and in the BigBlueButton room + - Give the speaker moderator permissions + - <https://emacsconf.org/2023/volunteer/checkin/> +- Host (one for each track): + - Read out questions (and ask some of their own while waiting for questions to come in) + - Remind people how to join + - Keep the speaker company + - Moderate the Q&A sessions as needed + - Let us know when you want the Q&A session to be opened up to everyone + - <https://emacsconf.org/2023/volunteer/host/> +- Streamer (one for each track): + - Manage what happens on the screen + - Listen to the audio volume on the stream and adjust as needed, especially for BigBlueButton rooms + - <https://emacsconf.org/2023/volunteer/stream/> +- Internet Relay Chat scribe (one for each track): + - Check the IRC channel for questions and answers and copy them to the talk’s Etherpad + - <https://emacsconf.org/2023/volunteer/irc/> +- Pad scribe (one for each track): + - Add notes, questions, and answers to the talk’s Etherpad + - <https://emacsconf.org/2023/volunteer/pad/> +- Other things you might be interested in helping out with - feel free to suggest! + +If you let us know which role(s) you’re interested in, the track(s) +you’re interested in (general / development) and your availability for +the conference (ex: Sat AM, Sat PM, Sun AM, Sun PM, or more granular +as needed), I can make a shift schedule. + +If you’re new to the role and have questions, we can help you get +started via e-mail or set up a training meeting. Let me know what you +want to know and what times what might work for you. + +We can also set up a dry run in a couple of weeks so that people can +try working together. Please let me know your availability for maybe +Nov 11 or Nov 18 for a dry run. + +Looking forward to a nice smooth EmacsConf! + +Sacha + + +### TODO Prepare shift calendar, ask people to sign up + +<a name="shifts"></a> + +AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition) + +Saturday Dec 2 2023 + +<table id="orgbedd0ea"> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left"> </th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th> +<th scope="col" class="org-left">Streamer</th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th> +<th scope="col" class="org-left">Coord</th> +</tr> +</thead> + +<tbody> +<tr> +<td class="org-left">Gen AM</td> +<td class="org-left">zaeph</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Gen PM</td> +<td class="org-left">zaph</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Dev AM</td> +<td class="org-left">bandali</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Dev PM</td> +<td class="org-left">bandali</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> +</tbody> +</table> + +Sunday Dec 3 2023 + +<table id="orgcd6d77f"> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left"> </th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/host/">Host</a></th> +<th scope="col" class="org-left">Streamer</th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/checkin/">Checkin</a></th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/irc/">IRC</a></th> +<th scope="col" class="org-left"><a href="https://emacsconf.org/2023/volunteer/pad/">Pad</a></th> +<th scope="col" class="org-left">Coord</th> +</tr> +</thead> + +<tbody> +<tr> +<td class="org-left">Gen AM</td> +<td class="org-left">zaeph</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Gen PM</td> +<td class="org-left">zaeph</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Dev AM</td> +<td class="org-left">bandali</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> + + +<tr> +<td class="org-left">Dev PM</td> +<td class="org-left">bandali</td> +<td class="org-left">sachac</td> +<td class="org-left">FlowyCoder</td> +<td class="org-left"> </td> +<td class="org-left"> </td> +<td class="org-left">sachac</td> +</tr> +</tbody> +</table> + +Backups: + +- dev host/streamer: +- gen host/streamer: +- checkin, IRC, pad: + +Interested in a shift? Please e-mail <mailto:emacsconf-org-private@gnu.org> and we’ll help you figure out what you need to learn. + + `(setq emacsconf-shifts + (list + ,@(apply #'append + (mapcar + (lambda (day) + (let ((headers + (mapcar + (lambda (field) + (intern + (concat + ":" + (downcase + (if (string-match org-link-bracket-re field) + (match-string 2 field) + field))))) + (cdr (car (cadr day)))))) + (mapcar + (lambda (row) + (apply #'append + (list 'list :id + (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row)) + (format "%s-%s-%s" + (car day) + (downcase (match-string 2 (car row))) + (downcase (match-string 1 (car row))))) + :track + (if (string-match "^Gen" (car row)) "General" "Development") + :start + (format "%sT%s:00:00%s" + (elt day 2) + (if (string-match "AM" (car row)) "08" "13") + emacsconf-timezone-offset) + :end + (format "%sT%s:00:00%s" + (elt day 2) + (if (string-match "AM" (car row)) "12" "18") + emacsconf-timezone-offset)) + (seq-map-indexed + (lambda (value index) + (unless (string= value "") + (list (elt headers index) value))) + (cdr row)))) + (cdr (cadr day))) + )) + (list + (list "sat" sat "2023-12-02") + (list "sun" sun "2023-12-03")))))) + + +### DONE Document volunteer roles + +Copied it over from the previous year + + +<a id="org5fa50a9"></a> + +## Lessons learned + +- Make sure timezones are on anything that has time (schedule page, watch pages, etc.) +- Remember to publish the icals and schedule org files: `emacsconf-update-schedule`. Added to the schedule-details.md. +- For really late submissions, make sure you also create the pad (`emacsconf-pad-prepopulate-talk-pad`) and the BBB room (`emacsconf-spookfox-create-bbb`). +- We need to move off the current bbb.emacsverse.org or discuss the future of the current BBB VM. +- Next year, it might be nice to use the intros and generate title slides in order to add them to the videos. + + +<a id="progress"></a> + +# Progress reports + +- <https://emacsconf.org/blog/2023-08-14-cfp-progress/> +- <https://emacsconf.org/blog/2023-09-25-draft-schedule> + + +<a id="templates"></a> + +# E-mail templates + + +<a id="review"></a> + +## Review + + +### Template + +Thanks for submitting your proposal! (ZZZ: feedback) We’re experimenting +with early acceptance this year, so we’ll wait a week in case the +other volunteers want to chime in regarding your talk. =) + + +<a id="acceptance"></a> + +## Acceptance + + +### Function + + (defun emacsconf-mail-accept-talk (talk &optional template) + (interactive (list (emacsconf-complete-talk-info))) + (emacsconf-mail-prepare + (or template (emacsconf-mail-merge-get-template "acceptance")) + (plist-get talk :email) + (list + :title (plist-get talk :title) + :email (plist-get talk :email) + :time (plist-get talk :time) + :conf-name emacsconf-name + :speakers-short (plist-get talk :speakers-short) + :url (concat emacsconf-base-url (plist-get talk :url)) + :video-target-date emacsconf-video-target-date + :year emacsconf-year))) + + +### Template + +Hi, ${speakers-short}! + +Looks like all systems are a go for your talk. =) Thanks for proposing +it! Your talk page is now at ${url} . Please feel free to update it or +e-mail us if you’d like help with any changes. + +If you want to get started on your talk early, we have some +instructions at <https://emacsconf.org/${year}/prepare/> that might help. +We strongly encourage speakers to prepare a talk video by +${video-target-date} in order to reduce technical risks and make +things flow more smoothly. Plus, we might be able to get it captioned +by volunteers, just like the talks last year. We’ll save ${time} minutes +for your talk, not including time for Q&A. Don’t sweat it if +you’re a few minutes over or under. If it looks like a much shorter or +longer talk once you start getting into it, let us know and we might +be able to adjust. + +I’ll follow up with the specific schedule for your talk once things +settle down. In the meantime, please let us know if you have any +questions or if there’s anything we can do to help out! + +Sacha + + +<a id="archive"></a> + +# Archive + + +<a id="hyperdrive-core"></a> + +## DONE Check with hyperdrive and core if they’re willing to swap :decision: + +DONE <span class="timestamp-wrapper"><span class="timestamp">[2023-10-08 Sun]</span></span>: hyperdrive on Sunday afternoon, will keep an eye out for openings on general track and call it out in the opening remarks so people know that it’s a general talk. + +If Stefan Kangas puts together [Emacs core development: how it works](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") +speaking as a new Emacs maintainer, that might be a good general +closing talk on the first day because it can encourage people to help +with Emacs development. We don’t have a lot of space on the General +track, but if we move [hyperdrive.el: Peer-to-peer filesystem in Emacs](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") +to the other track, then there’s enough space. + +It might also be a good idea to move [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") earlier than +[unentangling](https://emacsconf.org/2023/talks/unentangling "(Un)entangling projects and repos") in case John Wiegley can have a live Q&A +session (he might be travelling at that time, so it’s unsure), so that +there’s more time for people to ask emacs-devel highlight questions +and so that John Wiegley and Stefan Kangas can attend each other’s +Q&A. + +Joseph Turner wanted to make sure that people don’t assume the +[hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") talk is too technical for them. We can rename the +tracks (Track A and Track B)? if that helps, so that people don’t +think the other track is exclusively for more technical things. + +Thoughts? + + +### Option A: Here’s the schedule with [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") in the second track and [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") in the first track. + +- world: Ends at 15:30 after 11:30 + +<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(76,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(130,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(169,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect x="196" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(264,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 12:45-12:55 Emacs turbo-charges my writing</title> <rect x="352" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(365,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:10- 1:20 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="392" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:35- 1:55 Collaborative data processing and documenting using org-babel</title> <rect x="431" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(460,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:05- 2:25 How I play TTRPGs in Emacs</title> <rect x="478" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:40- 3:00 Org-Mode workflow: informal reference tracking</title> <rect x="533" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(562,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:10- 3:20 Emacs development updates</title> <rect x="580" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(593,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:30- 3:40 (Un)entangling projects and repos</title> <rect x="611" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(624,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 3:50- 4:30 Emacs core development: how it works</title> <rect x="643" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(703,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:45- 4:55 Saturday closing remarks</title> <rect x="729" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(742,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(107,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:20-10:40 Improving access to AI-assisted literate programming with voice control</title> <rect x="125" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/woof" title="Watch Over Our Folders" data-slug="woof"> <title> 12:45- 1:05 Watch Over Our Folders</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> woof</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 1:20- 1:40 Improving compiler diagnostics with Overlays</title> <rect x="407" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:55- 2:05 Editor Integrated REPL Driven Development for all languages</title> <rect x="462" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(475,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:20- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="501" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(561,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 3:10- 3:30 GNU Emacs: A World of Possibilities</title> <rect x="580" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(609,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 3:45- 4:25 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="635" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(695,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(5,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(122,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(162,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(272,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 12:45- 1:25 Emacs MultiMedia System (EMMS)</title> <rect x="352" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="yellow"></rect> <g transform="translate(412,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:40- 2:10 Programming at 200 wpm</title> <rect x="439" y="15" opacity="0.8" width="47" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(484,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:20- 2:30 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="501" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(514,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:25- 4:05 Emacs saves the Web</title> <rect x="603" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(663,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 4:20- 4:40 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="690" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(719,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:55- 5:05 Sunday closing remarks</title> <rect x="745" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(758,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(178,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 12:45- 1:05 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 1:20- 1:30 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:45- 2:25 Windows into Freedom</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 2:40- 3:00 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="533" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(562,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:15- 3:35 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="588" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(617,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> + + +### Option B: Keep [hyperdrive](https://emacsconf.org/2023/talks/hyperdrive "hyperdrive.el: Peer-to-peer filesystem in Emacs") on the first track, and group [devel](https://emacsconf.org/2023/talks/devel "Emacs development updates") and [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") on the second track. + +We can encourage people to check out the different tracks in the opening remarks. + +- world: Ends at 14:55 after 11:30 + +<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(76,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(130,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(169,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:05-11:15 Taming things with Org Mode</title> <rect x="196" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(209,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(264,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 12:45-12:55 Emacs turbo-charges my writing</title> <rect x="352" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(365,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:10- 1:20 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="392" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:35- 1:55 Collaborative data processing and documenting using org-babel</title> <rect x="431" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="yellow"></rect> <g transform="translate(460,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:05- 2:25 How I play TTRPGs in Emacs</title> <rect x="478" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:40- 3:00 Org-Mode workflow: informal reference tracking</title> <rect x="533" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="green"></rect> <g transform="translate(562,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:10- 3:20 (Un)entangling projects and repos</title> <rect x="580" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(593,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:40- 4:50 Saturday closing remarks</title> <rect x="721" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(734,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(107,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:20-10:40 Improving access to AI-assisted literate programming with voice control</title> <rect x="125" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(209,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 12:45- 1:05 Improving compiler diagnostics with Overlays</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:20- 1:30 Editor Integrated REPL Driven Development for all languages</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="lightgreen"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 1:45- 2:25 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 2:35- 2:55 GNU Emacs: A World of Possibilities</title> <rect x="525" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="red"></rect> <g transform="translate(554,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:10- 3:20 Emacs development updates</title> <rect x="580" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 3:30- 4:10 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="611" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(671,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 3:35- 4:15 Emacs core development: how it works</title> <rect x="619" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(679,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:05 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="7" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(5,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:10-10:20 Parallel Text Replacement: Does P = NP?</title> <rect x="109" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(122,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(162,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(272,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 12:45- 1:25 Emacs MultiMedia System (EMMS)</title> <rect x="352" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(412,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 1:40- 2:10 Programming at 200 wpm</title> <rect x="439" y="15" opacity="0.8" width="47" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(484,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:20- 2:30 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="501" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(514,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:00- 3:40 Emacs saves the Web</title> <rect x="564" y="15" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(624,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(679,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(718,98)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 10:35-10:55 What I learned by writing test cases for GNU Hyperbole</title> <rect x="149" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(178,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 12:45- 1:05 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="352" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(381,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 1:20- 1:30 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="407" y="100" opacity="0.8" width="15" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(420,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:45- 2:25 Windows into Freedom</title> <rect x="447" y="100" opacity="0.8" width="62" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(507,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 2:40- 3:00 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="533" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(562,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:15- 3:35 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="588" y="100" opacity="0.8" width="31" height="84" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(617,183)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg> + + +### Other ideas? + +Feel free to suggest something! + +Notes: + +- [sharing](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video") is nice to pair with [mentor](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)") and [hn](https://emacsconf.org/2023/talks/hn "The many ways to browse Hacker News from Emacs") and might be a good general-audience keynote-type thing as well. I don’t want to schedule [core](https://emacsconf.org/2023/talks/core "Emacs core development: how it works") to compete with it. + + +<a id="three-tracks"></a> + +## DONE Test the idea of three tracks and more aligned times :decision: + +Decision: We’ll stick with the two-track schedule for now because it’s +more likely, and we’ll adjust as we get closer to the conference +depending on speaker submissions and on volunteer availability. + +Note: Let’s see if we can decide on this by <span class="timestamp-wrapper"><span class="timestamp">[2023-10-13 Fri] </span></span> so that we can +e-mail the draft schedules to people. + +Compared to [two-track schedule](#draft-schedule): + +What if we have three tracks instead? + +- Two-track advantages as in EmacsConf 2022: + - Fewer volunteers needed (host, IRC, pad) + - Can do with existing computing power (instead of spinning up another node for VNC+OBS) + - Less fear of missing out for participants + - votes: zaeph +- Three-track advantages: + - More space between talks for streaming the Q&A + - Easier to explain the schedule + - More logical grouping + - Ends earlier, which is easier for participants from Europe + - votes: max (Three tracks is the best policy if you’re more than 75% sure that you can round up the volunteers) +- [Three tracks just for Sunday morning](#three-tracks-sun-am): + - Allows us to have 20 minutes between talks instead of 15 + - Might be easier to test the idea for just one part of the conference + + +<a id="three-tracks-sun-am"></a> + +### Three tracks for Sunday morning? + +- unentangling: Starts at 14:35 before 15:00 +- world: Ends at 16:20 after 11:30 +- Missing talks: core + diff --git a/2023/organizers-notebook/index.org b/2023/organizers-notebook/index.org new file mode 100644 index 00000000..321e6eea --- /dev/null +++ b/2023/organizers-notebook/index.org @@ -0,0 +1,2555 @@ +# [[elisp:(progn (memoize 'emacsconf-get-talk-info "5 seconds") (org-md-export-to-markdown) (memoize-restore 'emacsconf-get-talk-info))][Export this file to Markdown]] +#+TAGS: emacsconf +# [[elisp:(memoize 'emacsconf-get-talk-info "5 seconds")][Memoize emacsconf-get-talk-info]] - [[elisp:(memoize-restore 'emacsconf-get-talk-info)][Unmemoize]] +#+todo: TODO(t) SOMEDAY STARTED INPROGRESS(i) WAITING(w) STANDBY(s) BLOCKED(b) | DONE(x) CANCELLED(c) +#+OPTIONS: h:6 toc:nil num:nil ':t +#+PROPERTY: header-args :results silent :exports code :tangle yes +#+EXPORT_FILE_NAME: ../organizers-notebook.md +#+PROPERTY: QUANTIFIED Emacs + +#+begin_export md +<!-- organizers-notebook.md is exported from organizers-notebook/index.org, please modify that instead. --> +[[!sidebar content=""]] + +This file is automatically exported from [/2023/organizers-notebook/index.org](/2023/organizers-notebook/index.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/). +#+end_export + +#+NAME: list-headings +#+begin_src emacs-lisp :results value replace :exports results :eval never-export :var heading="Help wanted" :var match="helpwanted" +(emacsconf-surround + (concat heading ":\n\n") + (string-join + (delq nil + (org-map-entries + (lambda () + (when (and (org-entry-is-todo-p) (not (org-entry-is-done-p))) + (format "- %s %s\n" + (org-link-make-string + (concat "#" (org-entry-get (point) "CUSTOM_ID")) + (org-entry-get (point) "ITEM")) + (emacsconf-surround + "(by " + (and (org-entry-get (point) "DEADLINE") + (replace-regexp-in-string "[<>]" "" (org-entry-get (point) "DEADLINE"))) + ")" + "")))) + match nil)) + "") +"" "") +#+end_src + +#+RESULTS: list-headings +:results: +Help wanted: + +- [[#audio][Find volunteers for audio processing (normalization, noise reduction) and document the process]] +- [[#eval-video-sync][Video editing: the eval talk is a little bit out of sync]] (by 2023-11-15 Wed) +:end: + +#+RESULTS: +:results: +Help wanted: + +- [[#lowres][Figure out a better way to handle 480p stream]] +:end: + +#+CALL: list-headings(heading="Decisions to make", match="decision") + +#+RESULTS: +:results: +:end: + +#+TOC: headlines 2 + +* Timeline +:PROPERTIES: +:CUSTOM_ID: timeline +:END: + + +| CFP | [2023-06-26 Mon] | +| CFP deadline | [2023-09-14 Thu] | +| Speaker notifications | [2023-09-25 Mon] | +| *Publish schedule* | [2023-10-25 Wed] | +| Video submission deadline | [2023-11-04 Sat] | +| EmacsConf | [2023-12-02 Sat], [2023-12-03 Sun] | + +Last year, these were the actual dates: +- July 17: CFP sent +- Sept 18: Original CFP deadline +- Sept 30: CFP closed after extension +- Oct 1: acceptances sent + +** TODO Dry run +SCHEDULED: <2023-10-28 Sat> +:PROPERTIES: +:CUSTOM_ID: dry-run +:END: +** TODO Dry run with more volunteers +SCHEDULED: <2023-11-11 Sat> +:PROPERTIES: +:CREATED: [023-10-13 Fri 20:5] +:CUSTOM_ID: dry-run-2 +:END: +* About this document +:PROPERTIES: +:CUSTOM_ID: about-this-doc +:END: + +Tags: +- =conforg=: Requires access to private conf.org repository +* Communications plan +:PROPERTIES: +:CUSTOM_ID: comms +:END: + +Objectives: +- keep everyone in the loop without them feeling like they're overloaded + +Speakers: +- [X] Send all speakers backstage access and upload instructions +- [ ] Send all speakers check-in instructions + +Volunteers: +- [X] Send captioning volunteers the backstage info +- [ ] Send past captioning volunteers an invitation to participate - ask when there's a lot of load +- [ ] Ask for help with audio processing +** Next emacsconf-org update +SCHEDULED: <2023-10-21 Sat> +:PROPERTIES: +:CUSTOM_ID: emacsconf-org-2023-10-21 +:END: + +backstage + +volunteers + +help wanted: + +audio processing + +intros + +* Good/better/best +:PROPERTIES: +:CUSTOM_ID: good-better-best +:END: + +This table makes it easier to move the slider depending on who wants +to volunteer and how much we can get done. At some point, we'll figure +out how to track our current status so we know what we need to +scramble to do in order to get the conference off the ground. *bold* +is our current goal. Feel free to volunteer for anything that +interests you! + +| | Good | Better | Best | +| Autopilot | offset TRAMP timers | Crontab | Can be toggled | +| 480p | Someone's computer | Separate node | Ansible setup | +| Watch instructions | Embed | Reminder to prefer mpv | | +| Audio | As is | Normalized | Noise reduction | +| Intros | Standard, recorded | Reviewed by speakers in backstage | More details/context | + +* Phases +:PROPERTIES: +:CUSTOM_ID: phases +:END: +** DONE Draft CFP +CLOSED: [2023-09-22 Fri 09:49] +:PROPERTIES: +:CUSTOM_ID: cfp +:END: +*** How to mark pages as drafts + +Put inside double square brackets: =!template id=pagedraft= + +*** Considerations + +We could see if there are parts of the CFP that we can remove or +postpone. Here are some thoughts: + +- We might not need the 10+20+40 structure in the proposal. We did + that before because people tend to propose longer talks, and we had + to do lots of e-mail coordination in order to squeeze everything + into one track. If we're doing multiple streams, there's less time + pressure, so we might not need to confuse people with those + requirements. I think it would still be good to nudge people towards + 20 minutes for their prerecorded presentations (separate time for + Q&A) instead of 40 minutes, because it's good for people's attention + spans. As an incentive to consider a 5-10 minute talk, we can say + that 5-10 minute videos can be played extra times during the + conference to fill gaps. + - Choices: + - Keep the 10+20+40 structure so that people who want to propose + longer talks are nudged to think about shorter versions + - Strongly nudge people towards 20-minute talks, with repeats as + the incentive for shorter talks and extra coordination/waiting + needed for longer talks. People propose just the talk length + they want (and can optionally propose other talk lengths if they + want to be considered for them). +- We added emergency contact info, public contact info, pronouns, and + introduction to the submission form because we ended up going back + and forth with people in previous years, and sometimes we had + incomplete info and were panicking about how to reach people during + the conference. We could drop this from the submission form and do a + separate speaker information form. + - Choices: + - Talk submission, then speaker information form: less + intimidating for speakers + - Everything in one: easier for organizers + +*** Previous years + +- Ask for public e-mail or contact information, IRC handle in CFP + - Added to submit page. +- Be even more stringent about the 10/20/40-min splits. A lot of + speakers still default to the 20- or 40-min formats without + providing us shorter formats, and that puts strain on our schedule + and requires us to use a different template for the notification + (which can be confusing). We need to stress that not respecting the + format makes it harder not only for the organizers, but also for the + speakers themselves (since they will have to rethink their + presentation). Maybe we can have an e-mail template for a quick + reply that says something like "Just in case we need to squeeze + talks into shorter times, could you please also propose an outline + for a possible 10-minute talk that could get people interested in + your topic and point them to where they can find out more?" + - sachac: I'd love to experiment with rolling acceptances. If people + have a good 10-20 minute version of their talk and we want to + accept it in the program, it would be nice to be able to say yes + early so that they can start working on it. We can work with any + duplication of content in later proposals. +- Two people is the sweet number of reviewers to have for the + proposals before sending the notifications, and there’d be + diminishing returns with more. Two is enough to release the pressure + on SCHED, verify the metadata (esp. speaker availability), and + suggest a different ordering where appropriate. It can take a long + time to comb through the proposals (roughly 10 proposals per hour), + and whilst it’d be difficult to justify more in-depth reviewers, + other orgas can do a shallow-pass to catch red-flags or discuss the + submissions as they come in. Other organizers can always chime in on + topics they particularly care about so that their encouraging + comments or suggestions can be included in the acceptance e-mail. + - sachac: Who wants to help me with this? +- We extended CFP-end by two weeks this year, but that made it coincide + with speaker-notifs, and that’s awkward. Next time, we should only + extend the CFP by one week to avoid having to scramble with the + schedule until the very last day. + - Proposed dates in https://emacsconf.org/2023/cfp/ have similar + spacing, so yeah, we'll want to extend by only one week. +- Some people assume that they have to suggest longer formats even if + they intend their talks to be 10′ or 20′. We should change the + wording on the CFP to ask them to only provide alternatives for + shorter formats, not longer. + - Added a brief note to CFP. +- It was hard to squeeze all the org/hyperbole talk on day-1. + Generally, the people who submit these kinds of talk come from all + over the world, and US mornings are more accommodating than US + evenings when it comes to timezones. We might consider having two org + *mornings* rather than an org *day*; it would give us more flexibility + with those talks. + - Let's see if we can do two streams again. That was fun. +- We’re starting to reach critical mass on the org-talks. We might want + to consider splitting the org-talks and the dev-talks into two + distinct events to allow them to grow independently. + - Let's see if we can do two streams again. That was fun. +- We should associate time-of-day with CFP-deadline; otherwise, the + scheduler has to be on edge until the very end of the day. It’s worse + this year because we made CFP-end coincide with speaker-notif, so this + might not be as much of a problem next year. + - If we do rolling acceptances and we extend by at most one week + instead of two, this should be fine. +- It’s easier for us to extend beyond 5pm than to go before 9am + (especially for the West coast). Extending beyond 5pm puts strain on + European organizers and volunteers, though. + - Time pressure should be alleviated with multiple streams. +- Sometimes, ikiwiki on front0 took a lot of time to process the new + commits. sachac assumed this is due to a faulty regex parsing. We + should be able to find out more by looking at the logs from ikiwiki + after a slow commit. + - Seems speedy at the moment. +- Ask for preferred timezone in CFP + - Added to availability. +- Check with John Wiegley re: schedule - we always happen to coincide + with his work trips + - I checked with him and the people at his work don't have a schedule + yet, so we should go ahead and plan +*** Lessons learned for next year + +- Maybe incentivize proper timezone specification by saying we can translate times to their local time? +- Make sure to include cfp.org as an attachment instead of inline +*** Other thoughts +- sachac: bandali likes having the commitment to freedom section in the CFP as a form of activism +- sachac: I thought about pulling the deadline back to Sept 1, but it might be + good to keep it at Sept 14 so that anyone who tends to work with the + schoolyear can still have a little time to work on it. + +** DONE Distribute CFP +CLOSED: [2023-09-22 Fri 09:50] +:PROPERTIES: +:CUSTOM_ID: distrib-cfp +:END: +*** DONE Add proposal review volunteers to emacsconf-submit +CLOSED: [2023-06-25 Sun 19:35] +- https://lists.gnu.org/mailman/admin/emacsconf-submit/members/add +- Ask volunteers to e-mail an SSH public key so they can be added via the gitolite-admin repo to the conf.org repo for the year +*** First announcement +SCHEDULED: <2023-06-26 Mon> +- Remove draft tags :sachac: +- Post on emacsconf-discuss, emacs-tangents :bandali: :zaeph: +- Sticky on reddit.com/r/emacs +- Post in Emacs News :sachac: + +*** Reminder + +** DONE Process submissions +CLOSED: [2023-09-22 Fri 09:50] +:PROPERTIES: +:CUSTOM_ID: submission-process +:FUNCTION: emacsconf-mail-review +:END: + +- Proposal received: sachac adds it to this document with status of PROPOSED + - Fields: + #+begin_example + EMERGENCY, Q_AND_A, AVAILABILITY, NAME, PRONOUNS, TIME, MIN_TIME, MAX_TIME, SLUG, EMAIL, NAME_SHORT, CUSTOM_ID, TRACK, TIMEZONE, CATEGORY, DATE_SUBMITTED + #+end_example +- jc doublechecks that the data has been correctly captured (especially EMAIL and AVAILABILITY) +- People review it (sachac, jc, etc.) and weigh in +- Proposal accepted: sachac e-mails the speaker and sets status to WAITING_FOR_EMAIL_CONFIRM +- E-mail confirmation received: log it in the logbook +- Schedule set: sachac e-mails the speaker and sets status to WAITING_FOR_SCHED_CONFIRM +*** 2023-08-14 EmacsConf 2023 CFP progress report (8 talks accepted so far, 1 to review, 6 todo) +SCHEDULED: <2023-08-14 Mon> +:PROPERTIES: +:CUSTOM_ID: cfp-progress +:END: + +#+begin_comment +https://emacsconf.org/blog/2023-08-14-cfp-progress/ +#+end_comment + +The end of the EmacsConf 2023 call for participation is one month away +(Sept 14; https://emacsconf.org/2023/cfp/). Whee! So far, we've sent +early acceptances to the following talks and added them to the program +on the wiki (https://emacsconf.org/2023/talks): + +#+begin_src emacs-lisp :results replace table :exports results :eval never-export +(append + '(("Duration" "Title" "Speaker")) + (mapcar (lambda (o) + (list (plist-get o :duration) + (plist-get o :title) + (plist-get o :speakers))) + (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) (emacsconf-get-talk-info)))) +#+end_src + +#+RESULTS: +:results: +| Duration | Title | Speaker | +| 10 | An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp | Chung-hong Chan | +| 20 | Authoring and presenting university courses with Emacs and a full libre software stack | James Howell | +| 20 | Org-Mode workflow: informal reference tracking | Christopher Howard | +| 20 | GNU Emacs for electronics, note-taking, and as lightweight IDE | Anand Tamariya | +| 10 | A modern Emacs look-and-feel without pain | Pedro A. Aranda | +| 10 | Writing a language server in OCaml for Emacs, fun, and profit | Austin Theriault | +| 20 | LLM clients in Emacs, functionality and standardization | Andrew Hyatt | +| 10 | The many ways to browse Hacker News from Emacs | Mickael Kerjean | +:end: + +We sent the speakers https://emacsconf.org/2023/prepare/ in case +anyone wants to get started on their presentations. + +There's one talk that's waiting for feedback on the emacsconf-submit +before we send the early acceptance in about a week: + +#+begin_src emacs-lisp :results replace table :exports results :eval never-export +(append + '(("Duration" "Title" "Speaker")) + (mapcar (lambda (o) + (list (plist-get o :duration) + (plist-get o :title) + (plist-get o :speakers))) + (seq-filter (lambda (o) (string= (plist-get o :status) "TO_REVIEW")) (emacsconf-get-talk-info)))) +#+end_src + +#+RESULTS: +:results: +| Duration | Title | Speaker | +| 20 | one.el: the static site generator for Emacs Lisp Programmers | Tony Aldon | +:end: + +There are several talk proposals that are in progress (need to +coordinate, don't have speaker releases / full details / etc.): + +#+begin_src emacs-lisp :results replace table :exports results :eval never-export +(append + '(("Title" "Speaker")) + (mapcar (lambda (o) + (list (plist-get o :title) + (plist-get o :speakers))) + (seq-filter (lambda (o) (string= (plist-get o :status) "TODO")) (emacsconf-get-talk-info)))) +#+end_src + +#+RESULTS: +:results: +| Title | Speaker | +| Emacs MultiMedia System (EMMS) | Yoni Rabkin | +| Emacs development updates | John Wiegley | +| Watch Over Our Folders | Bastien Guerry | +| Emacs community information sharing? | Jake B | +| Emacs saves the Web | Yuchen Pei | +| How to build an Emacs 2: Revenge of the Lem | Fermin | +:end: + +This time last year, we had 2 proposals, with most of the proposals +coming in at the end of the CFP. This was usually when we started +panicking about not having lots of proposals, but I think we can skip +stressing about it this year. <laugh> Even with the program as it is +now, we'd already have a pretty fun EmacsConf. Can't wait to see what +it'll look like when more people get their proposals in! + +bandali, maybe we can do a 1-month and/or 2-week reminder about the +CFP deadline? I'd like to see if we can get away without officially +extending the CFP this time. + +Sacha +*** Lessons learned from the CFP acceptance phase :lessons: + +- Early acceptances are nice. A few got comments within the 1-week + period, which helped refine the talk idea more. We probably don't + need to make this a 2-week review period. +- It's a good idea to send the review and acceptance e-mails even to + fellow organizers/volunteers, even if they're quite familiar with + the page already. =) +- We successfully didn't panic about submissions, yay! It was nice to + be able to draft schedules as we went along, and to compare the + dates with last year's trends. +- I added some more automation for including a template in a mail + reply. Changing the subject to =EmacsConf 2023 acceptance: talk + title= made it easier to verify that talks had been responded to. +- I added =emacsconf-mail-add-submission= for parsing submissions from + e-mail and adding them to =emacsconf-org-file=. That was nice + because it automatically saved =EMAIL=, =DATE_SUBMITTED=, and + =DATE_TO_NOTIFY=. +- Displaying the schedule as a list with time constraints made it + easier to verify the time constraints and to see how I can fix + errors. +- Drafting the schedule in the public organizers notebook was nice + because I could share that with the speakers and other volunteers. +*** DONE E-mail the speakers the upload and backstage instructions +CLOSED: [2023-10-16 Mon 12:47] +*** Handling a late submission + +doc + +- [ ] Add talk entry to conf.org +- [ ] Add talk to schedule in organizers notebook +- [ ] Add talk to the wiki +- [ ] Send speaker backstage information, upload information, and schedule +- [ ] Create BBB room +- [ ] Record intro + +** Draft schedule for EmacsConf 2023 +:PROPERTIES: +:CUSTOM_ID: draft-schedule +:END: + +These times are in EST (GMT-5). + +#+NAME: schedule +#+begin_src emacs-lisp :results value replace :exports none :eval never-export +(require 'emacsconf) +(require 'emacsconf-schedule) +(setq emacsconf-schedule-tracks + '((:label "Saturday" + :start "2023-12-02 9:00" + :end "2023-12-02 18:00" + :tracks ("General" "Development")) + (:label "Sunday" + :start "2023-12-03 9:00" + :end "2023-12-03 18:00" + :tracks ("General" "Development")))) +(let ((emacsconf-schedule-default-buffer-minutes 10) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-use-absolute-url t) + (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates))) + (setq emacsconf-schedule-plan + '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00" :set-track "General") + sat-open + adventure + uni + teaching + table + (one :start "11:30") + (lunch :start "12:00") + writing + nabokov + collab + solo + ref + unentangling + devel + core + (sat-close) + ("DEV Saturday, Dec 2" :start "2023-12-02 10:00" :set-track "Development") + (matplotllm) + (voice) + (llm) + (lunch :start "12:00") + (overlay) + (eval) + (repl) + doc + (windows) + ("GEN Sunday, Dec 3" :start "2023-12-03 09:00" :set-track "General") + sun-open + hyperamp + koutline + (parallel) + eat + poltys + cubing + (lunch :start "12:00") + (emms) + (steno) + mentor + break + web + sharing + (sun-close :start "16:30") + ("DEV Sunday, Dec 3" :start "2023-12-03 10:00" :set-track "Development") + scheme + (world) + (flat) + (emacsen) + (lunch :start "12:00") + gc + hyperdrive + lspocaml + test + (emacsconf) + )) + (setq emacsconf-schedule-draft (emacsconf-schedule-prepare (emacsconf-schedule-inflate-sexp emacsconf-schedule-plan))) + (prog1 (string-join (emacsconf-schedule-validate emacsconf-schedule-draft) "\n") + (let ((emacsconf-schedule-svg-modify-functions + '(;emacsconf-schedule-svg-color-by-availability + emacsconf-schedule-svg-color-by-status))) + (with-temp-file (expand-file-name "schedule.svg" (file-name-directory emacsconf-org-file)) + (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft))) + (with-temp-file (expand-file-name "schedule.svg" (expand-file-name "organizers-notebook" (expand-file-name emacsconf-year emacsconf-directory))) + (svg-print (emacsconf-schedule-svg 800 300 emacsconf-schedule-draft)))) + (clear-image-cache))) +#+end_src + +#+RESULTS: schedule +:results: +:end: + +[[my-include:schedule.svg?wrap=export html]] + +- Legend: dashed line means non-BBB Q&A; light gray means penciled-in talk; yellow means video already submitted and being processed + + +*** Draft schedule as a list +:PROPERTIES: +:CUSTOM_ID: schedule-list +:END: + + #+NAME: draft-schedule-table + #+begin_src emacs-lisp :results raw replace :exports results :eval never-export + (string-join + (seq-keep (lambda (o) (when (plist-get o :slug) + (concat "- " + (replace-regexp-in-string "[<>]" "" + (plist-get o :scheduled)) + " " + (if (string-match "after the event" (or (plist-get o :q-and-a) "")) "- no live Q&A - " + (emacsconf-surround "- " (emacsconf-schedule-format-time-constraint o) " - " "")) + (format "[[emacsconf:%s][%s]]: " + (plist-get o :slug) + (plist-get o :slug)) + (plist-get o :title) + (emacsconf-surround " (" + (plist-get o :speakers) + ") " "")))) + (sort emacsconf-schedule-draft (lambda (a b) (string< (plist-get a :scheduled) (plist-get b :scheduled))))) "\n") + #+end_src + + #+RESULTS: draft-schedule-table + - 2023-12-02 Sat 09:00-09:10 [[emacsconf:sat-open][sat-open]]: Saturday opening remarks + - 2023-12-02 Sat 09:10-09:20 - <= 10:00 - [[emacsconf:adventure][adventure]]: An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp (Chung-hong Chan) + - 2023-12-02 Sat 09:30-09:50 [[emacsconf:uni][uni]]: Authoring and presenting university courses with Emacs and a full libre software stack (James Howell) + - 2023-12-02 Sat 10:00-10:10 - <= 10:30 - [[emacsconf:matplotllm][matplotllm]]: MatplotLLM, iterative natural language data visualization in org-babel (Abhinav Tushar) + - 2023-12-02 Sat 10:05-10:25 - on 2023-12-02 - [[emacsconf:teaching][teaching]]: Teaching computer and data science with literate programming tools (Marcus Birkenkrahe) + - 2023-12-02 Sat 10:20-10:40 [[emacsconf:voice][voice]]: Enhancing productivity with voice computing (Blaine Mooers) + - 2023-12-02 Sat 10:40-10:50 - <= 11:00 - [[emacsconf:table][table]]: Who needs Excel? Managing your students qualifications with org-table (Daniel Molina) + - 2023-12-02 Sat 10:55-11:15 - >= 10:00 - [[emacsconf:llm][llm]]: LLM clients in Emacs, functionality and standardization (Andrew Hyatt) + - 2023-12-02 Sat 11:05-11:15 - <= 15:00 - [[emacsconf:taming][taming]]: Taming things with Org Mode (Gergely Nagy (algernon)) + - 2023-12-02 Sat 11:30-11:50 - <= 13:00 - [[emacsconf:one][one]]: one.el: the static site generator for Emacs Lisp Programmers (Tony Aldon) + - 2023-12-02 Sat 13:00-13:10 [[emacsconf:writing][writing]]: Emacs turbo-charges my writing (Jeremy Friesen) + - 2023-12-02 Sat 13:00-13:20 - >= 11:00 - [[emacsconf:overlay][overlay]]: Improving compiler diagnostics with overlays (Jeff Trull) + - 2023-12-02 Sat 13:25-13:35 [[emacsconf:nabokov][nabokov]]: Why Nabokov would use Org-Mode if he were writing today (Edmund Jorgensen) + - 2023-12-02 Sat 13:35-13:45 [[emacsconf:eval][eval]]: Editor Integrated REPL Driven Development for all languages (Musa Al-hassy) + - 2023-12-02 Sat 13:50-14:10 - no live Q&A - [[emacsconf:collab][collab]]: Collaborative data processing and documenting using org-babel (Jonathan Hartman, Lukas C. Bossert) + - 2023-12-02 Sat 14:00-15:00 [[emacsconf:repl][repl]]: REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ (Eduardo Ochs) + - 2023-12-02 Sat 14:20-14:40 - >= 12:00 - [[emacsconf:solo][solo]]: How I play TTRPGs in Emacs (Howard Abrams) + - 2023-12-02 Sat 14:55-15:15 - >= 13:00 - [[emacsconf:ref][ref]]: Org-Mode workflow: informal reference tracking (Christopher Howard) + - 2023-12-02 Sat 15:10-15:50 [[emacsconf:doc][doc]]: Literate Documentation with Emacs and Org Mode (Mike Hamrick) + - 2023-12-02 Sat 15:25-15:35 - between 15:00-16:00 - [[emacsconf:unentangling][unentangling]]: (Un)entangling projects and repos (Alexey Bochkarev) + - 2023-12-02 Sat 15:45-15:55 - >= 12:00 - [[emacsconf:devel][devel]]: Emacs development updates (John Wiegley) + - 2023-12-02 Sat 16:05-16:45 [[emacsconf:windows][windows]]: Windows into Freedom (Corwin Brust) + - 2023-12-02 Sat 16:10-16:50 [[emacsconf:core][core]]: Emacs core development: how it works (Stefan Kangas) + - 2023-12-02 Sat 17:05-17:15 [[emacsconf:sat-close][sat-close]]: Saturday closing remarks + - 2023-12-03 Sun 08:59-09:04 [[emacsconf:sun-open][sun-open]]: Sunday opening remarks + - 2023-12-03 Sun 09:05-09:25 - <= 12:00 - [[emacsconf:hyperamp][hyperamp]]: Top 10 ways Hyperbole amps up Emacs (Robert Weiner) + - 2023-12-03 Sun 09:40-10:00 [[emacsconf:koutline][koutline]]: Using Koutline for stream of thought journaling (Matthew Jorgensen (PlasmaStrike)) + - 2023-12-03 Sun 10:00-10:20 - <= 12:00 - [[emacsconf:scheme][scheme]]: Bringing joy to Scheme programming (Andrew Tropin) + - 2023-12-03 Sun 10:10-10:25 - <= 11:00 - [[emacsconf:parallel][parallel]]: Parallel text replacement (Lovro, Valentino Picotti) + - 2023-12-03 Sun 10:35-10:45 - <= 13:00 - [[emacsconf:eat][eat]]: Eat and Eat powered Eshell, fast featureful terminal inside Emacs (Akib Azmain Turja) + - 2023-12-03 Sun 10:35-10:55 - <= 11:30 - [[emacsconf:world][world]]: GNU Emacs: A World of Possibilities (Anand Tamariya) + - 2023-12-03 Sun 11:00-11:20 - <= 13:00 - [[emacsconf:poltys][poltys]]: The browser in a buffer (Michael Bauer) + - 2023-12-03 Sun 11:10-11:20 - between 11:00-13:00 - [[emacsconf:flat][flat]]: A modern Emacs look-and-feel without pain (Pedro A. Aranda) + - 2023-12-03 Sun 11:35-11:55 - <= 17:00 - [[emacsconf:cubing][cubing]]: Speedcubing in Emacs (wasamasa) + - 2023-12-03 Sun 11:35-11:55 - <= 13:00 - [[emacsconf:emacsen][emacsen]]: The Emacsen family, the design of an Emacs and the importance of Lisp (Fermin) + - 2023-12-03 Sun 13:00-13:35 - <= 14:00 - [[emacsconf:gc][gc]]: emacs-gc-stats: Does garbage collection actually slow down Emacs? (Ihor Radchenko) + - 2023-12-03 Sun 13:00-13:40 [[emacsconf:emms][emms]]: Emacs MultiMedia System (EMMS) (Yoni Rabkin) + - 2023-12-03 Sun 13:50-14:30 - >= 11:00 - [[emacsconf:hyperdrive][hyperdrive]]: hyperdrive.el: Peer-to-peer filesystem in Emacs (Joseph Turner and Protesilaos Stavrou) + - 2023-12-03 Sun 13:55-14:25 [[emacsconf:steno][steno]]: Programming with steno (Daniel Alejandro Tapia) + - 2023-12-03 Sun 14:35-14:45 [[emacsconf:mentor][mentor]]: Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs) (Jeremy Friesen) + - 2023-12-03 Sun 14:45-15:00 [[emacsconf:lspocaml][lspocaml]]: Writing a language server in OCaml for Emacs, fun, and profit (Austin Theriault) + - 2023-12-03 Sun 15:10-15:40 - >= 15:00 - [[emacsconf:web][web]]: Emacs saves the Web (maybe) (Yuchen Pei) + - 2023-12-03 Sun 15:15-15:45 - >= 12:00 - [[emacsconf:test][test]]: What I learned by writing test cases for GNU Hyperbole (Mats Lidell) + - 2023-12-03 Sun 15:55-16:15 [[emacsconf:sharing][sharing]]: Sharing Emacs is Caring Emacs: Emacs education and why I embraced video (Jacob Boxerman) + - 2023-12-03 Sun 16:00-16:20 [[emacsconf:emacsconf][emacsconf]]: EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference (Sacha Chua) + - 2023-12-03 Sun 16:30-16:40 [[emacsconf:sun-close][sun-close]]: Sunday closing remarks +*** Schedule announcements +:PROPERTIES: +:CUSTOM_ID: schedule-announcements +:END: + + - [2023-12-02 Sat] emacsconf:repl needs 60 minutes instead of 40, adjusting doc and windows + - [2023-12-01 Fri] emacsconf:gc needs 35 minutes, adjusting later talks (emacsconf:hyperdrive, emacsconf:lspocaml, emacsconf:test, emacsconf:emacsconf) + - [2023-12-01 Fri] emacsconf:windows now on Sat afternoon devel track and emacsconf:emacsconf now on Sunday afternoon devel track + - [2023-12-01 Fri] Cancelled emacsconf:taming + - [2023-11-29 Wed] Changed title for emacsconf:voice, changed emacsconf:table Q&A to after the conference + +*** Schedule notes +:PROPERTIES: +:CUSTOM_ID: schedule-notes +:END: + +- *Schedule changes after the schedule FYI email from 2023-10-05*: + - [2023-11-29 Wed] Allocated 15 minutes to [[emacsconf:lspocaml]] + - [2023-11-23 Thu] Allocated 30 minutes to emacsconf:test + - [2023-11-14 Tue] Update emacsconf:steno title; add Prot to emacsconf:hyperdrive + - [2023-11-04 Sat] Moved emacsconf:emacsen earlier to accommodate live session, moved emacsconf:test later to accommodate travel + - [2023-10-31 Tue] Cancelled hn, added emacsconf:doc before emacsconf:emacsconf + - Moved [[emacsconf:hyperdrive][hyperdrive]] talk to general track; removed afternoon break. Changed emacsconf:solo, emacsconf:unentangling, emacsconf:ref, emacsconf:devel, emacsconf:sat-close, emacsconf:overlay, emacsconf:eval, emacsconf:repl, emacsconf:hyperdrive, and emacsconf:world, but none of the talks moved by 2 hours or more, so no extra e-mails needed for now. + - [2023-10-08 Sun] Added [[emacsconf:core]]. Moved [[emacsconf:hyperdrive]] to Sun afternoon. + - [2023-10-09 Mon] Renamed =extending= to emacsconf:world and moved it to the morning to accommodate IST. +- Saturday on the General track: Org day + misc + - emacsconf:adventure is the first talk because of availability constraints; would be nice to connect it to emacsconf:solo + - emacsconf:uni for teaching, [[emacsconf:teaching]] is also related, and emacsconf:table for grading + - emacsconf:taming and emacsconf:one both deal with exports in some way. emacsconf:unentangling would be nice to add here, but that one needs to be in the afternoon because of availability constraints. + - emacsconf:writing is connected to emacsconf:nabokov (blog posts, novel). It's also a little connected to emacsconf:one (exporting a blog). + - emacsconf:collab and emacsconf:solo are amusing to pair together. + - [[emacsconf:unentangling]] and emacsconf:ref are also Org-related. emacsconf:ref would be nice to place together with emacsconf:nabokov, but that would move emacsconf:unentangling too late. + - [[emacsconf:devel]] is not Org-related, but probably good to share with everyone. +- Saturday morning Development track: large language models, AI. Has to be morning because of emacsconf:matplotllm. emacsconf:llm is about general interfaces, so we can put that last. Could have a general LLM discussion after the talks. Can't swap it with Sunday morning because [[emacsconf:test]] should stick with [[emacsconf:hyperamp]] and emacsconf:koutline (Hyperbole talks), and the Hyperbole talks won't fit into Saturday morning +- Saturday afternoon, developer track: REPLs, misc talks + - start off with developer tweaks: emacsconf:overlay (compilation), and then emacsconf:eval and emacsconf:repl are paired together + - emacsconf:hyperdrive: adding another file protocol, using HTTP APIs + - [[emacsconf:world]] might be replays of demos + Q&A session if people are interested +- Sunday morning gen: Hyperbole (gen track, then crossing over to dev for testing) + misc talks + - Hyperbole mini-track is in the morning because of [[emacsconf:test]]'s availability constraints; emacsconf:hyperamp and emacsconf:koutline go before it. Try to avoid conflicts so they can attend each other's talks + - Sunday morning after emacsconf:test could be a fun extended "let's write tests together" session if someone wants to lead it + - emacsconf:parallel needs to go in the morning. Might be okay to include in the general talk. + - emacsconf:poltys and emacsconf:cubing aren't related to Hyperbole, but we need to fit them into the schedule somewhere. It would be nice to connect emacsconf:poltys (talking to web browsers from Emacs) to emacsconf:web (doing web stuff in Emacs instead), but emacsconf:poltys needs to be in the morning (which is pretty full) and emacsconf:web is in the afternoon because Yuchen is in Australia/Sydney. + - emacsconf:cubing can be something fun to transition to lunch, then. +- Sunday afternoon gen: misc talks, community + - emacsconf:eat is about shells and running commands, so it's generally useful + - [[emacsconf:emms]] is a user+dev talk + - community theme (emacsconf:mentor, emacsconf:hn, emacsconf:sharing), with an aside for [[emacsconf:web]] (using Emacs as a client for stuff). [[emacsconf:sharing]] is possible closing keynote - encourage people to go out and explore/share all year? If not, emacsconf:web could be good for a closing talk - encouraging people to use Emacs for more stuff. +- Sunday dev: misc dev talks + - Morning: + - emacsconf:test is related to the Hyperbole talks emacsconf:hyperamp and emacsconf:koutline, so we don't want to overlap with the Q&A for those talks + - emacsconf:flat, emacsconf:scheme, emacsconf:gc, emacsconf:flat, emacsconf:windows, emacsconf:emacsconf, emacsconf:steno + - emacsconf:emacsen is more high-level and can talk about other editors +- checking with emacsconf:web and emacsconf:hn if ~3pm Sunday afternoon (~7am Mon local time) is okay with them. It would be nice to pair it with emacsconf:hn, which is nice to connect to emacsconf:mentor and emacsconf:web. +- Thinking about the flow: + - General: Org day, then misc talks Sunday morning and part of Sunday afternoon. Ending with a focus on community and expanding Emacs. It would be nice to get people excited about connecting and sharing throughout the year. + - Dev: people who are really curious about AI can connect on + Saturday morning and keep the conversation going. Some programming + tweaks are grouped together. The rest are mostly based on + availability. +- if the talks get cancelled, we can have an open meetup possibly with + breakout rooms +- coordination notes: + - TODO emacsconf:uni, emacsconf:teaching, emacsconf:table are all about Emacs, Org Mode, and teaching + - TODO emacsconf:repl, emacsconf:eval + - emacsconf:hyperamp, emacsconf:koutline, and emacsconf:test are all in touch because they work on Hyperbole together + - emacsconf:hn and emacsconf:web + - [[emacsconf:unentangling]], [[emacsconf:taming]]? + - emacsconf:matplotllm, emacsconf:voice, emacsconf:llm (so they don't all have to define LLMs?) +- The schedule doesn't have neat aligned slots on purpose so that + organizers can jump between streams if needed, and also because we + have so many awesome talks. Somehow people managed to handle the + schedule last year. =) +- Next steps: + - Schedule: We'll e-mail the draft schedule to speakers so that they + can get a sense of where they are in the schedule, see if they + really want to make it to a conflicting session's Q&A live + (they'll have early access to the videos), etc. + - Infrastructure: + - Dust off and document infrastructure, processes + - Sort out access to media.emacsconf.org so that we can get the upload service up and running + - Draft brief intros for talks, keeping in mind that we're going to say them out loud + - Speakers will work on videos, and we can help with nudges/coordination if needed +*** DONE E-mail all the speakers a link to the draft schedule +CLOSED: [2023-10-05 Thu 15:38] +so that they can confirm that I've got their availability correctly coded and ask for any adjustments in case they really want to attend someone else's Q&A session +*** DONE Announce schedule publicly +CLOSED: [2023-11-11 Sat 08:38] SCHEDULED: <2023-10-25 Wed> +*** DONE Incorporate "About the speaker" info on the wiki pages :conforg: +CLOSED: [2023-10-13 Fri 11:04] + +Good idea to include it because that gives people (a) more context on +where a speaker is coming from, and (b) a feeling for the kinds of +backgrounds and interests people have. +*** TODO Follow up with people we haven't heard from in a while +SCHEDULED: <2023-10-18 Wed> +:PROPERTIES: +:CUSTOM_ID: radio-silence +:END: + +When do we want to do this? + +We don't have to worry too much, because we can offer them the option of doing it live, +and we can have space in the schedule if they cancel last-minute. + +** Prepare for the conference +:PROPERTIES: +:CUSTOM_ID: status +:END: + +#+BEGIN: columnview :id local :match "STATUS={.}" :format "%20ITEM %10TODO %20STATUS" +| ITEM | TODO | STATUS | +|-------------------------+------------+----------------------------------------------------------------------------------| +| Upload | DONE | Ready to go | +| Prerec | DONE | Ready to go | +| Captions | INPROGRESS | Ready to go; waiting for videos and captions | +| Backstage | DONE | Ready to go | +| Test assets | DONE | test videos generated | +| BBB | | redirects created, confirmed; next: e-mail speakers testing/checkin instructions | +| VNC | DONE | confirmed access to emacsconf-gen and emacsconf-dev | +| OBS | DONE | confirmed that gen and dev can stream | +| Icecast | DONE | gen and dev confirmed with MPV | +| MPV | DONE | confirmed that mpv can watch both streams | +| Watch page | DONE | updated for 2023 | +| Status page | DONE | ready to go | +| Public media | DONE | confirmed, set to protected so that we can test publishing live | +| Mumble | DONE | confirmed gen and dev can connect, receive audio | +| Etherpad | DONE | Ready to go, pads created | +| Pad proxy | DONE | Ready to go, pad.emacsconf.org works | +| Overlays | DONE | generated and uploaded | +| Intros | INPROGRESS | all intros recorded, should send them to speakers for review | +| IRC channels | | Not yet started | +| IRC talk info | | Not yet started | +| Announcements | | Not yet started | +| Publishing updates live | | Not yet started | +| Autopilot | | Not yet started | +| YouTube | | Not yet started | +| Peertube | | Not yet started | +| 480p | | Delegated to corwin | +| Audio processing | | Help wanted | +#+END: +*** Status + +#+begin_src emacs-lisp :results silent :exports none +(let* ((emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status)) + (emacsconf-use-absolute-url t) + (img (emacsconf-schedule-svg 800 200 (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))) + (with-temp-file "schedule.svg" + (svg-print img) + (buffer-string))) +#+end_src + +[[my-include:schedule.svg]] + +*** DONE Upload +:PROPERTIES: +:STATUS: Ready to go +:CUSTOM_ID: upload +:END: + +**** DONE Get access to media.emacsconf.org so that we can set up the upload service and the backstage area +CLOSED: [2023-10-13 Fri 10:01] SCHEDULED: <2023-10-03 Tue> +:PROPERTIES: +:CREATED: [023-09-26 Tue 10:3] +:CUSTOM_ID: check-media-emacsconf +:END: +***** DONE Decide what to do for backstage area and upload service :decision: +CLOSED: [2023-10-13 Fri 10:00] DEADLINE: <2023-10-13 Fri> +:PROPERTIES: +:CUSTOM_ID: res-or-media +:END: + +- [2023-10-13 Fri]: Got access to media.emacsconf.org, set up the backstage area + +- res.emacsconf.org + - up right away, so people can get started on captions + - more memory than media.emacsconf.org - is the upload service thrashing? +- media.emacsconf.org + - does not interfere with res streaming during the conference itself + - don't need to send people multiple e-mails, risk confusion/out-of-date info + - access to media.emacsconf.org might be sorted out by [2023-10-13 Fri] + - not in a big rush yet +*** DONE Prerec +CLOSED: [2023-10-17 Tue 09:50] +:PROPERTIES: +:CUSTOM_ID: prerec +:STATUS: Ready to go +:END: +***** Set up for the new year +As orga@res: + +- mkdir /data/emacsconf/$year +- rm ~/current +- ln -s /data/emacsconf/$year current +- ln -s /data/emacsconf/$year $year + +When we receive files + +- change the TODO status to PROCESSING +- mkdir ~/current/$slug +- copy the files to there +- rename-original $slug $file +- process-prerec $video +- Copy the files to the res:~/cache, laptop:~/proj/emacsconf/2023/cache, and media:~/backstage +- emacsconf-cache-all-video-data +- emacsconf-publish-info-pages +- emacsconf-publish-backstage-index + + +(check that the reencode.sh process has kicked off; if not, call reencode.sh $video $prefix--reencoded.webm) + +*** INPROGRESS Captions +:PROPERTIES: +:CUSTOM_ID: captions +:STATUS: Ready to go; waiting for videos and captions +:END: +- OpenAI Whisper SaaS (https://platform.openai.com/docs/guides/speech-to-text/longer-inputs) limits audio files to 25MB, so it's probably easier to do it ourselves +**** TODO E-mail previous captioning volunteers to see if they're interested in helping out +SCHEDULED: <2023-11-04 Sat> +:PROPERTIES: +:CREATED: [023-10-16 Mon 12:5] +:END: +**** DONE E-mail captioning volunteers the backstage instructions +CLOSED: [2023-10-16 Mon 12:57] +**** DONE E-mail current caption volunteers backstage information, captioning process, etc. +CLOSED: [2023-10-17 Tue 09:37] SCHEDULED: <2023-10-17 Tue> +:PROPERTIES: +:CREATED: [023-10-13 Fri 10:1] +:END: + +I'll wait a few days for Yoni to get back to us about whether he wants +to caption his own talk and/or seeing if other speakers will get their +talks in. + +=emacsconf-mail-backstage-info= + + + +Hi ${name}! + +You're getting this e-mail because you have volunteered to help out +with captions for ${conf-name} ${year}. (Thank you so much!) + +I'm so excited! =) We're starting to get recorded talks, which means +it's time to get captions going. People really appreciate the +captions, especially when the captions have been lovingly edited by +volunteers who change things like "Emax" to "Emacs" and "metaX" to +"M-x". + +Just like last year, we're using OpenAI Whisper to give us a +reasonable starting point for transcripts. If working from scratch +works better for you, you're welcome to do that too. + +We've set up ${backstage} as the backstage area where you can view the +videos and resources uploaded so far. You can access it with the +username "${backstage-user}" and the password "${backstage-password}". +Please keep the backstage password and other speakers' talk resources +secret. ${backstage-use} + +To call dibs on a video to caption, just send a message to me at +sacha@sachachua.com and I can update the page so that it's assigned to +you. You can e-mail me the edited captions when you're done. Don't +worry too much about timestamps; we can re-align the text with the +audio afterwards. If life gets suddenly busy and you can't see it all +the way through, no worries. Just e-mail me what you've got and I'll +put it back in the pool. Every little bit helps! + +Thank you! + +Sacha Chua + +**** TODO E-mail the emacsconf-org mailing list the announcement and the invitation to volunteer +**** TODO [#C] Try out Deepgram, play around with it for last-minute submissions? +**** DONE Get the autocaptions for emms up in the backstage area +CLOSED: [2023-10-13 Fri 10:08] SCHEDULED: <2023-10-08 Sun> +**** Captions lessons learned :lessons: +- OpenAI had a breaking API change, need to call =whisper.utils.get_writer= + - https://github.com/dmarx/video-killed-the-radio-star/issues/101 + #+begin_src python :eval no + vtt_writer = whisper.utils.get_writer('vtt', os.path.dirname(new_file)) + txt_writer = whisper.utils.get_writer('txt', os.path.dirname(new_file)) + vtt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None}) + txt_writer(result, work['audio'], {'max_line_width': 60, 'max_line_count': None, 'highlight_words': None}) + #+end_src + +**** Reencoding +:PROPERTIES: +:CUSTOM_ID: check-reencoding +:END: +*** DONE Backstage +:PROPERTIES: +:CUSTOM_ID: backstage +:STATUS: Ready to go +:END: +*** DONE Test assets +CLOSED: [2023-10-19 Thu 12:23] +:PROPERTIES: +:CUSTOM_ID: test +:STATUS: autopilot tested, seems to work +:END: + +[[/ssh:res:/data/emacsconf/2023/assets/test]] + +**** DONE Generate test videos +CLOSED: [2023-10-19 Thu 12:23] +**** Try autopilot + +#+begin_src emacs-lisp :eval no +(let* ((offset-seconds 60) + (start-time (time-add (current-time) offset-seconds)) + (emacsconf-schedule-validation-functions nil) + (emacsconf-schedule-default-buffer-minutes 1) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 1) + (emacsconf-schedule-strategies '(emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (schedule (emacsconf-schedule-prepare + (emacsconf-schedule-inflate-sexp + `(("GEN" + :start ,(format-time-string "%Y-%m-%d %H:%M" start-time) + :set-track "General") + (sat-open :time 1) + (adventure :time 1) ; pad Q&A + (uni :time 1) ; live Q&A + (teaching :time 1) + (table :time 1) + (taming :time 1) + (one :time 1) + (cubing :time 1) ; IRC + ("DEV" + :start + ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60)) + :set-track "Development") + (matplotllm :time 1) + (gc :time 1) ; pad + (repl :time 1) ; IRC + (voice :time 1) + (llm :time 1) + (overlay :time 1) + (eval :time 1) + (emacsconf :time 1)))))) + (emacsconf-stream-crontabs t schedule)) +#+end_src + +#+begin_src emacs-lisp :eval no +(let* ((offset-seconds 240) + (start-time (time-add (current-time) offset-seconds)) + (emacsconf-schedule-validation-functions nil) + (emacsconf-schedule-default-buffer-minutes 5) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 5) + (emacsconf-schedule-strategies + '(emacsconf-schedule-ignore-fixed + emacsconf-schedule-allocate-buffer-time + emacsconf-schedule-copy-previous-track)) + (schedule (emacsconf-schedule-prepare + (emacsconf-schedule-inflate-sexp + `(("GEN" + :start ,(format-time-string "%Y-%m-%d %H:%M" start-time) + :set-track "General") + (sat-open) + (sun-open) + ("DEV" + :start + ,(format-time-string "%Y-%m-%d %H:%M" (time-add start-time 60)) + :set-track "Development") + (emacsconf)))))) + (emacsconf-stream-crontabs nil schedule)) +#+end_src + +*** BBB +:PROPERTIES: +:CUSTOM_ID: bbb +:STATUS: redirects created, confirmed; next: e-mail speakers testing/checkin instructions +:END: + +Generate them for possibly live presentations as well? We'll see. + +**** DONE Generate redirects +CLOSED: [2023-10-17 Tue 12:55] +:PROPERTIES: +:CUSTOM_ID: generate-redirects +:Effort: 0:30 +:END: +:LOGBOOK: +CLOCK: [2023-10-17 Tue 12:46]--[2023-10-17 Tue 12:55] => 0:09 +:END: + +We use redirects for Q&A sessions with BBB web conferences so that people can easily join the web conference. + +- elisp:emacsconf-publish-bbb-static-redirects: generate static redirects +- elisp:emacsconf-publish-bbb-redirect-all + +**** DONE Generate BBB rooms +CLOSED: [2023-10-17 Tue 09:41] +:PROPERTIES: +:CUSTOM_ID: generate-bbb +:END: + +BBB name convention from last year + +ec22-sat-am-dev Abin Simon (treesitter) + +That means things change if I move to a different time or track. +Other option: + +ec23 Speaker Name (talk-ids) + + +Deleting old rooms: + +#+begin_src emacs-lisp +(spookfox-js-injection-eval-in-active-tab "[...document.querySelectorAll('.delete-room')].filter((o) => o.getAttribute('data-name').match(/ec22/))[0].click(); document.querySelector('#delete-confirm').click();" t) +#+end_src + +Creating new rooms + +#+begin_src emacs-lisp +(defun emacsconf-spookfox-create-bbb (group) + "Create a BBB room for this group of talks. +GROUP is (email . (talk talk talk)). +Needs a Spookfox connection." + (interactive (list (emacsconf-mail-complete-email-group))) + (let* ((bbb-name + (format "%s (%s) - %s%s" + (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) ", ") + (plist-get (cadr group) :speakers) + emacsconf-id + emacsconf-year)) + path + (retrieve-command (format "window.location.origin + [...document.querySelectorAll('h4.room-name-text')].find((o) => o.textContent.trim() == '%s').closest('tr').querySelector('.delete-room').getAttribute('data-path')" bbb-name)) + (create-command (format "name=\"%s\"; +console.debug(name); +console.debug(document.querySelector('#create-room-block')); +document.querySelector('#create-room-block').click(); +console.debug(document.querySelector('#create-room-name')); +document.querySelector('#create-room-name').value = name; +document.querySelector('#room_mute_on_join').click(); +document.querySelector('.create-room-button').click();" + bbb-name))) + (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t)) + (unless path + (kill-new create-command) + (dolist (cmd (split-string create-command ";")) + (spookfox-js-injection-eval-in-active-tab cmd t) + (sleep-for 2)) + (sleep-for 2) + (setq path (spookfox-js-injection-eval-in-active-tab retrieve-command t))) + (when path + (dolist (talk (cdr group)) + (save-window-excursion + (emacsconf-with-talk-heading talk + (org-entry-put (point) "ROOM" path)))) + (cons bbb-name path)))) + +(let ((groups + (emacsconf-mail-groups + (seq-filter + (lambda (o) + (and (string-match "live" (or (plist-get o :q-and-a) "")) + (not (plist-get o :bbb-room)))) + (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info)))))) + (dolist (group groups) + (emacsconf-spookfox-create-bbb group))) +#+end_src +**** DONE Possibly generate BBB rooms for live presentations? +CLOSED: [2023-12-01 Fri 14:13] SCHEDULED: <2023-11-10 Fri> +**** DONE Send testing instructions +CLOSED: [2023-12-01 Fri 14:13] SCHEDULED: <2023-11-10 Fri> +*** DONE VNC +:PROPERTIES: +:CUSTOM_ID: vnc +:STATUS: confirmed access to emacsconf-gen and emacsconf-dev +:END: + +We use VNC to connect to the X servers on res.emacsconf.org so that we can stream from it. + +Success: +- [X] Confirm that you can connect to emacsconf-gen via VNC +- [X] Confirm that you can connect to emacsconf-dev via VNC + +Setting up +- elisp:emacsconf-publish-res-index + +**** Instructions +:PROPERTIES: +:CUSTOM_ID: vnc-instructions +:END: + +NOTE: VNC+OBS doesn't work well if you have a window manager that +automatically resizes windows, like i3. Please configure your window +manager so that the VNC window is not resized. + + 1. Install a VNC viewer on your system (ex: tigervnc-viewer). + + 2. Set up your local environment: + + - gen: export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668 + - dev: export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668 + + 3. Copy the password: + + scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH_PORT + + 4. Forward your local ports and connect via VNC viewer to the + appropriate forwarded port from your laptop: + + #+begin_example + ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT & + sleep 5 # Give it time to establish the tunnels + xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK & + #+end_example + +If you get the following error: + +#+begin_example +channel 2: open failed: connect failed: Connection refused +CConn: End of stream +CConn: The connection was dropped by the server before the session could + be established. +#+end_example + +then the VNC server hasn't started yet. You can start it with + +#+begin_src sh :eval no +ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc +#+end_src + +and then connect with: + +#+begin_src sh :eval no +xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK & +#+end_src + +**** TODO Ask bandali or zaeph to share their window manager configuration :bandali:zaeph: + +*** DONE OBS +:PROPERTIES: +:CUSTOM_ID: obs +:STATUS: confirmed that gen and dev can stream +:END: + +We use OBS to stream to Icecast on live.emacsconf.org. + +Success: Confirm that you can stream +- [X] gen +- [X] dev + +New year: reprovision with + +#+begin_src sh :eval no +ansible-playbook -i inventory.yml prod-playbook.yml --tags obs +#+end_src + +so that the year is updated in the shell scripts. + +**** Instructions +:PROPERTIES: +:CUSTOM_ID: obs-instructions +:END: + +1. [[#vnc-instructions][Connect to the VNC session for the track.]] + +2. Start *recording* (not streaming). If you don't see OBS when you connect, it's probably on workspace 2, so you can switch with Alt-2. If you still don't see it there, you can open a terminal with Alt-Enter and then run ~track-obs~. After you start recording, confirm that it is now broadcasting to the stream. + +3. Verify with MPV on your local system: + + #+begin_example + mpv https://live0.emacsconf.org/$TRACK.webm & + #+end_example + +**** DONE Double-check OBS setup and streaming on res +CLOSED: [2023-10-17 Tue 10:22] +:PROPERTIES: +:CUSTOM_ID: check-streaming +:END: +*** DONE Icecast +CLOSED: [2023-10-17 Tue 10:30] +:PROPERTIES: +:CUSTOM_ID: icecast +:STATUS: gen and dev confirmed with MPV +:END: + +Success: You can use [[#obs-instructions][OBS+VNC to record]], and the results can be viewed by mpv. +- [X] Gen +- [X] Dev + +New year: reprovision with + +#+begin_src sh :eval no +ansible-playbook -i inventory.yml prod-playbook.yml --tags stream +#+end_src + +so that the year is updated in the configuration. + +This is on live.emacsconf.org and can be restarted with =/etc/init.d/emacsconf restart=. + +**** DONE Double-check icecast +CLOSED: [2023-10-17 Tue 10:30] +:PROPERTIES: +:CUSTOM_ID: check-icecast +:END: +*** DONE MPV +:PROPERTIES: +:CUSTOM_ID: mpv +:STATUS: confirmed that mpv can watch both streams +:END: +*** DONE Watch page +:PROPERTIES: +:CUSTOM_ID: watch +:STATUS: updated for 2023 +:END: + +live.emacsconf.org is on the front0.emacsconf.org server. + +To set up for the year: + +1. Create directories and update the Nginx configuration + #+begin_src sh :eval no + ansible-playbook -i inventory.yml prod-playbook.yml --tags live + #+end_src + +2. Generate the pages + #+begin_src emacs-lisp :eval no + (emacsconf-publish-watch-pages) + #+end_src + +3. Add the $year/watch to the wiki. + +4. Create a $year/watch.md manually. + +*** DONE Status page +:PROPERTIES: +:CUSTOM_ID: status +:STATUS: ready to go +:END: + +Manually maintained + +/ssh:front0.emacsconf.org:/var/www/status.emacsconf.org/index.html + +*** DONE Public media +:PROPERTIES: +:CUSTOM_ID: media +:STATUS: confirmed, set to protected so that we can test publishing live +:END: + +Start of year: + +1. Set =media_protect_root= to true in Ansible =group_vars/all.yml=. +2. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media= +3. Generate the index with =emacsconf-publish-update-media= + +Confirm by setting a submitted talk to =PLAYING= and testing with +elisp:emacsconf-publish-media-files-on-change . The public media +directory should have the files and the entry should be in the index. +Switching it back to =TO_STREAM= and calling +elisp:emacsconf-publish-media-files-on-change should remove it. + +**** TODO Switch public media to unprotected root before the conference +SCHEDULED: <2023-11-25 Sat> + +1. Clear public media directory. +2. Set =media_protect_root= to false in Ansible =group_vars/all.yml=. +3. =ansible-playbook -i inventory.yml prod-playbook.yml --tags media= + +You can generate the index with =emacsconf-publish-update-media=. + +*** DONE Mumble +:PROPERTIES: +:CUSTOM_ID: mumble +:STATUS: confirmed gen and dev can connect, receive audio +:END: + +If you see =Server connection rejected: Wrong certificate or password.=, use *Certificate Wizard* to reimport the .p12 file in that user's home directory. + +*** DONE Etherpad +:PROPERTIES: +:CUSTOM_ID: etherpad +:STATUS: Ready to go, pads created +:END: + +[[elisp:emacsconf-pad-prepopulate-all-talks]] + +**** DONE Create pads for all the talks +CLOSED: [2023-10-17 Tue 09:46] SCHEDULED: <2023-11-05 Sun> +:PROPERTIES: +:CUSTOM_ID: create-pads +:CREATED: [023-10-13 Fri 10:1] +:END: + +Because the pads refer to the next and previous talks and include the talk titles, this is best redone after the schedule has settled down. +*** DONE Pad proxy +:PROPERTIES: +:CUSTOM_ID: proxy +:STATUS: Ready to go, pad.emacsconf.org works +:END: +*** DONE Overlays +:PROPERTIES: +:CUSTOM_ID: overlays +:STATUS: generated and uploaded +:END: + +[[elisp:emacsconf-stream-generate-overlays]] + +*** INPROGRESS Intros +:PROPERTIES: +:CUSTOM_ID: intros +:STATUS: all intros recorded, should send them to speakers for review +:END: + +Intro slides + +elisp:emacsconf-stream-generate-in-between-pages +elisp:emacsconf-pad-expand-intro +[[elisp:emacsconf-subed-intro-subtitles][elisp:emacsconf-subed-intro-subtitles]] + +http://ipa-reader.xyz/ + + +**** DONE Regenerate overlays +CLOSED: [2023-10-31 Tue 10:36] +**** TODO Add all intros to the backstage so that people can review them +:LOGBOOK: +- State "DONE" from "TODO" [2023-10-31 Tue 10:34] +:END: + +**** TODO Record intro for Mike Hamrick + +Next, we have "Literate Documentation with Emacs and Org Mode", by Mike Hamrick. He will answer questions via BigBlueButton. You can join using the URL from the talk page or ask questions through Etherpad or IRC. + + +**** CANCELLED Write 1-2 sentence intros for all the talks +CLOSED: [2023-10-17 Tue 15:03] +:PROPERTIES: +:CUSTOM_ID: write-intros +:END: + +We do a brief introduction before each talk so that people know the +topic of the next talk, the pronunciation of the speaker's name, the +pronouns to use when referring to them, and the type of Q&A that will +follow. + +The template we used last year was: "In this talk, SPEAKER shares +TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A +METHOD." + +This year, we asked speakers to contribute a short introduction. These +are in conf.org in the private repository. Many of the introductions +are a little longer than the template, but we might be able to handle +that. Some need to be rewritten into third-person (using the speaker's +name/pronouns instead of I). Some might be a bit of a tongue-twister +and can be rewritten to be easier to say. + +We can store the introduction in the =INTRO_NOTE= property in +conf.org. + +Actually recording the introductions can wait until closer to the +conference because talk titles and Q&A methods can change. We can +verify speaker name pronunciations at that time. + +Hmm... Actually, we can go ahead and record all of these so that +speakers can doublecheck pronunciations, and then we'll re-record them +in case someone wants to get fancier about intros. + +***** Intros :levels: + +- Good: Use the same template as before: In this talk, SPEAKER shares + TITLE OR SUMMARY. Afterwards, PRONOUN will handle questions over Q&A + METHOD. +- Better: Include some more biographical information to give listeners some context. + + +***** DONE Do we want to use honorifics like Dr.? :decision: +CLOSED: [2023-10-03 Tue 15:38] DEADLINE: <2023-11-14 Tue> +:PROPERTIES: +:CUSTOM_ID: honorifics +:END: + +DECISION: Include in the intro-review email: +#+begin_quote +We will usually introduce you by your first name (or handle, if you +prefer to go by a pseudonym) but if you'd rather be introduced +differently (for example honorific followed by last-name, or whatever +you prefer), just let us know. +#+end_quote + +Let's see if we can decide on this by [2023-11-04 Fri] so that we can +use it when recording the intros. + +- OPTION: Consistently using names without honorifics, even if indicated in the + speaker-submitted intros (as in previous EmacsConfs) + - Equality + - votes: zaeph +- CHOSEN: Asking speakers if they want us to use any honorifics in their intro: + - Observes personal preferences + - votes: corwin, max, jc (We can also say that we prefer not to use honorifics (it's not an academic + - Corwin's suggested wording: We will usually introduce you by your first name (or handle, if you prefer to go by a pseudonym) but if you'd rather be introduced + differently (for example honorific followed by last-name, or + whatever you prefer) just let us know. + conference) but we respect people's preferences.) +- OPTION: Using honorifics based on e-mail signatures and intros: + - Recognizes credentials + +**** DONE Record intro videos with 1-2 sentence intros for all the talks +CLOSED: [2023-10-19 Thu 12:22] SCHEDULED: <2023-10-18 Wed> +:PROPERTIES: +:CUSTOM_ID: record-intros +:END: +**** DONE Record the rest of the intros +CLOSED: [2023-10-19 Thu 12:22] +:PROPERTIES: +:CREATED: [2023-10-18 Wed 09:35] +:END: +**** DONE Generate intro slides +CLOSED: [2023-10-18 Wed 09:46] +:PROPERTIES: +:CUSTOM_ID: generate-intro +:END: + +We generate intro slides to display in between talks so that people +can find out information about the previous talk and learn about the +next talk. It includes talk titles, speaker names, URLs, and Q&A +methods. The image will also be used for an introduction video if we +can record one before the conference. + +We also generate overlays that show talk information during the talk +itself. + +SVGs don't support line-wrapping, so it helps to do a quick pass to +make sure all the talks are displayed properly. + +Hmm... Maybe I should take the names and pronouns off the video +overlay? Then there's less worry about wrapping, and people can always +go to the URL to get more information. + +elisp:emacsconf-stream-generate-in-between-pages +**** TODO Ask speakers to review intros +SCHEDULED: <2023-11-10 Fri> +after they've uploaded their videos, since we might be able to check the pronunciation ourselves + +*** IRC channels +:PROPERTIES: +:CUSTOM_ID: irc +:STATUS: Not yet started +:END: + +- /opall +- /conftopic +- /deopall +**** TODO Confirm that the emacsconf user can connect +I think I had that on orga@res.emacsconf.org +*** IRC talk info +:PROPERTIES: +:CUSTOM_ID: irc-talk-info +:STATUS: Not yet started +:END: +*** Announcements +:PROPERTIES: +:CUSTOM_ID: announcements +:STATUS: Not yet started +:END: +*** Publishing updates live +:PROPERTIES: +:CUSTOM_ID: publish +:STATUS: Not yet started +:END: +*** Autopilot +:PROPERTIES: +:CUSTOM_ID: autopilot +:STATUS: Not yet started +:END: +*** YouTube +:PROPERTIES: +:CUSTOM_ID: youtube +:STATUS: Not yet started +:END: +*** Peertube +:PROPERTIES: +:CUSTOM_ID: peertube +:STATUS: Not yet started +:END: +*** 480p +:PROPERTIES: +:STATUS: Delegated to corwin +:END: + +Consider increasing memory/cpu configuration on live? + +**** TODO Figure out a better way to handle 480p stream :corwin: +:PROPERTIES: +:CUSTOM_ID: lowres +:END: + +It kept dropping last year and sachac didn't have the mental bandwidth to figure it out. +Might need another node so that we don't risk it getting killed for memory reasons? + +Corwin has volunteered to take this on +*** Audio processing +:PROPERTIES: +:CUSTOM_ID: audio-proc +:STATUS: Help wanted +:END: + +**** TODO Find volunteers for audio processing (normalization, noise reduction) and document the process :helpwanted: +:PROPERTIES: +:CUSTOM_ID: audio +:END: + +- audio normalization +- noise reduction +*** Other things people can help with +:PROPERTIES: +:CUSTOM_ID: other-help +:END: +**** TODO Video editing: the eval talk is a little bit out of sync :helpwanted: +DEADLINE: <2023-11-15 Wed> +:PROPERTIES: +:CUSTOM_ID: eval-video-sync +:END: + +The circular video inset into +https://media.emacsconf.org/2023/backstage/#eval is a little bit out +of sync with the audio. Not sure if the screenshare is offset as well. +Maybe just nudging the audio a little bit will be enough to bring +these in sync? If someone would like to fix this, that would be +awesome. + +*** TODO [#C] Write something for merging in information from previous years if not specified +:PROPERTIES: +:CUSTOM_ID: previous-years +:END: +- availability +- timezone +- name +- short name +- pronouns +** Get ready for production :preflight: +:PROPERTIES: +:CUSTOM_ID: go-live +:END: +*** A day or two before +**** DONE Update the variables +CLOSED: [2023-12-01 Fri 17:34] +[[emacsconf-ansible:group_vars/all.yml]]: + +#+begin_example +test_mode: false +media_protect_root: false +protect_stream_with_password: false +#+end_example + +#+begin_src sh :eval no +ansible-playbook -i inventory.ml prod-playbook.yml --tags stream +ansible-playbook -i inventory.ml prod-playbook.yml --tags media +#+end_src +**** DONE [#A] Test the 480p! +CLOSED: [2023-12-01 Fri 20:21] +**** DONE Resize the nodes :bandali: +CLOSED: [2023-12-01 Fri 20:21] + +2022: +- Front: 16GB +- Live: 64GB + +**** TODO Update the BigBlueButton rooms so that users are not all moderators + +#+begin_src emacs-lisp :eval no +(require 'emacsconf-spookfox) +(dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))) + (emacsconf-spookfox-update-bbb-settings + talk + '(("room_mute_on_join" . "true") + ("room_all_join_moderator" . "false") + ("room_anyone_can_start" . "true")) + )) +#+end_src +**** TODO Make sure conf.org and the publishing wiki are up to date +*** On the day of the conference +**** TODO Update the emacsconf-tracks status +** Harvest cool stuff + + + +*** Harvesting + +- download published recordings: [[defun:emacsconf-harvest-download-published-recordings]] + +*** TODO Announce that videos have been uploaded :emacsconf: +SCHEDULED: <2023-12-08 Fri> +*** When the speaker posts a video to their own channel :process: +1. Open the video. +2. Add it to the playlist. +3. Open the playlist: https://www.youtube.com/playlist?list=PLomc4HLgvuCUdrW3JkugtKv8xPelUoOyP +4. Move the video to the correct place. +5. Open the old video. +6. Remove the old video from the playlist. +7. Edit the video. Add the link to the new video in the description. +8. Select *Editor* from the left side. Add an info card and maybe an end screen pointing to the new video. +9. Update the ~YOUTUBE_URL~ property in the conf.org file. Commit and push. + +*** DONE Figure out which published presentations don't have any deskshare, so I can just upload those directly +CLOSED: [2023-12-07 Thu 14:52] +:LOGBOOK: +- State "DONE" from "TODO" [2023-12-07 Thu 14:52] +:END: + +The following talks do not have deskshares and can therefore be published by copying webcams.webm. +#+begin_src emacs-lisp +(seq-keep + (lambda (o) + (when (plist-get o :bbb-meeting-id) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (unless (and dom (dom-by-tag dom 'event)) + (plist-get o :slug))))) + (emacsconf-get-talk-info)) +#+end_src + +#+RESULTS: +:results: +(uni nabokov solo devel core parallel emms mentor web sharing llm overlay doc hyperdrive lspocaml windows) +:end: + +#+begin_src emacs-lisp +(defun emacsconf-harvest-bbb-copy-webcams-only-sessions () + "Copy the webcam-only Q&A sessions as --answers.webm in the cache directory." + (interactive) + (seq-keep + (lambda (o) + (when (and (plist-get o :bbb-meeting-id) + (file-exists-p + (expand-file-name "video/webcams.webm" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)))) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (unless + (and dom + (dom-by-tag dom 'event)) + (unless (file-exists-p (expand-file-name + (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir)) + (copy-file + (expand-file-name "video/webcams.webm" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir)) + (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir))) + (plist-get o :slug))))) + (emacsconf-get-talk-info))) +#+end_src + +#+RESULTS: +:results: +emacsconf-harvest-bbb-copy-webcams-only-sessions +:end: + +#+begin_src emacs-lisp +(emacsconf-harvest-bbb-copy-webcams-only-sessions) +#+end_src + +#+RESULTS: +:results: +(uni nabokov solo devel parallel emms mentor web sharing llm overlay doc hyperdrive lspocaml windows) +:end: + +#+begin_src emacs-lisp +(defun emacsconf-harvest-set-qa-public () + (dolist (talk (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))) + (when (emacsconf-talk-file talk "--answers.webm") + (emacsconf-with-talk-heading talk + (org-entry-put (point) "QA_PUBLIC" "1"))))) +#+end_src + +*** DONE Figure out which talks have screenshares and process them +CLOSED: [2023-12-07 Thu 14:52] +:LOGBOOK: +- State "DONE" from "TODO" [2023-12-07 Thu 14:52] +:END: + +hmm, speed is about the same on my computer? + +The following talks have deskshares and need splicing. +#+begin_src emacs-lisp +(seq-keep + (lambda (o) + (when (plist-get o :bbb-meeting-id) + (let* ((xml-file + (expand-file-name "deskshare.xml" + (expand-file-name (plist-get o :bbb-meeting-id) emacsconf-harvest-bbb-published-dir))) + (dom (and (file-exists-p xml-file) + (xml-parse-file xml-file)))) + (when (and dom (dom-by-tag dom 'event)) + (plist-get o :slug))))) + (emacsconf-get-talk-info)) +#+end_src + +#+RESULTS: +:results: +(teaching one writing sat-close hyperamp poltys sun-close voice emacsconf scheme world flat emacsen gc) +:end: + +#+begin_src emacs-lisp :results example +(emacsconf-extract-replace-strings + `((,(expand-file-name emacsconf-extract-bbb-published-dir) . "~/current/bbb-published/") + (,(expand-file-name emacsconf-cache-dir) . "~/current/cache")) + (mapconcat + (lambda (slug) + (let ((prefix (plist-get (emacsconf-resolve-talk (symbol-name slug)) :file-prefix))) + (format "if [ ! -f ~/current/cache/%s--answers--original.webm ]; then\n %s && cp ~/current/cache/%s--answers.webm ~/current/cache/%s--answers--original.webm\nfi" + prefix + (emacsconf-get-ffmpeg-to-splice-webcam-and-recording (symbol-name slug)) + prefix + prefix))) + '(teaching one writing sat-close hyperamp poltys sun-close voice scheme world flat emacsen gc) + "\n")) +#+end_src + +#+RESULTS: +:results: +if [ ! -f ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/deskshare/deskshare.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/deskshare/deskshare.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -i ~/current/bbb-published/c7af4fb02c209bbd6864301fdf26dd137916469c-1701529159289/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,121.900\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,121.900\,142.100\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[2\:v\]select\=\'between\(t\,142.100\,2483.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r2\]\;\[3\:v\]select\=\'between\(t\,2483.600\,2588.551\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r3\]\;\[r0\]\[r1\]\[r2\]\[r3\]concat\=n\=4\:v\=1\:a\=0\[v\]\;\[4\:a\]aselect\=\'between\(t\,0.000\,2588.551\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm && cp ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm ~/current/cache/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270/deskshare/deskshare.webm -i ~/current/bbb-published/62b4e0d50b581001f2d6526461e9ffb754b38371-1701534084270/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1658.966\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,1658.966\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm && cp ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm ~/current/cache/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/deskshare/deskshare.webm -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/video/webcams.webm -i ~/current/bbb-published/d3faf3bd5abcc5316e6a997b22b29d962480ad5c-1701537771543/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1484.300\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,1484.300\,1487.132\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,1487.132\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm && cp ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm ~/current/cache/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/video/webcams.webm -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/deskshare/deskshare.webm -i ~/current/bbb-published/bb384a46db00ac8a0175df0a0668c94a9992b663-1701554802497/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,137.800\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,137.800\,539.591\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,539.591\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm && cp ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm ~/current/cache/emacsconf-2023-sat-close--saturday-closing-remarks--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/deskshare/deskshare.webm -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/video/webcams.webm -i ~/current/bbb-published/b91c2833d3add0175ea8f55e9026f1ba6e744918-1701610376838/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1664.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,1664.200\,8352.632\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,8352.632\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm && cp ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm ~/current/cache/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/823df2a9c2b725271129cfe0301fcc7e631c2e63-1701617796009/deskshare/deskshare.webm -i ~/current/bbb-published/823df2a9c2b725271129cfe0301fcc7e631c2e63-1701617796009/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,2305.799\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,2305.799\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm && cp ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm ~/current/cache/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/deskshare/deskshare.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -i ~/current/bbb-published/5f07e2b967f71ad503ac367ea43866abeaad63b6-1701636099684/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,17.200\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,17.200\,7182.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[2\:v\]select\=\'between\(t\,7182.600\,7242.892\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r2\]\;\[r0\]\[r1\]\[r2\]concat\=n\=3\:v\=1\:a\=0\[v\]\;\[3\:a\]aselect\=\'between\(t\,0.000\,7242.892\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm && cp ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm ~/current/cache/emacsconf-2023-sun-close--sunday-closing-remarks--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/deskshare/deskshare.webm -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/video/webcams.webm -i ~/current/bbb-published/8ddd81ef601d78f7b9ac2093f3700a29b5595ff3-1701529315435/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,3513.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,3513.200\,4066.716\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,4066.716\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm && cp ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm ~/current/cache/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/video/webcams.webm -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/deskshare/deskshare.webm -i ~/current/bbb-published/b4a8670e0b530ee32705d58e7f7bcb5ebb49f86a-1701613648364/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,369.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,369.300\,694.230\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,694.230\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm && cp ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm ~/current/cache/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/573c5a7321e144f6cd67763c21ed7aea8f1c1497-1701617014361/deskshare/deskshare.webm -i ~/current/bbb-published/573c5a7321e144f6cd67763c21ed7aea8f1c1497-1701617014361/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,1128.799\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[r0\]concat\=n\=1\:v\=1\:a\=0\[v\]\;\[1\:a\]aselect\=\'between\(t\,0.000\,1128.799\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm && cp ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm ~/current/cache/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/deskshare/deskshare.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -i ~/current/bbb-published/865d185560bbda4ee85399dc236c6f7eb2ee635d-1701616925579/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,170.400\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,170.400\,183.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[2\:v\]select\=\'between\(t\,183.300\,583.900\)\'\,setpts\=PTS-STARTPTS\,scale\[r2\]\;\[3\:v\]select\=\'between\(t\,583.900\,690.100\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r3\]\;\[4\:v\]select\=\'between\(t\,690.100\,1074.300\)\'\,setpts\=PTS-STARTPTS\,scale\[r4\]\;\[5\:v\]select\=\'between\(t\,1074.300\,1114.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r5\]\;\[6\:v\]select\=\'between\(t\,1114.300\,1329.700\)\'\,setpts\=PTS-STARTPTS\,scale\[r6\]\;\[7\:v\]select\=\'between\(t\,1329.700\,1340.418\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r7\]\;\[r0\]\[r1\]\[r2\]\[r3\]\[r4\]\[r5\]\[r6\]\[r7\]concat\=n\=8\:v\=1\:a\=0\[v\]\;\[8\:a\]aselect\=\'between\(t\,0.000\,1340.418\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm && cp ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm ~/current/cache/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/deskshare/deskshare.webm -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/video/webcams.webm -i ~/current/bbb-published/93478b7dbe4fb34ded741ea7c8dfefa78a3ce8fd-1701620297196/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,4112.500\)\'\,setpts\=PTS-STARTPTS\,scale\[r0\]\;\[1\:v\]select\=\'between\(t\,4112.500\,4239.101\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r1\]\;\[r0\]\[r1\]concat\=n\=2\:v\=1\:a\=0\[v\]\;\[2\:a\]aselect\=\'between\(t\,0.000\,4239.101\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm && cp ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm ~/current/cache/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers--original.webm +fi +if [ ! -f ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers--original.webm ]; then + ffmpeg -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/deskshare/deskshare.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -i ~/current/bbb-published/b0f325d396963155a01854970e055fe7440abf61-1701624602181/video/webcams.webm -filter_complex \[0\:v\]select\=\'between\(t\,0.000\,149.500\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r0\]\;\[1\:v\]select\=\'between\(t\,149.500\,327.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r1\]\;\[2\:v\]select\=\'between\(t\,327.200\,418.200\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r2\]\;\[3\:v\]select\=\'between\(t\,418.200\,454.600\)\'\,setpts\=PTS-STARTPTS\,scale\[r3\]\;\[4\:v\]select\=\'between\(t\,454.600\,481.300\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r4\]\;\[5\:v\]select\=\'between\(t\,481.300\,598.200\)\'\,setpts\=PTS-STARTPTS\,scale\[r5\]\;\[6\:v\]select\=\'between\(t\,598.200\,1086.757\)\'\,setpts\=PTS-STARTPTS\,scale\=1280\:720\:force_original_aspect_ratio\=decrease\,setsar\=sar\=1\,pad\=1280\:720\:\(ow-iw\)/2\:0\+\(oh-0-ih\)/2\[r6\]\;\[r0\]\[r1\]\[r2\]\[r3\]\[r4\]\[r5\]\[r6\]concat\=n\=7\:v\=1\:a\=0\[v\]\;\[7\:a\]aselect\=\'between\(t\,0.000\,1086.757\)\'\,asetpts\=\'N/SR/TB\'\[a\] -map\:v \[v\] -map\:a \[a\] -c\:v vp8 -vsync 2 -b\:v 800k -auto-alt-ref 0 -y ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm && cp ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm ~/current/cache/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers--original.webm +fi +:end: + +*** SOMEDAY Clean up storage on media :emacsconf: +:PROPERTIES: +:CREATED: [2023-12-06 Wed 14:08] +:END: + +*** DONE Move answers to main for live talks +CLOSED: [2023-12-07 Thu 14:51] +:LOGBOOK: +- State "DONE" from "TODO" [2023-12-07 Thu 14:51] +:END: + +#+begin_src emacs-lisp :wrap verbatim +(mapconcat + (lambda (o) + (and (null + (file-exists-p + (expand-file-name (concat (plist-get o :file-prefix) "--main.webm") + emacsconf-cache-dir))) + (file-exists-p + (expand-file-name (concat (plist-get o :file-prefix) "--answers.webm") + emacsconf-cache-dir)) + (format "cp %s %s; ../rm-from-cache %s\n" + (concat (plist-get o :file-prefix) "--answers.webm") + (concat (plist-get o :file-prefix) "--main.webm") + (concat (plist-get o :file-prefix) "--answers.webm") + ))) + (emacsconf-get-talk-info) + "") +#+end_src + +#+RESULTS: +#+begin_verbatim +cp emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm emacsconf-2023-sat-close--saturday-closing-remarks--main.webm; ../rm-from-cache emacsconf-2023-sat-close--saturday-closing-remarks--answers.webm +cp emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm; ../rm-from-cache emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--answers.webm +cp emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm; ../rm-from-cache emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--answers.webm +cp emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm emacsconf-2023-sun-close--sunday-closing-remarks--main.webm; ../rm-from-cache emacsconf-2023-sun-close--sunday-closing-remarks--answers.webm +cp emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm; ../rm-from-cache emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--answers.webm +cp emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.webm emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm; ../rm-from-cache emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.webm +#+end_verbatim +** Make things easier for next year +*** TODO [#C] Figure out better space usage for backstage vs public on media.emacsconf.org :emacsconf: + +Maybe I can use hard links or symbolic links? + +*** TODO Update the makefile :emacsconf: +** Volunteers +:PROPERTIES: +:CUSTOM_ID: coordinate-volunteers +:STATUS: Need to coordinate people +:END: +*** DONE E-mail the list asking people to sign up +CLOSED: [2023-10-31 Tue 11:12] SCHEDULED: <2023-10-31 Tue> + +Hi everyone! + +EmacsConf is coming up soon! Here are some roles we need help with +during the conference: + +- Check-in (can handle both tracks): + - Keep an eye out for speakers on IRC and in the BigBlueButton room + - Give the speaker moderator permissions + - https://emacsconf.org/2023/volunteer/checkin/ +- Host (one for each track): + - Read out questions (and ask some of their own while waiting for questions to come in) + - Remind people how to join + - Keep the speaker company + - Moderate the Q&A sessions as needed + - Let us know when you want the Q&A session to be opened up to everyone + - https://emacsconf.org/2023/volunteer/host/ +- Streamer (one for each track): + - Manage what happens on the screen + - Listen to the audio volume on the stream and adjust as needed, especially for BigBlueButton rooms + - https://emacsconf.org/2023/volunteer/stream/ +- Internet Relay Chat scribe (one for each track): + - Check the IRC channel for questions and answers and copy them to the talk's Etherpad + - https://emacsconf.org/2023/volunteer/irc/ +- Pad scribe (one for each track): + - Add notes, questions, and answers to the talk's Etherpad + - https://emacsconf.org/2023/volunteer/pad/ +- Other things you might be interested in helping out with - feel free to suggest! + +If you let us know which role(s) you're interested in, the track(s) +you're interested in (general / development) and your availability for +the conference (ex: Sat AM, Sat PM, Sun AM, Sun PM, or more granular +as needed), I can make a shift schedule. + +If you're new to the role and have questions, we can help you get +started via e-mail or set up a training meeting. Let me know what you +want to know and what times what might work for you. + +We can also set up a dry run in a couple of weeks so that people can +try working together. Please let me know your availability for maybe +Nov 11 or Nov 18 for a dry run. + +Looking forward to a nice smooth EmacsConf! + +Sacha + +*** TODO Prepare shift calendar, ask people to sign up +SCHEDULED: <2023-11-01 Wed> +:PROPERTIES: +:CUSTOM_ID: shifts +:END: + +#+BEGIN_EXPORT md +<a name="shifts"></a> +#+END_EXPORT + +AM: 9-12 PM EST, PM: 1-5 PM EST (plus a little extra for setup/transition) + +Saturday Dec 2 2023 + +#+NAME: saturday-shifts +| | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord | +|--------+---------+----------+------------+-----+-----+--------| +| Gen AM | zaeph | sachac | FlowyCoder | | | sachac | +| Gen PM | zaph | sachac | FlowyCoder | | | sachac | +| Dev AM | bandali | sachac | FlowyCoder | | | sachac | +| Dev PM | bandali | sachac | FlowyCoder | | | sachac | + +Sunday Dec 3 2023 + +#+NAME: sunday-shifts +| | [[https://emacsconf.org/2023/volunteer/host/][Host]] | Streamer | [[https://emacsconf.org/2023/volunteer/checkin/][Checkin]] | [[https://emacsconf.org/2023/volunteer/irc/][IRC]] | [[https://emacsconf.org/2023/volunteer/pad/][Pad]] | Coord | +|--------+---------+----------+------------+-----+-----+--------| +| Gen AM | zaeph | sachac | FlowyCoder | | | sachac | +| Gen PM | zaeph | sachac | FlowyCoder | | | sachac | +| Dev AM | bandali | sachac | FlowyCoder | | | sachac | +| Dev PM | bandali | sachac | FlowyCoder | | | sachac | + +Backups: +- dev host/streamer: +- gen host/streamer: +- checkin, IRC, pad: + +Interested in a shift? Please e-mail [[mailto:emacsconf-org-private@gnu.org]] and we'll help you figure out what you need to learn. + +#+begin_src emacs-lisp :var sat=saturday-shifts :var sun=sunday-shifts :rownames no :colnames no :results verbatim replace +`(setq emacsconf-shifts + (list + ,@(apply #'append + (mapcar + (lambda (day) + (let ((headers + (mapcar + (lambda (field) + (intern + (concat + ":" + (downcase + (if (string-match org-link-bracket-re field) + (match-string 2 field) + field))))) + (cdr (car (cadr day)))))) + (mapcar + (lambda (row) + (apply #'append + (list 'list :id + (when (string-match "^\\([^ ]+\\) \\(AM\\|PM\\)" (car row)) + (format "%s-%s-%s" + (car day) + (downcase (match-string 2 (car row))) + (downcase (match-string 1 (car row))))) + :track + (if (string-match "^Gen" (car row)) "General" "Development") + :start + (format "%sT%s:00:00%s" + (elt day 2) + (if (string-match "AM" (car row)) "08" "13") + emacsconf-timezone-offset) + :end + (format "%sT%s:00:00%s" + (elt day 2) + (if (string-match "AM" (car row)) "12" "18") + emacsconf-timezone-offset)) + (seq-map-indexed + (lambda (value index) + (unless (string= value "") + (list (elt headers index) value))) + (cdr row)))) + (cdr (cadr day))) + )) + (list + (list "sat" sat "2023-12-02") + (list "sun" sun "2023-12-03")))))) + +#+end_src + +#+RESULTS: +:results: +(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "zaph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac"))) +:end: + +*** DONE Document volunteer roles +CLOSED: [2023-09-26 Tue 11:07] +:PROPERTIES: +:CUSTOM_ID: document-volunteer-roles +:END: +Copied it over from the previous year +** Lessons learned +- Make sure timezones are on anything that has time (schedule page, watch pages, etc.) +- Remember to publish the icals and schedule org files: ~emacsconf-update-schedule~. Added to the schedule-details.md. +- For really late submissions, make sure you also create the pad (~emacsconf-pad-prepopulate-talk-pad~) and the BBB room (~emacsconf-spookfox-create-bbb~). +- We need to move off the current bbb.emacsverse.org or discuss the future of the current BBB VM. +- Next year, it might be nice to use the intros and generate title slides in order to add them to the videos. +- Make recording more prominent for speakers and participants + - Add check-in step to remind speakers about recording and oops + - Send thanks e-mail when BigBlueButton recordings are available, remind people about oops + - Set up backstage for post-conference work + - Add recording reminder to BigBlueButton welcome text chat message + - Consider turning off recording when the host goes off-stream? Bring it up for discussion. + - Trim to host leaving by default, and then add the other stuff as offstream chat + +* Progress reports +:PROPERTIES: +:CUSTOM_ID: progress +:END: +- https://emacsconf.org/blog/2023-08-14-cfp-progress/ +- https://emacsconf.org/blog/2023-09-25-draft-schedule +* E-mail templates +:PROPERTIES: +:CUSTOM_ID: templates +:END: +** Review +:PROPERTIES: +:CUSTOM_ID: review +:END: +*** Template +:PROPERTIES: +:EMAIL_ID: review +:CUSTOM_ID: review-template +:END: + +Thanks for submitting your proposal! (ZZZ: feedback) We're experimenting +with early acceptance this year, so we'll wait a week in case the +other volunteers want to chime in regarding your talk. =) + +** Acceptance +:PROPERTIES: +:CUSTOM_ID: acceptance +:END: +*** Function +:PROPERTIES: +:CUSTOM_ID: acceptance-func +:END: +#+begin_src emacs-lisp +(defun emacsconf-mail-accept-talk (talk &optional template) + (interactive (list (emacsconf-complete-talk-info))) + (emacsconf-mail-prepare + (or template (emacsconf-mail-merge-get-template "acceptance")) + (plist-get talk :email) + (list + :title (plist-get talk :title) + :email (plist-get talk :email) + :time (plist-get talk :time) + :conf-name emacsconf-name + :speakers-short (plist-get talk :speakers-short) + :url (concat emacsconf-base-url (plist-get talk :url)) + :video-target-date emacsconf-video-target-date + :year emacsconf-year))) +#+end_src +*** Template +:PROPERTIES: +:EMAIL_ID: acceptance +:TO: ${email} +:REPLY_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com +:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}, sacha@sachachua.com +:CC: emacsconf-submit@gnu.org +:LOG_NOTE: accepted talk +:SUBJECT: ${conf-name} ${year} acceptance: ${title} +:FUNCTION: emacsconf-mail-accept-talk +:CUSTOM_ID: acceptance-template +:END: + +Hi, ${speakers-short}! + +Looks like all systems are a go for your talk. =) Thanks for proposing +it! Your talk page is now at ${url} . Please feel free to update it or +e-mail us if you'd like help with any changes. + +If you want to get started on your talk early, we have some +instructions at https://emacsconf.org/${year}/prepare/ that might help. +We strongly encourage speakers to prepare a talk video by +${video-target-date} in order to reduce technical risks and make +things flow more smoothly. Plus, we might be able to get it captioned +by volunteers, just like the talks last year. We'll save ${time} minutes +for your talk, not including time for Q&A. Don't sweat it if +you're a few minutes over or under. If it looks like a much shorter or +longer talk once you start getting into it, let us know and we might +be able to adjust. + +I'll follow up with the specific schedule for your talk once things +settle down. In the meantime, please let us know if you have any +questions or if there's anything we can do to help out! + +Sacha + +* Archive +:PROPERTIES: +:CUSTOM_ID: archive +:END: + +** DONE Check with hyperdrive and core if they're willing to swap :decision: +DEADLINE: <2023-10-25 Wed> +:PROPERTIES: +:CUSTOM_ID: hyperdrive-core +:END: + +DONE [2023-10-08 Sun]: hyperdrive on Sunday afternoon, will keep an eye out for openings on general track and call it out in the opening remarks so people know that it's a general talk. + +If Stefan Kangas puts together [[emacsconf:core][Emacs core development: how it works]] +speaking as a new Emacs maintainer, that might be a good general +closing talk on the first day because it can encourage people to help +with Emacs development. We don't have a lot of space on the General +track, but if we move [[emacsconf:hyperdrive][hyperdrive.el: Peer-to-peer filesystem in Emacs]] +to the other track, then there's enough space. + +It might also be a good idea to move [[emacsconf:devel]] earlier than +[[emacsconf:unentangling]] in case John Wiegley can have a live Q&A +session (he might be travelling at that time, so it's unsure), so that +there's more time for people to ask emacs-devel highlight questions +and so that John Wiegley and Stefan Kangas can attend each other's +Q&A. + +Joseph Turner wanted to make sure that people don't assume the +[[emacsconf:hyperdrive]] talk is too technical for them. We can rename the +tracks (Track A and Track B)? if that helps, so that people don't +think the other track is exclusively for more technical things. + +Thoughts? +*** Option A: Here's the schedule with emacsconf:hyperdrive in the second track and emacsconf:core in the first track. +:PROPERTIES: +:CUSTOM_ID: core-a +:END: + +#+begin_src emacs-lisp :var filename="emacsconf-hyperdrive-core-swap.svg" :results replace :exports results +(emacsconf-schedule-test + filename + (emacsconf-time-constraints '()) + (arranged + (emacsconf-schedule-inflate-sexp + '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00") + sat-open + adventure + uni + teaching + table + taming + one + (lunch :start "12:00") + writing + nabokov + collab + solo + ref + (devel :track "General") + unentangling + (core :track "General") + (sat-close) + ("DEV Saturday, Dec 2" :start "2023-12-02 10:00") + (matplotllm :track "Development") + (voice :track "Development") + (llm :track "Development") + (lunch :start "12:00") + (overlay) + (eval) + (repl) + (world :track "Development") + (hyperdrive :track "Development") + ("GEN Sunday, Dec 3" :start "2023-12-03 09:00") + sun-open + hyperamp + koutline + (parallel :track "General") + eat + poltys + cubing + (lunch :start "12:00") + (emms :track "General") + (steno :track "General") + mentor + break + (hn :start "15:00") + web + sharing + sun-close + ("DEV Sunday, Dec 3" :start "2023-12-03 10:00") + scheme + test + (flat :track "Development") + (lunch :start "12:00") + gc + lspocaml + (windows :track "Development") + (emacsconf :track "Development") + (emacsen :track "Development") + ))) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-schedule-default-buffer-minutes 10) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15) + (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status)) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates)) + (emacsconf-schedule-strategies + '(emacsconf-schedule-allocate-buffer-time))) +#+end_src + +#+RESULTS: +:results: +- world: Ends at 15:30 after 11:30 +:end: + + +[[my-include:emacsconf-hyperdrive-core-swap.svg?wrap=export html]] + +*** Option B: Keep emacsconf:hyperdrive on the first track, and group emacsconf:devel and emacsconf:core on the second track. + +We can encourage people to check out the different tracks in the opening remarks. + +#+begin_src emacs-lisp :var filename="emacsconf-hyperdrive-core-swap-b.svg" :results replace :exports results +(emacsconf-schedule-test + filename + (emacsconf-time-constraints '()) + (arranged + (emacsconf-schedule-inflate-sexp + '(("GEN Saturday, Dec 2" :start "2023-12-02 09:00") + sat-open + adventure + uni + teaching + table + taming + one + (lunch :start "12:00") + writing + nabokov + collab + solo + ref + unentangling + (hyperdrive) + (sat-close :start "16:40") + ("DEV Saturday, Dec 2" :start "2023-12-02 10:00") + (matplotllm :track "Development") + (voice :track "Development") + (llm :track "Development") + (lunch :start "12:00") + (overlay) + (eval) + (repl) + (world :track "Development") + (devel :track "Development") + (core :track "Development") + ("GEN Sunday, Dec 3" :start "2023-12-03 09:00") + sun-open + hyperamp + koutline + (parallel :track "General") + eat + poltys + cubing + (lunch :start "12:00") + (emms :track "General") + (steno :track "General") + mentor + break + (hn :start "15:00") + web + sharing + sun-close + ("DEV Sunday, Dec 3" :start "2023-12-03 10:00") + scheme + test + (flat :track "Development") + (lunch :start "12:00") + gc + lspocaml + (windows :track "Development") + (emacsconf :track "Development") + (emacsen :track "Development") + ))) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-schedule-default-buffer-minutes 10) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 15) + (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status)) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates)) + (emacsconf-schedule-strategies + '(emacsconf-schedule-allocate-buffer-time))) +#+end_src + +#+RESULTS: +:results: +- world: Ends at 14:55 after 11:30 +:end: + +[[my-include:emacsconf-hyperdrive-core-swap-b.svg?wrap=export html]] +*** Other ideas? + +Feel free to suggest something! + +Notes: + +- emacsconf:sharing is nice to pair with emacsconf:mentor and emacsconf:hn and might be a good general-audience keynote-type thing as well. I don't want to schedule emacsconf:core to compete with it. + + +** DONE Test the idea of three tracks and more aligned times :decision: +CLOSED: [2023-10-03 Tue 15:35] DEADLINE: <2023-10-13 Fri> +:PROPERTIES: +:CUSTOM_ID: three-tracks +:END: + +Decision: We'll stick with the two-track schedule for now because it's +more likely, and we'll adjust as we get closer to the conference +depending on speaker submissions and on volunteer availability. + +Note: Let's see if we can decide on this by [2023-10-13 Fri] so that we can +e-mail the draft schedules to people. + +Compared to [[#draft-schedule][two-track schedule]]: +#+INCLUDE: schedule.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html + +What if we have three tracks instead? + +- Two-track advantages as in EmacsConf 2022: + - Fewer volunteers needed (host, IRC, pad) + - Can do with existing computing power (instead of spinning up another node for VNC+OBS) + - Less fear of missing out for participants + - votes: zaeph +- Three-track advantages: + - More space between talks for streaming the Q&A + - Easier to explain the schedule + - More logical grouping + - Ends earlier, which is easier for participants from Europe + - votes: max (Three tracks is the best policy if you’re more than 75% sure that you can round up the volunteers) +- [[#three-tracks-sun-am][Three tracks just for Sunday morning]]: + - Allows us to have 20 minutes between talks instead of 15 + - Might be easier to test the idea for just one part of the conference + +#+begin_src emacs-lisp :results value replace :exports results :var filename="schedule-option-aligned-talks.svg" :eval never-export +(emacsconf-schedule-test + filename + (emacsconf-schedule-tracks + '((:label "Saturday" + :start "2023-12-02 9:00" + :end "2023-12-02 18:00" + :tracks ("A" "B" "C")) + (:label "Sunday" + :start "2023-12-03 9:00" + :end "2023-12-03 18:00" + :tracks ("A" "B" "C")))) + (emacsconf-time-constraints '()) + (emacsconf-tracks + '((:name "A" :id "a") + (:name "B" :id "b") + (:name "C" :id "c"))) + (arranged + (emacsconf-schedule-inflate-sexp + '(("A Saturday, Dec 2" :start "2023-12-02 09:00" :track "A") + (sat-open) + adventure + (uni :start "9:40") + (table :start "10:30") + (teaching :start "11:15") + (lunch :start "12:00" :time 60) + collab + (solo :start nil) + (hn :start "15:00") + (web :start nil) + sat-close + ("B Saturday, Dec 2" :start "2023-12-02 09:40" :track "B") + (one :start nil) + (poltys :start "10:30") + (taming :start "11:15") + (lunch :start "12:00" :time 60) + writing + (nabokov :start "13:40") + (steno :start "14:20") + (emacsen :start "15:30") + ("C Saturday, Dec 2" :start "2023-12-02 9:40" :track "C") + (matplotllm) + (voice :start "10:30") + (llm :start "11:15") + (lunch :start "12:00" :time 60) + overlay + eval + (repl :start "14:20") + (emacsconf :start "15:30") + ("A Sunday, Dec 3" :start "2023-12-03 09:00" :track "A") + (sun-open :time 10) + hyperamp + (koutline :start "10:00") + (test :start "11:00") + (lunch :start "12:00" :time 60) + (emms :start nil) + (devel :start "14:00") + (mentor :start nil) + (sharing :start "15:00") + (sun-close :start "16:00") + ("B Sunday, Dec 3" :start "2023-12-03 09:10" :track "B") + (parallel :start "10:00") + (eat :start "10:30") + + (gc :start "11:00") + (lunch :start "12:00" :time 60) + hyperdrive + (ref :start "14:00") + (unentangling :start "15:00") + ("C Sunday, Dec 3" :start "2023-12-03 09:10" :track "C") + + (scheme :start "10:00") + (lspocaml :start "11:00") + (flat :start "11:30") + + (lunch :start "12:00" :time 60) + (windows :start nil) + (cubing :start "14:00") + (extending :start "15:00") + + + ))) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-schedule-default-buffer-minutes 20) + (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status)) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates)) + (emacsconf-schedule-strategies + '(emacsconf-schedule-copy-previous-track emacsconf-schedule-allocate-buffer-time))) +#+end_src + +#+RESULTS: +:results: +:end: + +#+begin_comment +[[file:schedule-option-aligned-talks.svg]] +#+end_comment + +#+INCLUDE: schedule-option-aligned-talks.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html +*** Three tracks for Sunday morning? +:PROPERTIES: +:CUSTOM_ID: three-tracks-sun-am +:END: + + + +#+begin_src emacs-lisp :results value replace :exports results :var filename="schedule-option-sun-am.svg" :eval never-export +(emacsconf-schedule-test + filename + (emacsconf-schedule-tracks + '((:label "Saturday" + :start "2023-12-02 9:00" + :end "2023-12-02 18:00" + :tracks ("A" "B" "C")) + (:label "Sunday" + :start "2023-12-03 9:00" + :end "2023-12-03 18:00" + :tracks ("A" "B" "C")))) + (emacsconf-time-constraints '()) + (emacsconf-tracks + '((:name "A" :id "a") + (:name "B" :id "b") + (:name "C" :id "c"))) + (arranged + (emacsconf-schedule-inflate-sexp + '(("A Saturday, Dec 2" :start "2023-12-02 09:00" :track "A") + sat-open + adventure + uni + table + teaching + writing + (lunch :start "12:00") + nabokov + collab + solo + unentangling + ref + (devel) + (sat-close) + ("DEV Saturday, Dec 2" :start "2023-12-02 10:00" :track "B") + (matplotllm) + (voice) + (llm) + (lunch :start "12:00") + (overlay) + (eval) + (repl :start "14:00") + (hyperdrive) + (world) + ("GEN Sunday, Dec 3" :start "2023-12-03 09:00" :track "A") + sun-open + hyperamp + koutline + one + cubing + (lunch :start "12:00" :time 60) + (emms) + taming + mentor + (hn :start "15:00") + web + sharing + sun-close + ("DEV Sunday, Dec 3" :start "2023-12-03 10:00" :track "B") + scheme + eat + (flat) + lspocaml + (lunch :start "12:15" :time "45") + gc + (steno) + (windows) + (emacsen) + (emacsconf) + ("C Sunday Dec 3" :start "2023-12-03 10:00" :track "C") + poltys + (parallel) + test + ))) + (emacsconf-schedule-break-time 10) + (emacsconf-schedule-lunch-time 60) + (emacsconf-schedule-default-buffer-minutes 20) + (emacsconf-schedule-svg-modify-functions '(emacsconf-schedule-svg-color-by-status)) + (emacsconf-schedule-default-buffer-minutes-for-live-q-and-a 20) + (emacsconf-schedule-validation-functions + '(emacsconf-schedule-validate-time-constraints + ;; emacsconf-schedule-validate-live-q-and-a-sessions-are-staggered + emacsconf-schedule-validate-all-talks-present + emacsconf-schedule-validate-no-duplicates)) + (emacsconf-schedule-strategies + '(emacsconf-schedule-copy-previous-track emacsconf-schedule-allocate-buffer-time))) +#+end_src + +#+RESULTS: +:results: +- unentangling: Starts at 14:35 before 15:00 +- world: Ends at 16:20 after 11:30 +- Missing talks: core +:end: + +#+begin_comment +[[file:schedule-option-sun-am.svg]] +#+end_comment + +#+INCLUDE: schedule-option-sun-am.svg export EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT EXPORT html diff --git a/2023/organizers-notebook/schedule-option-aligned-talks.svg b/2023/organizers-notebook/schedule-option-aligned-talks.svg new file mode 100644 index 00000000..f7a1de0f --- /dev/null +++ b/2023/organizers-notebook/schedule-option-aligned-talks.svg @@ -0,0 +1 @@ +<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(13,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(28,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:40-10:00 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="62" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(91,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:30-10:40 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="141" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 11:15-11:35 Teaching computer and data science with literate programming tools</title> <rect x="211" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(240,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:00- 1:20 Collaborative data processing and documenting using org-babel</title> <rect x="376" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(405,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/woof" title="Watch Over Our Folders" data-slug="woof"> <title> 1:40- 2:00 Watch Over Our Folders</title> <rect x="439" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="lightgray"></rect> <g transform="translate(468,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> woof</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(530,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/hn" title="The many ways to browse Hacker News from Emacs" data-slug="hn"> <title> 3:00- 3:10 The many ways to browse Hacker News from Emacs</title> <rect x="564" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(577,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hn</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web" data-slug="web"> <title> 3:30- 4:10 Emacs saves the Web</title> <rect x="611" y="15" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(671,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:30- 4:40 Saturday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(718,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 9:40-10:00 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="62" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(91,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 10:30-10:50 The browser in a buffer</title> <rect x="141" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(170,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/taming" title="Taming things with Org Mode" data-slug="taming"> <title> 11:15-11:25 Taming things with Org Mode</title> <rect x="211" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(224,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> taming</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(389,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:40- 1:50 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="439" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(452,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/steno" title="Programming at 200 wpm" data-slug="steno"> <title> 2:20- 2:50 Programming at 200 wpm</title> <rect x="501" y="71" opacity="0.8" width="47" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(546,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 3:30- 3:50 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="611" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(640,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 9:40- 9:50 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="62" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(75,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Improving access to AI-assisted literate programming with voice control" data-slug="voice"> <title> 10:30-10:50 Improving access to AI-assisted literate programming with voice control</title> <rect x="141" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(170,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 11:15-11:35 LLM clients in Emacs, functionality and standardization</title> <rect x="211" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(240,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with Overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with Overlays</title> <rect x="376" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(405,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:40- 1:50 Editor Integrated REPL Driven Development for all languages</title> <rect x="439" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(452,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:20- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="501" y="127" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(561,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 3:30- 3:50 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="611" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(640,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 9:00- 9:10 Sunday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(13,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:10- 9:30 Top 10 ways Hyperbole amps up Emacs</title> <rect x="15" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(44,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 10:00-10:20 Using Koutline for stream of thought journaling</title> <rect x="94" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(123,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 11:00-11:20 What I learned by writing test cases for GNU Hyperbole</title> <rect x="188" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 2:00- 2:10 Emacs development updates</title> <rect x="470" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(483,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:30- 2:40 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="517" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(530,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:00- 3:20 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="564" y="15" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:00- 4:10 Sunday closing remarks</title> <rect x="658" y="15" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="green"></rect> <g transform="translate(671,69)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/parallel" title="Parallel Text Replacement: Does P = NP?" data-slug="parallel"> <title> 10:00-10:10 Parallel Text Replacement: Does P = NP?</title> <rect x="94" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(107,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:30-10:40 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="141" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(154,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 11:00-11:20 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="188" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:00- 1:40 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="376" y="71" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:00- 2:20 Org-Mode workflow: informal reference tracking</title> <rect x="470" y="71" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(499,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:00- 3:10 (Un)entangling projects and repos</title> <rect x="564" y="71" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(577,125)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(123,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 11:00-11:10 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="188" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(201,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:30-11:40 A modern Emacs look-and-feel without pain</title> <rect x="235" y="127" opacity="0.8" width="15" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(248,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 1:00- 1:40 Windows into Freedom</title> <rect x="376" y="127" opacity="0.8" width="62" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(436,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 2:00- 2:20 Speedcubing in Emacs</title> <rect x="470" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(499,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/extending" title="GNU Emacs for electronics, note-taking, and as lightweight IDE" data-slug="extending"> <title> 3:00- 3:20 GNU Emacs for electronics, note-taking, and as lightweight IDE</title> <rect x="564" y="127" opacity="0.8" width="31" height="55" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(593,181)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> extending</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
\ No newline at end of file diff --git a/2023/organizers-notebook/schedule-option-sun-am.svg b/2023/organizers-notebook/schedule-option-sun-am.svg new file mode 100644 index 00000000..e5f85d7b --- /dev/null +++ b/2023/organizers-notebook/schedule-option-sun-am.svg @@ -0,0 +1 @@ +<svg width="800" height="400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,200)"> <title> Schedule for Sunday</title> <rect width="800" height="200" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="170"></line> <text fill="black" x="0" y="183" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
\ No newline at end of file diff --git a/2023/organizers-notebook/schedule.svg b/2023/organizers-notebook/schedule.svg new file mode 100644 index 00000000..f07cd7ad --- /dev/null +++ b/2023/organizers-notebook/schedule.svg @@ -0,0 +1 @@ +<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="palegoldenrod"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:59- 9:04 Sunday opening remarks</title> <rect x="-2" y="15" opacity="0.8" width="7" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="gray"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="lightblue"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="gray"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="palegoldenrod"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="lightblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
\ No newline at end of file diff --git a/2023/planning.md b/2023/planning.md new file mode 100644 index 00000000..1cff7c49 --- /dev/null +++ b/2023/planning.md @@ -0,0 +1,26 @@ +[[!meta title="Planning"]] +[[!meta copyright="Copyright © 2020, 2021, 2022, 2023 Amin Bandali"]] + +Most of the EmacsConf organizers and other volunteers hang out in the +`#emacsconf` IRC channel on `irc.libera.chat`. If you would like to +get involved, come by our `#emacsconf` channel and say hi! + +Besides IRC, the [emacsconf-org][emacsconf-org] public mailing list is +the main medium of communication for the EmacsConf organizers. + +You can find most of the backstage notes in the +[[organizers' notebook|organizers-notebook]]. + +You might find it useful to also look at the plans and notes from +previous years: + +- 2022: [[planning|2022/planning]], + [[organizers' notebook|2022/organizers-notebook]] +- 2021: [[planning|2021/planning]], + [[organizers' notebook|2021/organizers-notebook]] +- 2020: [[planning|2020/planning]], + [[organizers' notebook|2020/organizers-notebook]] +- 2019: [[planning|2019/planning]], + [[organizers' notebook|2019/organizers-notebook]] + +[emacsconf-org]: https://lists.gnu.org/mailman/listinfo/emacsconf-org diff --git a/2023/prepare.md b/2023/prepare.md new file mode 100644 index 00000000..7638933e --- /dev/null +++ b/2023/prepare.md @@ -0,0 +1,262 @@ +[[!meta title="Preparing your talk"]] +[[!meta copyright="Copyright © 2019, 2020 Amin Bandali; 2021, 2022 Amin Bandali, Sacha Chua, Leo Vivier; 2023 Sacha Chua"]] + +This page contains tips for preparing your talk. (Target date: +**November 4**) If you have any questions, concerns, or suggestions +please feel free to write to one our organizational mailing lists: the +public <emacsconf-org@gnu.org> list, or the private +<emacsconf-org-private@gnu.org> list, depending on the nature of the +matter you would like to discuss. + +Note: being part of a wiki, this page is subject to change (including +by you!); so please check back every now and again for any changes and +updates. + +We'll bring up the web-based upload service at some point. Let us know +at <emacsconf-org-private@gnu.org> if you're already ready to go! +<!--[[Already done? Upload your video and other files|upload]]--> + +## Guidelines for conduct + +Please review our [[guidelines for conduct|conduct]] when preparing your +talk to make sure we’re all on the same page and strive to make the +event a great experience for all. If you’re not sure whether your talk +or presentation style meets the guidelines laid out in the guidelines +for conduct, we’d be happy to help. You can email Sacha Chua at +<sacha@sachachua.com> to chat more about this. + +## Recording your talk + +To help EmacsConf 2023 run smoothly, please prerecord your talk, and +plan to upload your video(s) by **November 4** to allow us enough time +to do any needed processing (e.g. format or codec conversion) in +preparation for the event. Please consider submitting a prerecording as +early as possible so that we can see if volunteers can caption your +video to make it more accessible and searchable. + +To make it easier for organizers and attendees to correctly pronounce +your name, please start your video with something along the lines of: + +"Hi! I’m ${NAME} and I’ll be talking about ${TOPIC}." + +### Tools + +To record your video, you could use any of the following pieces of +free software, depending on your needs: + +- [OBS](//obsproject.com) +- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/) +- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html) +- [peek](//github.com/phw/peek) +- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop) + +If you decide to use OBS, please make sure to verify the window-capture +options. Most notably, there is a “Swap red and blue” option that is +necessary for some setups, and it's easy to miss it. + +You might find the following free software programs useful for editing +your video recordings: + +- [Kdenlive](//kdenlive.org/en/) +- [Blender](//www.blender.org) +- [Pitivi](http://www.pitivi.org) + +Per GNU Project’s [Guide to +Formats](//audio-video.gnu.org/docs/formatguide.html), we prefer to +receive prerecorded videos in formats unencumbered by software patents, +such as `video/webm` ([WebM](https://www.webmproject.org/)-encoded video +files, with `.webm` file extension) and `video/ogg` (video files encoded +with the Theora video codec, encapsulated in an Ogg transport layer, +with `.ogg` or `.ogv` file extension). However, if for one reason or +another you are unable to send us your prerecorded video in one of the +above formats, you may submit them in other common formats, like MPEG-4 +(`.mp4`), and we will convert them to our preferred formats on your +behalf. + +*Prepare recorded video in 720p (1280px by 720px) or higher, in the +WebM format if possible.* + +### Audio quality + +Audio quality can go a long way in making your talk enjoyable to +watch. Consider the background noise in the room that you are using to +record, and see if you can temporarily turn off things for your +recording. Start by recording a separate video with at least **5 +seconds of quiet** in the same room in which you plan to do your main +recording. You can listen to it to see how quiet things are, and +figure out if there are other things you can turn off such as fans or +other computers. When you upload your talk, you can also include your +latest silence recording so that we can use it to reduce noise in your +video. + +If you have an **external microphone or a headset**, try +recording the audio through that so that you can reduce the sound of +the computer itself. If you have a smartphone, that might also be a +good way to record audio that you can then combine with your video +afterwards. Some people find that draping a blanket over their head +(including the microphone under the blanket) can help reduce echo, +which can be a good excuse to make a blanket fort. (It's for +EmacsConf!) + +Many speakers prefer to record and edit the audio until they're happy +with how it fits in the time, and then add the slides or videos +afterwards. It might be easier than trying to do both the audio and +the video in one go. + +### Appearance + +The talks will be broadcast with a resolution of **1280x720px** +(720p), so it may help to switch to that size before you record. +Please make sure your text will be easy to read. +[You can change the font-size in your Emacs.](https://www.emacswiki.org/emacs/SetFonts#h5o-6) +(Maybe `M-x customize-face default` and set the height to 150 or 180?) If you +are capturing a single window, you can also resize it before you +record. + +We recommend using **dark text on a light background** for your +recording, as this can be easier to see especially for people who are +visually impaired. Themes with more contrast are easier to read than +low-contrast ones. If you use a dark theme with your Emacs, you can +change to a lighter one with `M-x customize-theme` (look for those +with a `-light` suffix). The `modus-themes-load-operandi` command from +the `modus-themes` package can be a good option. + +# Compression + +If you would like to compress your video before uploading, the following shell script may be useful: + + Q=32 + CPU=8 + ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -an -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -g 240 -pass 1 -f webm -threads $CPU /dev/null && + ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a libopus -row-mt 1 -tile-columns 2 -tile-rows 2 -cpu-used $CPU -pass 2 -g 240 -threads $CPU "$2" + +If you put it in a file called `compress-video.sh`, you can execute it +from the command line with something like `sh compress-video.sh +input-file.webm output-file.webm`. It will compress the file in two +passes. During the first pass, the frame count will increase, but the +speed will be 0. After the first pass, it will display proper progress +information. + +<a name="tech-check"></a> +# Tech-check + +We ask that speakers who plan to participate in live Q&A sessions schedule +a short tech-check in the weeks leading to the conference; this is to ensure +that you can perform all the common tasks you’d need such as sharing your +screen or toggling your microphone. + +We use BigBlueButton for our video-conferencing needs, and a quick way +to familiarize yourself with it is to run it in a test room: +<https://test.bigbluebutton.org/> Tiling window managers and +multi-monitor setups can be a little tricky, so it's good to figure +out a setup that works for you. If there are things you'd like to +confirm by having another person in the meeting, such as audio +quality, please feel free to get in touch with us and we’ll sort +things out together. + +Thank you so much for helping with EmacsConf 2023! + +# Frequently-asked questions + +## Can I present live? + +Tech issues kept happening during EmacsConf 2023, so we’d really +prefer that all talks have prerecorded videos. There will be time for +live questions and answers, though, so if you can record a short video +covering your main points, you might be able to go into more detail in +live Q&A. + +## I have so much I want to share. Can I record a longer video? + +The conference program has so many interesting talks. We wish we +could fit everything in at full length! (Maybe EmacsConf month?) +Please think of your video as a short teaser that can get people +interested and point them to where they can find out more. You can +email <emacsconf-submit@gnu.org> links and other notes to add to the +wiki page for your talk. If you’d like to record a longer video *in +addition* to the short one for the main conference, please feel free +to send us that too. + +Additionally, even though it is tempting, please refrain from speaking +super quickly or fast-forwarding your recording to make it fit within +the format. Trimming out the silences and the filler words can help +sometimes, but a better solution for you might be to condense your +talk to the essentials, then write, record, and edit your voice-over. +Once you've figured out how to use the time, you can record your video +to go along with it. Don't sweat being a few minutes over or under, +that's cool. + +Feel free to send some questions for the host to ask you during the +Q&A so that you can address extra points that didn't make it into the +video. + +## I can’t figure out how to record the video. Can I just present the talk? + +We might be able to help you record your talk using the BigBlueButton +web conferencing system before the conference. Please email +<emacsconf-submit@gnu.org> with some times that might work for you and +we’ll see if a volunteer can meet up with you to record it. + +## Do I need to follow some visual guidelines for the presentation? + +- Dark text on a light background is more legible than the opposite + (especially for people who are visually impaired), and more contrast + is better than a low-contrast theme. This stands for both your + slides and your Emacs theme. +- If you think your fonts might be too small in your slides or in Emacs, + they might very well be. [You can change the font-size in your + Emacs](https://www.emacswiki.org/emacs/SetFonts#h5o-6), but you can + also play with the size of the captured window during your recording. +- Try to minimize the screen-flashes that occur when you switch between + windows, especially if their themes do not cohere (light-to-dark and + the reverse). If you can edit your recording, fades and other + transitions are a neat solution to this problem. + +## How do I show my keystrokes on screen? + +In Emacs, you can use +[interaction-log.el](https://github.com/michael-heerdegen/interaction-log.el) +(in MELPA) to display the keystrokes and the commands they run in a separate +buffer. For a system-wide solution, you can look into +[screenkey](https://gitlab.com/screenkey/screenkey). + +## I’m not used to talking to myself. Can I present the talk to someone? + +We might be able to help you record your talk using the BigBlueButton +web conferencing system before the conference. Please email +<emacsconf-submit@gnu.org> with some times that might work for you and +we’ll see if a volunteer can meet up with you to record it. + +## Can I see the other proposed talks? + +Once we’ve emailed the speakers about their acceptance, we’ll put +up the talk wiki pages. That way, you can see what else is going on +in the conference and maybe coordinate with other speakers in order to +minimize overlap and maximize awesomeness. + +## What if there are lots of great questions during Q&A and it's already time for the next talk? + +The stream will move on to the next talk, but people can join the +BigBlueButton meeting room and keep chatting with you for as long as +you want to keep going. You can also continue answering questions on +the collaborative pad or IRC, and we’ll copy questions and answers +onto the wiki page afterwards so that you can answer them in your own +time after the event. + +## More questions? + +Please email <emacsconf-submit@gnu.org>. We’d love to hear from you. + +Thanks for contributing to EmacsConf 2023! + +<!-- <a name="tech-checklist"></a> --> +<!-- #### Tech checklist --> + +<!-- - Can you speak and be heard? Is there echo? --> +<!-- - Can you hear the organizer? --> +<!-- - Can you share your screen? Is the screen readable? --> +<!-- - If you plan to show your keystrokes, is that display visible? --> +<!-- - If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? --> +<!-- - Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? --> +<!-- - Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes? --> +<!-- - Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname? --> diff --git a/2023/qa.md b/2023/qa.md new file mode 100644 index 00000000..48e24898 --- /dev/null +++ b/2023/qa.md @@ -0,0 +1,43 @@ +[[!meta title="Q&A participation"]] +[[!meta copyright="Copyright © 2022-2023 Sacha Chua"]] + +# BigBlueButton + +## Notes for participants + +- You can ask questions via the text chat or by voice. Voice and webcam are totally optional. +- Please stay muted until it's your turn. +- To raise your hand: + 1. Open the participant list. If it's hidden, use the person icon in the top left. + 2. Click on your name. + 3. Click on **Set Status** - **Raise**. + You can lower your hand by clicking on your name and choosing **Clear Status**. +- Headphone or earphones can help avoid audio feedback. +- If performance is slow, please keep your webcam off. +- The recording of this session will be posted on the talk page. We'll + also copy questions, answers, and notes from the text chat. + Everything will be shared under the Creative Commons + Attribution-ShareAlike 4.0 License. +- If you can, please add questions, answers, and notes to the + Etherpad. The URL for the Etherpad is on the talk page. +- Please follow <https://emacsconf.org/conduct> guidelines. +- If something should be omitted from the recording, put a NOTE in the + chat and explain what the organizers should do. + +## Notes for the speaker + +- You can answer questions in whatever order you want. +- You can skip questions or take your time to think about them. +- Please read the questions out loud before answering. This makes it + easier to save the questions and answers afterwards. +- We'll let you know when the stream is going to move on to the next + talk. Even after the streamer switches over to the next talk, you + can still stay and chat here for as long as you like. When you're + done, you can wrap up and leave. +- If something should be omitted from the recording, put a NOTE in the + chat and explain what the organizers should do. + +# IRC + +- If you add "Q: " as a prefix when asking a question (ex: "Q: Could you please give more details on ..."), it will be easier for us to notice your question. +- If you are discussing a previous talk after the next talk starts, you may want to add the talk ID to your message to make it clearer. (ex: "re:devel I think ...") diff --git a/2023/report.md b/2023/report.md new file mode 100644 index 00000000..608dcb05 --- /dev/null +++ b/2023/report.md @@ -0,0 +1,366 @@ +<!-- report.md is exported report.org, please modify that instead. --> +[[!sidebar content=""]] + +This file is automatically exported from [/2023/report.org](/2023/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/). +[[!meta title="EmacsConf 2023 Report"]] +[[!date "2024-01-10"]] +[[!meta copyright="Copyright © 2024 Sacha Chua"]] + + +# Table of Contents + +- [Overview](#overview) +- [Highlights](#highlights) +- [Technical details](#technical-details) +- [Process improvements](#process-improvements) +- [Finances](#finances) +- [Acknowledgements](#acknowledgements) +- [Updates](#updates) + + +<a id="overview"></a> + +# Overview + +EmacsConf 2023 was held on December 2 and 3 as an online conference. We had 41 talks across two tracks (general and development), with a total of 16 hours of presentations, 12 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were 100-250 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together. + +Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all 25 early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said: + +- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!" + +If you'd like to help edit captions or add chapter markers, we'd love to hear from you. Please see <https://emacsconf.org/captioning> for details. + +We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and live talks and Q&A sessions within two weeks. Automatic captions are now available for the rest of the talks and Q&A sessions. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at <https://emacsconf.org/2023/talks> . The videos are also available on Toobnix (<https://toobnix.org/c/emacsconf/videos>) and YouTube (<https://www.youtube.com/@EmacsConf>). + + +<a id="highlights"></a> + +# Highlights + +EmacsConf 2023 started with a full day of Org Mode talks on the general track, going from introducing people to Emacs through an Org-Mode-based [text adventure game](https://emacsconf.org/2023/talks/adventure "An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp") all the way to [managing bibliographic references](https://emacsconf.org/2023/talks/ref "Org-Mode workflow: informal reference tracking") and [exporting build instructions for different systems](https://emacsconf.org/2023/talks/doc "Literate Documentation with Emacs and Org Mode"). There was a group of Hyperbole talks on [new developments](https://emacsconf.org/2023/talks/hyperamp "Top 10 ways Hyperbole amps up Emacs") and [outlining workflows](https://emacsconf.org/2023/talks/koutline "Using Koutline for stream of thought journaling") on the second day, and there were interesting experiments with using Emacs for fun and productivity. On the development track, speakers shared tips for working with Emacs Lisp and other languages. There was also a lot of interest in exploring emerging artificial intelligence tools. Here are some highlights: + +**Collaboration:** In [Collaborative data processing and documenting using org-babel](https://emacsconf.org/2023/talks/collab "Collaborative data processing and documenting using org-babel"), Jonathan Hartman and Lukas C. Bossert showed how to do reproducible research together in Emacs by using the CRDT package along with Org Mode's support for running many different languages in your notes. People said: + +- "Great collaborative conversation and step-wise example creates a + different (and impactful) framing. Thank you!" +- "Truly one of the most impressive talks of the day. Congrats! Very + inspiring" +- "I like the way you highlight the point you are talking about in + real time." +- "Just came here to say watching two users editing the same buffer + simultaneously is BLOWING MY MIND" +- "that's really cool. One of the parts that's a bit hidden from the + user is seeing the format that the data is in inside the shell + script" +- "such a slick presentation, I like the CRDT collaboration angle, + looks like an end-game UX" +- "For those of you who remember the bad old days before "reproducible + research," that talk is even more impressive. Great job!" + +**Fun:** [How I play TTRPGs in Emacs](https://emacsconf.org/2023/talks/solo "How I play TTRPGs in Emacs") by Howard Abrams wowed people not only with the Org Mode workflow he shared but also the general vibe of the video. People said: + +- "My favorite talk was Howard's, not because I do role playing games + (last was probably a few late night D&D sessions in the 70s), but + just seeing the sheer existential joy possible in using emacs to + scratch ones one itch, and then sharing the experience." [@eludom](https://fosstodon.org/@eludom/111674175511553798) +- "Really cool project! - Also the enthusiasm for the topic is really + contagious!" +- "the camera and lighting already has me sold" +- "I can see this one is going to be a classic" +- "Howard's stuff is always great. this particular thing is totally + unchained. :D" +- "Every time Howard publishes a talk, I end up doing one more thing + in a new radical or literate way inside Emacs - currently looking + into how to go about literate snow shoveling for the winter ahead." + +**Community:** In [Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)](https://emacsconf.org/2023/talks/mentor "Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"), Jeremy Friesen talked about his experiences staying curious, learning from people around him, and encouraging people to grow no matter what tools they currently use. People said: + +- "The talks that impacted me the most were @takeonrules Jeremy Friesen's talks, ostensibly about writing with #Emacs and talking to others about Emacs. Substantively they got right to the heart of what makes Emacs so powerful as a platform, as a community, and as a model for how #FreeSoftware liberates us. His embodying the attitudes of self-sufficiency, mutual aid, empathy, open-mindedness, and authentic creativity showed us ourselves at our best." [@jameshowell](https://emacs.ch/@jameshowell/111671402961867425), quoted under the GNU Free Documentation License 1.3 +- "such valuable work being described" +- "I love the attitudes and worldview that infuses your blog posts and + your talks this weekend." + +**Development:** We also heard from core developers such as [John Wiegley](https://emacsconf.org/2023/talks/devel "Emacs development updates"), [Stefan Kangas](https://emacsconf.org/2023/talks/core "Emacs core development: how it works"), and [Ihor Radchenko](https://emacsconf.org/2023/talks/gc "emacs-gc-stats: Does garbage collection actually slow down Emacs?") on Emacs development updates, processes, and experiments. On the package side, [Yoni Rabkin](https://emacsconf.org/2023/talks/emms "Emacs MultiMedia System (EMMS)") shared a glimpse of how Emacs package development works with a deep dive into EMMS, the Emacs Multimedia System. People said: + +- "Thanks John for all the news on Emacs and informative answers." +- "Thank you Stefan! That was all really cool! :D" +- "Came for clear-cut magic bullet answers, left with nuanced + analysis - and that, surprise, Eli was overall right? Now what to do + with that viral gc init snippet that I've never taken time to + measure myself but keep anyway…" +- "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It + described not only the software but how the development team + worked." ([@franburstall](https://emacs.ch/@franburstall/111675280003261648)) +- "I just really enjoy seeing the folks that contribute to free + software. They are truly people to emulate. That goes double for + Yoni." + +**Automation:** From [using overlays to simplify complex compilation error messages](https://emacsconf.org/2023/talks/overlays "Improving compiler diagnostics with overlays") to [writing tests](https://emacsconf.org/2023/talks/test "What I learned by writing test cases for GNU Hyperbole") to [organizing EmacsConf itself](https://emacsconf.org/2023/talks/emacsconf "EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"), Emacs makes it easier to do stuff and have fun along the way. People said: + +- (about overlays) "That was great, showing how relatively easy it is to extend Emacs + with features like that." +- "Whatever you do, don't miss out @sachac's talk (this PM or + otherwise). I stumbled on it on @bandali's channel following a link to + Howard's, and it's a \*masterclass\* in wrangling things together to + automate workflows in Emacs/Elisp/Org. When people ask about VS Code, + this shows we are talking different mindsets and tools altogether." +- "I'll be rewatching it multiple times too, that's how packed in useful + insights and tidbits it is. 'What do you mean Emacs/Org is a platform + and a way of life?' Well, here you go, great exemplar :)" +- "The breadth of use cases and applications, and range of + Emacs/Elisp/Org capabilities reached for in this talk is fascinating." + +**Future:** GNU Emacs is almost 40 years old and still going strong. Marcus Birkenkrahe shared his experiences [using Emacs to teach students data science](https://emacsconf.org/2023/talks/teaching "Teaching computer and data science with literate programming tools"), and Jacob Boxerman talked about what it's like as [a student and as a video creator](https://emacsconf.org/2023/talks/sharing "Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"). Emacs continues to be a great platform for experimenting with everything from [parallel text replacement](https://emacsconf.org/2023/talks/parallel "Parallel text replacement") all the way up to [artificial intelligence with large language models](https://emacsconf.org/2023/talks/llm "LLM clients in Emacs, functionality and standardization"). People said: + +- "My personal highlights are not necessarily about specific + presentations, but about represented topics: + + 1. Multiple talks on using Emacs/Org mode in university setting both on student and lecturer side. This gives a promise on more people being exposed to Emacs and more people using it in their professional toolchain. + 2. The rise of LLM talks - Emacs being text editor is a natural interface to LLMs that do text-crunching. + 3. "Parallel text replacement" talk showing us that even the most common text-based interfaces are not yet "figured-out". Even in Emacs." + + [@yantar92](https://emacs.ch/@yantar92/111671107089286310) +- "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed + how relevant a programmable text processing environment (that + happens to have an editor) is to the brave new world of LLMs, + possibly being as he intimated, positioned to lead the way. + + What's old is new. Emacs was born in an AI lab. The challenge of + computing as far back a Alan Turing was intelligence. This talk + shows not the past, but emacs' place in the future." [@eludom](https://fosstodon.org/@eludom/111674208478381966) +- "I think Andrew is right that Emacs is uniquely positioned, being a + unified integrated interface with good universal abstractions + (buffers, text manipulation, etc), and across all uses cases and + notably one's Org data. Should be interesting…!" + +There were lots of other great talks. Check them out at <https://emacsconf.org/2023/talks> . Overall, people said: + +- "actually there part of the conference I admire most is is the fact + that that whole thing is obviously a labor of love by emacs geeks for + emacs geeks, using and showcasing as much free software as possible. + It creates community for those of us who are otherwise isolated in our + dark holes using a 45 year old text editor and wondering quizzically + why everything in our lives can't be reduced to text." + [@eludom](https://fosstodon.org/@eludom/111674156306960653) +- "Indeed, seeing all the use cases across so many fields is one of the + big selling point of this coming together, loving it." +- "This is my first year attending the conference, it was amazing! All + of the presenters and material were very impressive. And from a + technical perspective, the event was extremely smooth. It was easy to + find the agenda material online, and then use mpv to watch, and ask + questions on etherpad." +- "this conference is crazy i am not sure i ever saw so much interesting + emacs ideas in one day" +- "many good talks, and a sense of community around emacs, which is nice + to see" +- "i also have a feeling that it's hard to communicate with others when + you start digging into a large system. your confusion diffuses. i felt + similar when jumping into web framework and legacy apps. that's also + why i liked emacsconf, watching others clarifies a lot of stuff. + (memories of johnw edebug flash talk)" +- "the pacing, clarity, and depth of the talks today has been really + impressive, a presentation masterclass" + + +<a id="technical-details"></a> + +# Technical details + +EmacsConf is committed to software freedom. We used the following tools +for this year's conference: + +- [Org Mode](https://orgmode.org/), [Emacs](https://www.gnu.org/software/emacs/): organization and collaboration +- [MPV](https://mpv.io): video player +- [BigBlueButton](https://bigbluebutton.org/): web conference +- [OBS Studio](https://obsproject.com/): streaming +- [TigerVNC](https://tigervnc.org/): controlling the remote server +- [Icecast](https://icecast.org/): streaming WEBM +- [Internet Relay Chat via Libera.chat](https://libera.chat/), [The Lounge](https://thelounge.chat/), and [ERC](https://www.gnu.org/software/emacs/erc.html): conversation +- [Mumble](https://www.mumble.info/): audio conferencing for coordination +- [Etherpad](https://etherpad.org/): questions and notes +- [Ikiwiki](https://ikiwiki.info/): website +- [PsiTransfer](https://github.com/psi-4ward/psitransfer): uploads +- [FFmpeg](https://ffmpeg.org): video and audio processing +- [Audacity](https://www.audacityteam.org/): audio editing +- [OpenAI Whisper](https://github.com/openai/whisper): captioning +- [Aeneas](https://www.readbeyond.it/aeneas/): forced alignment to get timestamps +- [subed-mode](https://codeberg.org/sachac/subed): captioning +- [Git](https://git-scm.com/): version control +- [Mailman](https://list.org/): mailing lists; service provided by the Free Software Foundation +- [Nginx](https://www.nginx.com/): web server; server provided by the Free Software Foundation +- [Ansible](https://www.ansible.com/): system configuration + +You can find out more about our infrastructure at +<https://emacsconf.org/infra> . + + +<a id="process-improvements"></a> + +# Process improvements + +This year we tried out the following experiments: + +- Early acceptance: It was great being able to accept proposals as + they came in, and sometimes people chimed in with ideas for making talks even + better. A few talks got comments within the 1-week period, which helped + refine the talk idea more. We probably don't need to make this a + 2-week review period. +- Two tracks from the beginning: Following on the success of EmacsConf + 2022, we planned the schedule for two tracks and filled it right up. +- We worked on reducing manual intervention. + - We opened Q&A right away instead of waiting for the hosts to give the go-ahead. + - We used Tampermonkey to automatically connect to BigBlueButton + from the streaming user. + - Cron-based scheduling of talks kept us on time and made it easier + to manage multiple tracks. +- In addition to the iCalendar files for the conference and the + individual tracks, we also generated Org files in many different + timezones so that people could get the schedule in that format. + People said: + - "Yes, having the schedule in my own timezone was super helpful." +- subed made it easier to adjust timestamps and sync subtitles. +- We've started trimming Q&A videos to when the host leaves the + conversation, just in case the speaker forgot that the rest of it + was also recorded. If the speaker is okay with it, we can post the + full Q&A session. +- Using OBS virtual webcams was too taxing, so maybe we should keep things simple next year. + +Some notes to remember for next year: + +- We should include cfp.org as an attachment instead of inline. +- We need to ask for an increased limit for libera.chat so that + everyone can use chat.emacsconf.org to connect to it. +- Google Chrome and other Chromium browsers had a hard time with the + web-based player. This needs more testing. +- We can prepare a message for hosts to paste into the chat to help + people make the most of the Q&A (ex: adding an oops note for + editing). +- Make sure timezones are on anything that has time (schedule page, + watch pages, etc.). It would be cool if we can translate the times + in the SVGs too. +- It might be nice to use the intros and generate title sequences in + order to add them to the videos. It would also be nice to experiment + with other ffmpeg layouts so that we can view webcams and shared + screens at the same time. +- There were widespread network issues (dropped packets, etc.) on + Sunday morning. We set up an additional stream to toobnix.org as a + backup. +- The 480p alternate stream did okay this year, even when we were also + livestreaming via Toobnix. It might be worth the extra monitoring + and system load in order to livestream to YouTube as well. +- It might be a good idea to consider a third track so that there's + even more space for talks and on-stream Q&A, although we may need + more volunteers in order to make that happen. +- Maybe we can fiddle with the layout in BigBlueButton to make the + screen or the presenter's webcam easier to view without lots of + manual adjusting. Likewise, we can work on a better ffmpeg command + for the published recordings so that we can combine webcams with + shared screens. +- People would love to be able to do more with the conference from + Emacs itself. I'm not sure how we can use the Etherpads or if CRDT + would scale to lots of people, but maybe it might be worth doing a + few small experiments? + + +<a id="finances"></a> + +# Finances + +Our hosting costs were USD 48.82 for the conference itself: + +<table> + + +<colgroup> +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> + +<col class="org-left"> +</colgroup> +<tbody> +<tr> +<td class="org-left">Linode 64GB</td> +<td class="org-left">Icecast streaming</td> +<td class="org-left">50 hours</td> +<td class="org-left">USD 0.576/hour</td> +<td class="org-left">USD 28.80 + 13% tax</td> +</tr> + + +<tr> +<td class="org-left">Linode 32GB</td> +<td class="org-left">wiki</td> +<td class="org-left">50 hours</td> +<td class="org-left">USD 0.288/hour</td> +<td class="org-left">USD 14.40 + 13% tax</td> +</tr> +</tbody> +</table> + +The year-round hosting is on two Linode Nanode 1GB instances that are +shared with other projects and are not included in this amount. + +As of 2023-12-12, we have received USD 436.60 (after 10% for FSF +costs) in donations through the [Working Together](https://www.fsf.org/working-together/fund) program of the Free +Software Foundation. We plan to use the donations to cover hosting +costs for this year's conference and next year's conference, and we +are also thinking about low-cost ways to improve the conference +experience. + +If you'd like to donate, you can do so through the [Working Together](https://www.fsf.org/working-together/fund) +page. Since the FSF is a 501(c)(3) charity, your donations are +tax-deductible in the US. + + +<a id="acknowledgements"></a> + +# Acknowledgements + +We would like to thank the following: + +- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support. +- This year's conference hosts are Leo Vivier, Amin Bandali, and joining our team of hosts for the first time this year, FlowyCoder. +- The streams were managed by Sacha Chua, check-ins by FlowyCoder and Amin, with miscellaneous running-around by Corwin Brust. +- Thank you to our captioning volunteers: Daniel Molina, Bala Ramadurai, Bhavin Gandhi, Amine Zyad, Yoni Rabkin, Daniel Alejandro Tapia, Hannah Miller, Ken Huang, Jean-Christophe Helary, James Howell, Eduardo Ochs, and Andrew Dougherty. +- Thanks to Jean-Christophe Helary, Corwin, Quiliro, Cairn, and Amin Bandali for helping with the early acceptance process. +- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced, normalized, and denoised. +- Thanks to Leo and other people who kept the mailing lists free from spam. +- Thanks to Akshay Gaikwad for design contributions. +- Thanks to shoshin (Grant Shangreaux) for the music. +- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos. +- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, and the media.emacsconf.org server. +- Thanks to the contributers to all of tools and services we used. +- Thanks to everyone! + + +<a id="updates"></a> + +# Updates + +If you would like to get updates and announcements, you can sign up at +<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss> . + +Please keep an eye out for interesting things that might be fun to +present at next year's EmacsConf. We'd love to get talks at all levels +of experience and about lots of different kinds of interests. Speakers +wrote: + +- "I always got the feeling of being heard and welcome in spite of the vast + distances and cultures separating us. This community always feels like it + is open to new members any time. With regards to the conference process + also, it was a microcosm of the bigger community and hence I got the same + feeling. You didn't have to be an expert or a person who's been using emacs + for a long time to talk about something useful for the community. Even the + struggles of a noob may be useful for someone else in the community." +- "I can honestly say though that I had a great time putting my talk + together. I hope people will have a good time listening to it. Now + that the work is over, I can say it was worth it. so I recommend it + warmly" + +Hope to see you next year! + diff --git a/2023/report.org b/2023/report.org new file mode 100644 index 00000000..47874770 --- /dev/null +++ b/2023/report.org @@ -0,0 +1,755 @@ +# [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]] + +#+begin_export md +<!-- report.md is exported report.org, please modify that instead. --> +[[!sidebar content=""]] + +This file is automatically exported from [/2023/report.org](/2023/report.org). You might prefer to navigate this as an Org file instead. To do so, [clone the wiki repository](https://emacsconf.org/edit/). +[[!meta title="EmacsConf 2023 Report"]] +[[!date "2024-01-10"]] +[[!meta copyright="Copyright © 2024 Sacha Chua"]] +#+end_export + +#+TOC: headlines 1 + +* COMMENT About this document +:PROPERTIES: +:CUSTOM_ID: comment-about-this-document +:END: + +Goal for this document: + +- summarize results of EmacsConf into something that we can pull + relevant excerpts from depending on the audience + - fundraising, FSF + +Examples: + +- [[https://www.linkedin.com/pulse/pycon-namibia-2023-report-pycon-namibia]] - brief +- [[https://pycon.blogspot.com/2023/06/pycon-us-2023-recap-and-recording.html]] - recap PDF with stats and quotes +- [[https://media.debconf.org/dc14/report/DebConf14_final_report.en.pdf]] - PDF with lots of details +- [[https://www.fsf.org/blogs/community/from-freedom-trail-to-free-boot-and-free-farms-charting-the-course-at-libreplanet-day-2]] +* COMMENT Generating stats +** Number of hours in main presentations + +#+begin_src emacs-lisp :eval never-export +(/ + (apply '+ (seq-keep + (lambda (o) + (when (and (emacsconf-talk-file o "--main.webm") + (not (member (plist-get o :slug) '("sat-open" "sat-close" "sun-open" "sun-close")))) + (emacsconf-get-file-duration-ms (emacsconf-talk-file o "--main.webm")))) + (emacsconf-get-talk-info))) + (* 60 60 1000.0)) +#+end_src + +#+RESULTS: +:results: +16.23160861111111 +:end: +** Q&A hours + +#+begin_src emacs-lisp :eval never-export +(/ + (apply '+ (seq-keep + (lambda (o) + (when (and (emacsconf-talk-file o "--answers.webm") + (not (member (plist-get o :slug) '("sat-open" "sat-close" "sun-open" "sun-close")))) + (emacsconf-get-file-duration-ms (emacsconf-talk-file o "--answers.webm")))) + (emacsconf-get-talk-info))) + (* 60 60 1000.0)) +#+end_src + +#+RESULTS: +:results: +11.815647777777778 +:end: +** BigBlueButton +#+begin_src emacs-lisp :results table +(emacsconf-extract-bbb-report) +#+end_src + +#+RESULTS: +:results: +| 31 | Number of meetings analyzed | +| 62 | Max number of simultaneous users | +| 6 | Max number of simultaneous meetings | +| 27 | Max number of people in one meeting | +| 84 | Total unique users | +| 36 | Total unique talking | +:end: + +* Overview +:PROPERTIES: +:CUSTOM_ID: overview +:END: + +EmacsConf 2023 was held on December 2 and 3 as an online conference. We had 41 talks across two tracks (general and development), with a total of 16 hours of presentations, 12 hours of Q&A via web conference, and lots of lively discussion across IRC and Etherpad. Throughout the conference, there were 100-250 people watching via the livestream, and more than 80 people joined the live Q&A web conferences. There were also satellite events in Switzerland and Slovenia where people watched together. + +Thanks to volunteers who edited captions for pre-recorded videos, we were able to broadcast all 25 early submissions with open captions. This not only made talks more accessible while watching the livestreams, but it also made it easier to enjoy the talks in noisy environments or to catch up on talks. People said: + +- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!" + +If you'd like to help edit captions or add chapter markers, we'd love to hear from you. Please see [[https://emacsconf.org/captioning]] for details. + +We posted pre-recorded videos and transcripts on talk pages shortly after they started streaming, and live talks and Q&A sessions within two weeks. Automatic captions are now available for the rest of the talks and Q&A sessions. We've also archived questions and comments from IRC and Etherpad onto the talk pages. You can find the talk pages at [[https://emacsconf.org/2023/talks]] . The videos are also available on Toobnix ([[https://toobnix.org/c/emacsconf/videos]]) and YouTube ([[https://www.youtube.com/@EmacsConf]]). + +* Highlights +:PROPERTIES: +:CUSTOM_ID: highlights +:END: + +EmacsConf 2023 started with a full day of Org Mode talks on the general track, going from introducing people to Emacs through an Org-Mode-based [[emacsconf:adventure][text adventure game]] all the way to [[emacsconf:ref][managing bibliographic references]] and [[emacsconf:doc][exporting build instructions for different systems]]. There was a group of Hyperbole talks on [[emacsconf:hyperamp][new developments]] and [[emacsconf:koutline][outlining workflows]] on the second day, and there were interesting experiments with using Emacs for fun and productivity. On the development track, speakers shared tips for working with Emacs Lisp and other languages. There was also a lot of interest in exploring emerging artificial intelligence tools. Here are some highlights: + +*Collaboration:* In [[emacsconf:collab][Collaborative data processing and documenting using org-babel]], Jonathan Hartman and Lukas C. Bossert showed how to do reproducible research together in Emacs by using the CRDT package along with Org Mode's support for running many different languages in your notes. People said: + + - "Great collaborative conversation and step-wise example creates a + different (and impactful) framing. Thank you!" + - "Truly one of the most impressive talks of the day. Congrats! Very + inspiring" + - "I like the way you highlight the point you are talking about in + real time." + - "Just came here to say watching two users editing the same buffer + simultaneously is BLOWING MY MIND" + - "that's really cool. One of the parts that's a bit hidden from the + user is seeing the format that the data is in inside the shell + script" + - "such a slick presentation, I like the CRDT collaboration angle, + looks like an end-game UX" + - "For those of you who remember the bad old days before "reproducible + research," that talk is even more impressive. Great job!" + +*Fun:* [[emacsconf:solo][How I play TTRPGs in Emacs]] by Howard Abrams wowed people not only with the Org Mode workflow he shared but also the general vibe of the video. People said: + + - "My favorite talk was Howard's, not because I do role playing games + (last was probably a few late night D&D sessions in the 70s), but + just seeing the sheer existential joy possible in using emacs to + scratch ones one itch, and then sharing the experience." [[https://fosstodon.org/@eludom/111674175511553798][@eludom]] + - "Really cool project! - Also the enthusiasm for the topic is really + contagious!" + - "the camera and lighting already has me sold" + - "I can see this one is going to be a classic" + - "Howard's stuff is always great. this particular thing is totally + unchained. :D" + - "Every time Howard publishes a talk, I end up doing one more thing + in a new radical or literate way inside Emacs - currently looking + into how to go about literate snow shoveling for the winter ahead." + +*Community:* In [[emacsconf:mentor][Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)]], Jeremy Friesen talked about his experiences staying curious, learning from people around him, and encouraging people to grow no matter what tools they currently use. People said: + + - "The talks that impacted me the most were @takeonrules Jeremy Friesen's talks, ostensibly about writing with #Emacs and talking to others about Emacs. Substantively they got right to the heart of what makes Emacs so powerful as a platform, as a community, and as a model for how #FreeSoftware liberates us. His embodying the attitudes of self-sufficiency, mutual aid, empathy, open-mindedness, and authentic creativity showed us ourselves at our best." [[https://emacs.ch/@jameshowell/111671402961867425][@jameshowell]], quoted under the GNU Free Documentation License 1.3 + - "such valuable work being described" + - "I love the attitudes and worldview that infuses your blog posts and + your talks this weekend." + +*Development:* We also heard from core developers such as [[emacsconf:devel][John Wiegley]], [[emacsconf:core][Stefan Kangas]], and [[emacsconf:gc][Ihor Radchenko]] on Emacs development updates, processes, and experiments. On the package side, [[emacsconf:emms][Yoni Rabkin]] shared a glimpse of how Emacs package development works with a deep dive into EMMS, the Emacs Multimedia System. People said: + + - "Thanks John for all the news on Emacs and informative answers." + - "Thank you Stefan! That was all really cool! :D" + - "Came for clear-cut magic bullet answers, left with nuanced + analysis - and that, surprise, Eli was overall right? Now what to do + with that viral gc init snippet that I've never taken time to + measure myself but keep anyway..." + - "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It + described not only the software but how the development team + worked." ([[https://emacs.ch/@franburstall/111675280003261648][@franburstall]]) + - "I just really enjoy seeing the folks that contribute to free + software. They are truly people to emulate. That goes double for + Yoni." + +*Automation:* From [[emacsconf:overlays][using overlays to simplify complex compilation error messages]] to [[emacsconf:test][writing tests]] to [[emacsconf:emacsconf][organizing EmacsConf itself]], Emacs makes it easier to do stuff and have fun along the way. People said: + +- (about overlays) "That was great, showing how relatively easy it is to extend Emacs + with features like that." +- "Whatever you do, don't miss out @sachac's talk (this PM or + otherwise). I stumbled on it on @bandali's channel following a link to + Howard's, and it's a *masterclass* in wrangling things together to + automate workflows in Emacs/Elisp/Org. When people ask about VS Code, + this shows we are talking different mindsets and tools altogether." +- "I'll be rewatching it multiple times too, that's how packed in useful + insights and tidbits it is. 'What do you mean Emacs/Org is a platform + and a way of life?' Well, here you go, great exemplar :)" +- "The breadth of use cases and applications, and range of + Emacs/Elisp/Org capabilities reached for in this talk is fascinating." + +*Future:* GNU Emacs is almost 40 years old and still going strong. Marcus Birkenkrahe shared his experiences [[emacsconf:teaching][using Emacs to teach students data science]], and Jacob Boxerman talked about what it's like as [[emacsconf:sharing][a student and as a video creator]]. Emacs continues to be a great platform for experimenting with everything from [[emacsconf:parallel][parallel text replacement]] all the way up to [[emacsconf:llm][artificial intelligence with large language models]]. People said: + + - "My personal highlights are not necessarily about specific + presentations, but about represented topics: + 1. Multiple talks on using Emacs/Org mode in university setting both on student and lecturer side. This gives a promise on more people being exposed to Emacs and more people using it in their professional toolchain. + 2. The rise of LLM talks - Emacs being text editor is a natural interface to LLMs that do text-crunching. + 3. "Parallel text replacement" talk showing us that even the most common text-based interfaces are not yet "figured-out". Even in Emacs." + [[https://emacs.ch/@yantar92/111671107089286310][@yantar92]] + - "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed + how relevant a programmable text processing environment (that + happens to have an editor) is to the brave new world of LLMs, + possibly being as he intimated, positioned to lead the way. + + What's old is new. Emacs was born in an AI lab. The challenge of + computing as far back a Alan Turing was intelligence. This talk + shows not the past, but emacs' place in the future." [[https://fosstodon.org/@eludom/111674208478381966][@eludom]] + - "I think Andrew is right that Emacs is uniquely positioned, being a + unified integrated interface with good universal abstractions + (buffers, text manipulation, etc), and across all uses cases and + notably one's Org data. Should be interesting...!" + +There were lots of other great talks. Check them out at https://emacsconf.org/2023/talks . Overall, people said: + +- "actually there part of the conference I admire most is is the fact + that that whole thing is obviously a labor of love by emacs geeks for + emacs geeks, using and showcasing as much free software as possible. + It creates community for those of us who are otherwise isolated in our + dark holes using a 45 year old text editor and wondering quizzically + why everything in our lives can't be reduced to text." + [[https://fosstodon.org/@eludom/111674156306960653][@eludom]] +- "Indeed, seeing all the use cases across so many fields is one of the + big selling point of this coming together, loving it." +- "This is my first year attending the conference, it was amazing! All + of the presenters and material were very impressive. And from a + technical perspective, the event was extremely smooth. It was easy to + find the agenda material online, and then use mpv to watch, and ask + questions on etherpad." +- "this conference is crazy i am not sure i ever saw so much interesting + emacs ideas in one day" +- "many good talks, and a sense of community around emacs, which is nice + to see" +- "i also have a feeling that it's hard to communicate with others when + you start digging into a large system. your confusion diffuses. i felt + similar when jumping into web framework and legacy apps. that's also + why i liked emacsconf, watching others clarifies a lot of stuff. + (memories of johnw edebug flash talk)" +- "the pacing, clarity, and depth of the talks today has been really + impressive, a presentation masterclass" + +* COMMENT Raw quotes for highlights +:PROPERTIES: +:CUSTOM_ID: comment-raw-quotes-for-highlights +:END: + +"The talks that impacted me the most were @takeonrules Jeremy Friesen's +talks, ostensibly about writing with #Emacs and talking to others about +Emacs. Substantively they got right to the heart of what makes Emacs so +powerful as a platform, as a community, and as a model for how +#FreeSoftware liberates us. His embodying the attitudes of +self-sufficiency, mutual aid, empathy, open-mindedness, and authentic +creativity showed us ourselves at our best." - @jameshowell +([[https://emacs.ch/@jameshowell/111671402961867425]]) - quoted under +the GNU Free Documentation License 1.3 + +"My personal highlights are not necessarily about specific +presentations, but about represented topics: +1. Multiple talks on using Emacs/Org mode in university setting both on +student and lecturer side. This gives a promise on more people being +exposed to Emacs and more people using it in their professional +toolchain. +2. The rise of LLM talks - Emacs being text editor is a natural +interface to LLMs that do text-crunching. +3. "Parallel text replacement" talk showing us that even the most common +text-based interfaces are not yet "figured-out". Even in Emacs." - +@yantar92 ([[https://emacs.ch/@yantar92/111671107089286310]]) + + +uni, teaching, table, collab, ref + +- table + + - "This talk was really good in showing how to actually make some + things though. Going to look up the aggregate package." + +- uni + + - "I'm digging the weather-report style with your pointing at the + screen" + - "Fantastic. I think this talk will be a reference for years to + come!" + +- teaching + + - "Very important point to teach CS: immersion. Nothing better than + emacs for that." + - "Emacs is *great* for beginners (on CS): it makes them think + programmatically on their environment." + +- ref + + - "The current talk shows that most of the time, the already included + tools in Emacs allow for custom workflows without needing to use + external packages (org-roam, etc.). Of course, the latter are great + for richer workflows, but core Emacs is often enough." + +- collab + + - "Great collaborative conversation and step-wise example creates a + different (and impactful) framing. Thank you!" + - "Truly one of the most impressive talks of the day. Congrats! Very + inspiring" + - "I like the way you highlight the point you are talking about in + real time." + - "Just came here to say watching two users editing the same buffer + simultaneously is BLOWING MY MIND" + - "that's really cool. One of the parts that's a bit hidden from the + user is seeing the format that the data is in inside the shell + script" + - "such a slick presentation, I like the CRDT collaboration angle, + looks like an end-game UX" + - "For those of you who remember the bad old days before "reproducible + research," that talk is even more impressive. Great job!" + +writing, nabokov + +- writing + + - "This looks like a really nice setup, and I'd like to give it a + try!" + +- nabokov + + - " 👏 I'll start writing my masterpiece tomorrow!" + - "The most valuable thing that Org will bring to the writer is the + structure, how we can navigate between different structures of + thoughts." + +one, unentangling, doc + +- one + + - "Yeah, definitely a fun project that solves a problem to keep more + Emacs and less external services. Static web sites are the best. + :-D" + - "I really like that `jack-html` is a separate project, as that looks + nifty." + +- doc + + - "Thanks for the awesome presentation, I can't wait to add some of + this stuff to my documents" + - "Also, loved the presentation --- great walk-through of the thought + process & how to improve. Was happy when Macros made their way in" + +mentor, sharing + +- mentor + + - "such valuable work being described" + - "I love the attitudes and worldview that infuses your blog posts and + your talks this weekend." + +- sharing + + - "I've used your videos before! Thanks for all the good work." + - "Agreed, jakeb --- video is worth it." + +devel, core, gc + +- gc + + - "Came for clear-cut magic bullet answers, left with nuanced + analysis - and that, surprise, Eli was overall right? Now what to do + with that viral gc init snippet that I've never taken time to + measure myself but keep anyway..." + - "Definitely a huge extra thanks for the tireless Org-mode work + yantar92!" + - "Thanks for your work on this project. Very thorough." + +- core + + - "Thank you Stefan! That was all really cool! :D" + +- devel + + - "Thanks John for all the news on Emacs and informative answers." + +adventure, solo, cubing, emms + +- solo + + - "My favorite talk was Howard's, not because I do role playing games + (last was probably a few late night D&D sessions in the 70s), but + just seeing the sheer existential joy possible in using emacs to + scratch ones one itch, and then sharing the experience. " + [[https://fosstodon.org/@eludom/111674175511553798]] + - "Really cool project! - Also the enthusiasm for the topic is really + contagious!" + - "the camera and lighting already has me sold" + - "I can see this one is going to be a classic" + - "Howard's stuff is always great. this particular thing is totally + unchained. :D" + - "Every time Howard publishes a talk, I end up doing one more thing + in a new radical or literate way inside Emacs - currently looking + into how to go about literate snow shoveling for the winter ahead." + +- emms + + - "I very much liked Yoni Rabkin's calm,measured talk about EMMS. It + described not only the software but how the development team + worked." ([[https://emacs.ch/@franburstall/111675280003261648]]) + - "I just really enjoy seeing the folks that contribute to free + software. They are truly people to emulate. That goes double for + Yoni." + +- cubing + + - "i'm glad you're exploring Emacs UI wasamasa , i've also been + confounded trying to write a transient, and its nice to see that + sqlite is working for ya" + +- adventure + + - "with how simple the system seems it would be interesting if people + forked it and add their own tutorials for their projects" + - "neat idea for learning about emacs!" + - "i will definitely keep this game in mind since i have mostly just + started my emacs journey" + +voice, steno + +- steno + + - "Yes, ou's doing a great job and setting a good pace" + - "So much good stuff here, thanks for sharing! +1" + +hyperamp, koutline + +- hyperamp + + - "thanks bob i heard about hyperbole long time ago now it is time to + revisit with this beautiful presentation" + - "i'm going to look into hyperbole for sure now. it's been on my to + do list" + - "Bob has a long history of doing impressive work :)" + +overlay, eval, repl, test, scheme, lspocaml + +- scheme + + - "brilliant work for scheme" + - "yeah, this is overdue. the only real alternative is slime-r7rs" + +- overlay + + - "Very impressive! And well explained. Thank you." + - "yeah try doing that in VSCode! yeah." + - "this is slick!" + - "That was great, showing how relatively easy it is to extend Emacs + with features like that." + +world, flat + +- world + + - "Thank you for showing so many new possibilities with Emacs!" + +- flat + + - "It looks great, thanks for upstreaming it in GNU Emacs core as + well!" + +matplotllm, llm + +- llm + + - "2nd favorite was Andrew Hyatt's LLM talk because it clearly showed + how relevant a programmable text processing environment (that + happens to have an editor) is to the brave new world of LLMs, + possibly being as he intimated, positioned to lead the way. + + What's old is new. Emacs was born in an AI lab. The challenge of + computing as far back a Alan Turing was intelligence. This talk + shows not the past, but emacs' place in the future." + [[https://fosstodon.org/@eludom/111674208478381966]] + - "I think Andrew is right that Emacs is uniquely positioned, being a + unified integrated interface with good universal abstractions + (buffers, text manipulation, etc), and across all uses cases and + notably one's Org data. Should be interesting...!" + - "The ubiquitous integration of LLMs (multi-modal) for anything and + everything in/across Emacs and Org is both 1) exciting, 2) scary." + +parallel, eat, windows + +- eat + + - "I found out about EAT a while ago and was excited to find out that + it works so well! Thank you for your great work!" + - "I use eat, and I have almost replace terminal (bash/zsh) with + eshell paired with eat" + - "eat is very easy to try out compared to vterm since there's no + foreign code involved" + - "I was stunned at how fast eat is!" + - "eat is the apple equivalent of terminal emulators in emacs: It just + works! ;)" + +- windows + + - "I can't imagine cross-compiling Emacs for Windows on Linux is easy, + but sounds 'fun'." + +- parallel + + - "package installed, ready to use!" + - "excellent talk, and also such a cool package" + - "great talk, very clever concept" + +poltys, web + +- web + + - "Dang, this is really a great demo." + - "I love how he's using org-mode to do it all." + - "Definitely some interesting ideas in that one, and the literate + form is top-notch. Warrants a focused rewatch for me" + - "I *really* like Org-Babel as a bridge to make complex one-off tasks + ("why did the stuff in the database get into this state?" type + things, usually) reproduceable and version-controlled." + +hyperdrive + +- "Btw, hyperdrive looks like another one of those things that would be + amazing if I collaborated with anyone using emacs" +- "Okay, I got hyperdrive.el working and it was super easy." +- "Prot's presentations are so clear. Perfectly model pedagogy." +- "I have learned so much from his videos, and from his code." + +emacsconf + +- "Amazing presentation, Sacha!!! It's wonderful that all of your work + is well-documented. Thank you!!!" +- "This is my first year attending the conference, it was amazing! All + of the presenters and material were very impressive. And from a + technical perspective, the event was extremely smooth. It was easy to + find the agenda material online, and then use mpv to watch, and ask + questions on etherpad." +- "Whatever you do, don't miss out @sachac's talk (this PM or + otherwise). I stumbled on it on @bandali's channel following a link to + Howard's, and it's a *masterclass* in wrangling things together to + automate workflows in Emacs/Elisp/Org. When people ask about VS Code, + this shows we are talking different mindsets and tools altogether." +- "I'll be rewatching it multiple times too, that's how packed in useful + insights and tidbits it is. 'What do you mean Emacs/Org is a platform + and a way of life?' Well, here you go, great exemplar :)" +- "The breadth of use cases and applications, and range of + Emacs/Elisp/Org capabilities reached for in this talk is fascinating." +- "So nice to see these practical example of automating workflow with + Emacs, great presentation sachac" + +emacsen +overall + +- "actually there part of the conference I admire most is is the fact + that that whole thing is obviously a labor of love by emacs geeks for + emacs geeks, using and showcasing as much free software as possible. + It creates community for those of us who are otherwise isolated in our + dark holes using a 45 year old text editor and wondering quizzically + why everything in our lives can't be reduced to text." + ([[https://fosstodon.org/@eludom/111674156306960653]]) +- "that is some hero subtitling on 'cccc' to 'C-c C-c'. thank you!" +- "I can honestly say though that I had a great time putting my talk + together. I hope people will have a good time listening to it. Now + that the work is over, I can say it was worth it. so I recommend it + warmly" +- "Nice way to display countdown with emacs, that's why i love emacs + and emacser" +- "Indeed, seeing all the use cases across so many fields is one of the + big selling point of this coming together, loving it." +- "this conference is crazy i am not sure i ever saw so much interesting + emacs ideas in one day" +- "Thanks to the organizers for your tireless work, and to the most + excellent presenters of today, what a treat!" +- "many good talks, and a sense of community around emacs, which is nice + to see" +- "i also have a feeling that it's hard to communicate with others when + you start digging into a large system. your confusion diffuses. i felt + similar when jumping into web framework and legacy apps. that's also + why i liked emacsconf, watching others clarifies a lot of stuff. + (memories of johnw edebug flash talk)" +- "the pacing, clarity, and depth of the talks today has been really + impressive, a presentation masterclass" +- "Thank you for such responsiveness in running this conference!!!" +- "Yes, having the schedule in my own timezone was super helpful." +- "What our Swiss friends are doing looks quite nice" +- "yeah virtual conf is fire" + +* Technical details +:PROPERTIES: +:CUSTOM_ID: technical-details +:END: + +EmacsConf is committed to software freedom. We used the following tools +for this year's conference: + +- [[https://orgmode.org/][Org Mode]], [[https://www.gnu.org/software/emacs/][Emacs]]: organization and collaboration +- [[https://mpv.io][MPV]]: video player +- [[https://bigbluebutton.org/][BigBlueButton]]: web conference +- [[https://obsproject.com/][OBS Studio]]: streaming +- [[https://tigervnc.org/][TigerVNC]]: controlling the remote server +- [[https://icecast.org/][Icecast]]: streaming WEBM +- [[https://libera.chat/][Internet Relay Chat via Libera.chat]], [[https://thelounge.chat/][The Lounge]], and [[https://www.gnu.org/software/emacs/erc.html][ERC]]: conversation +- [[https://www.mumble.info/][Mumble]]: audio conferencing for coordination +- [[https://etherpad.org/][Etherpad]]: questions and notes +- [[https://ikiwiki.info/][Ikiwiki]]: website +- [[https://github.com/psi-4ward/psitransfer][PsiTransfer]]: uploads +- [[https://ffmpeg.org][FFmpeg]]: video and audio processing +- [[https://www.audacityteam.org/][Audacity]]: audio editing +- [[https://github.com/openai/whisper][OpenAI Whisper]]: captioning +- [[https://www.readbeyond.it/aeneas/][Aeneas]]: forced alignment to get timestamps +- [[https://codeberg.org/sachac/subed][subed-mode]]: captioning +- [[https://git-scm.com/][Git]]: version control +- [[https://list.org/][Mailman]]: mailing lists; service provided by the Free Software Foundation +- [[https://www.nginx.com/][Nginx]]: web server; server provided by the Free Software Foundation +- [[https://www.ansible.com/][Ansible]]: system configuration + +You can find out more about our infrastructure at +[[https://emacsconf.org/infra]] . + +* Process improvements +:PROPERTIES: +:CUSTOM_ID: process-improvements +:END: + +This year we tried out the following experiments: + +- Early acceptance: It was great being able to accept proposals as + they came in, and sometimes people chimed in with ideas for making talks even + better. A few talks got comments within the 1-week period, which helped + refine the talk idea more. We probably don't need to make this a + 2-week review period. +- Two tracks from the beginning: Following on the success of EmacsConf + 2022, we planned the schedule for two tracks and filled it right up. +- We worked on reducing manual intervention. + - We opened Q&A right away instead of waiting for the hosts to give the go-ahead. + - We used Tampermonkey to automatically connect to BigBlueButton + from the streaming user. + - Cron-based scheduling of talks kept us on time and made it easier + to manage multiple tracks. +- In addition to the iCalendar files for the conference and the + individual tracks, we also generated Org files in many different + timezones so that people could get the schedule in that format. + People said: + - "Yes, having the schedule in my own timezone was super helpful." +- subed made it easier to adjust timestamps and sync subtitles. +- We've started trimming Q&A videos to when the host leaves the + conversation, just in case the speaker forgot that the rest of it + was also recorded. If the speaker is okay with it, we can post the + full Q&A session. +- Using OBS virtual webcams was too taxing, so maybe we should keep things simple next year. + +Some notes to remember for next year: + +- We should include cfp.org as an attachment instead of inline. +- We need to ask for an increased limit for libera.chat so that + everyone can use chat.emacsconf.org to connect to it. +- Google Chrome and other Chromium browsers had a hard time with the + web-based player. This needs more testing. +- We can prepare a message for hosts to paste into the chat to help + people make the most of the Q&A (ex: adding an oops note for + editing). +- Make sure timezones are on anything that has time (schedule page, + watch pages, etc.). It would be cool if we can translate the times + in the SVGs too. +- It might be nice to use the intros and generate title sequences in + order to add them to the videos. It would also be nice to experiment + with other ffmpeg layouts so that we can view webcams and shared + screens at the same time. +- There were widespread network issues (dropped packets, etc.) on + Sunday morning. We set up an additional stream to toobnix.org as a + backup. +- The 480p alternate stream did okay this year, even when we were also + livestreaming via Toobnix. It might be worth the extra monitoring + and system load in order to livestream to YouTube as well. +- It might be a good idea to consider a third track so that there's + even more space for talks and on-stream Q&A, although we may need + more volunteers in order to make that happen. +- Maybe we can fiddle with the layout in BigBlueButton to make the + screen or the presenter's webcam easier to view without lots of + manual adjusting. Likewise, we can work on a better ffmpeg command + for the published recordings so that we can combine webcams with + shared screens. +- People would love to be able to do more with the conference from + Emacs itself. I'm not sure how we can use the Etherpads or if CRDT + would scale to lots of people, but maybe it might be worth doing a + few small experiments? + +* Finances +:PROPERTIES: +:CUSTOM_ID: finances +:END: + +Our hosting costs were USD 48.82 for the conference itself: + +| Linode 64GB | Icecast streaming | 50 hours | USD 0.576/hour | USD 28.80 + 13% tax | +| Linode 32GB | wiki | 50 hours | USD 0.288/hour | USD 14.40 + 13% tax | + +The year-round hosting is on two Linode Nanode 1GB instances that are +shared with other projects and are not included in this amount. + +As of 2023-12-12, we have received USD 436.60 (after 10% for FSF +costs) in donations through the [[https://www.fsf.org/working-together/fund][Working Together]] program of the Free +Software Foundation. We plan to use the donations to cover hosting +costs for this year's conference and next year's conference, and we +are also thinking about low-cost ways to improve the conference +experience. + +If you'd like to donate, you can do so through the [[https://www.fsf.org/working-together/fund][Working Together]] +page. Since the FSF is a 501(c)(3) charity, your donations are +tax-deductible in the US. + +** COMMENT Hosting costs for the rest of the year - not included +:PROPERTIES: +:CUSTOM_ID: comment-hosting-costs-for-the-rest-of-the-year-not-included +:END: + +During the rest of the year: + +| Nanode 1GB | Icecast streaming (shared with other projects) | USD 5/month | USD 55 + 13% tax | +| Nanode 1GB | wiki (shared with other projects) | USD 5/month | USD 55 + 13% tax | +| Namecheap | emacsconf.org | | USD 14.98 | +| Namecheap | emacsverse.org | | USD 14.98 | + +This adds up to total costs of USD 203.08 for EmacsConf 2023. + +* Acknowledgements +:PROPERTIES: +:CUSTOM_ID: acknowledgements +:END: + +We would like to thank the following: + +- Thank you to all the speakers, volunteers, and participants, and to all those other people in our lives who make it possible through time and support. +- This year's conference hosts are Leo Vivier, Amin Bandali, and joining our team of hosts for the first time this year, FlowyCoder. +- The streams were managed by Sacha Chua, check-ins by FlowyCoder and Amin, with miscellaneous running-around by Corwin Brust. +- Thank you to our captioning volunteers: Daniel Molina, Bala Ramadurai, Bhavin Gandhi, Amine Zyad, Yoni Rabkin, Daniel Alejandro Tapia, Hannah Miller, Ken Huang, Jean-Christophe Helary, James Howell, Eduardo Ochs, and Andrew Dougherty. +- Thanks to Jean-Christophe Helary, Corwin, Quiliro, Cairn, and Amin Bandali for helping with the early acceptance process. +- Thanks to Leo Vivier for fiddling with the audio to get things nicely synced, normalized, and denoised. +- Thanks to Leo and other people who kept the mailing lists free from spam. +- Thanks to Akshay Gaikwad for design contributions. +- Thanks to shoshin (Grant Shangreaux) for the music. +- Thanks to Ry P for the server that we're using for OBS streaming and for processing videos. +- Thanks to the Free Software Foundation for Emacs itself, the mailing lists, and the media.emacsconf.org server. +- Thanks to the contributers to all of tools and services we used. +- Thanks to everyone! + +* Updates +:PROPERTIES: +:CUSTOM_ID: updates +:END: + +If you would like to get updates and announcements, you can sign up at +[[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss]] . + +Please keep an eye out for interesting things that might be fun to +present at next year's EmacsConf. We'd love to get talks at all levels +of experience and about lots of different kinds of interests. Speakers +wrote: + +- "I always got the feeling of being heard and welcome in spite of the vast + distances and cultures separating us. This community always feels like it + is open to new members any time. With regards to the conference process + also, it was a microcosm of the bigger community and hence I got the same + feeling. You didn't have to be an expert or a person who's been using emacs + for a long time to talk about something useful for the community. Even the + struggles of a noob may be useful for someone else in the community." +- "I can honestly say though that I had a great time putting my talk + together. I hope people will have a good time listening to it. Now + that the work is over, I can say it was worth it. so I recommend it + warmly" + +Hope to see you next year! diff --git a/2023/schedule-2023-12-02.md b/2023/schedule-2023-12-02.md new file mode 100644 index 00000000..a64bad6a --- /dev/null +++ b/2023/schedule-2023-12-02.md @@ -0,0 +1 @@ +<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div>
\ No newline at end of file diff --git a/2023/schedule-2023-12-03.md b/2023/schedule-2023-12-03.md new file mode 100644 index 00000000..eabdc939 --- /dev/null +++ b/2023/schedule-2023-12-03.md @@ -0,0 +1 @@ +<div class="schedule-svg-container"><svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg></div>
\ No newline at end of file diff --git a/2023/schedule-details.md b/2023/schedule-details.md new file mode 100644 index 00000000..fe53bdaf --- /dev/null +++ b/2023/schedule-details.md @@ -0,0 +1,56 @@ +Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-02"></a> +# Saturday Dec 2, 2023 +[[!inline pages="internal(2023/schedule-2023-12-02)" raw="yes"]] + +<div class="schedule" data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T22:30:00+0000" data-tracks="General,Development"> +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--main.webm">Download --main.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-open--saturday-opening-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday opening remarks""" url="""/2023/talks/sat-open""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-open""" note="""captioned, video posted, video: 05:25"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/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">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.opus">Download --main.opus (3.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/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">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--main.webm">Download --main.webm (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-adventure--an-orgmode-based-text-adventure-game-for-learning-the-basics-of-emacs-inside-emacs-written-in-emacs-lisp--chunghong-chan--pad.md">Download --pad.md</a></li>""" title="""An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp""" url="""/2023/talks/adventure""" speakers="""Chung-hong Chan""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""adventure""" note="""captioned, video posted, video: 05:58"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.opus">Download --answers.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--answers.webm">Download --answers.webm (56MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--main.webm">Download --main.webm (283MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-uni--authoring-and-presenting-university-courses-with-emacs-and-a-full-libre-software-stack--james-howell--slides.pdf">Download --slides.pdf (26MB)</a></li>""" title="""Authoring and presenting university courses with Emacs and a full libre software stack""" url="""/2023/talks/uni""" speakers="""James Howell""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""uni""" note="""captioned, video posted, video: 20:53, answers: 22:32"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.opus">Download --main.opus (5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--main.webm">Download --main.webm (49MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-matplotllm--matplotllm-iterative-natural-language-data-visualization-in-orgbabel--abhinav-tushar--pad.md">Download --pad.md</a></li>""" title="""MatplotLLM, iterative natural language data visualization in org-babel""" url="""/2023/talks/matplotllm""" speakers="""Abhinav Tushar""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""matplotllm""" note="""captioned, video posted, video: 09:34"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.json">Download --answers.json (1.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.opus">Download --answers.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--answers.webm">Download --answers.webm (199MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--main.webm">Download --main.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.odp">Download .odp (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pdf">Download .pdf (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-teaching--teaching-computer-and-data-science-with-literate-programming-tools--marcus-birkenkrahe.pptx">Download .pptx (15MB)</a></li>""" title="""Teaching computer and data science with literate programming tools""" url="""/2023/talks/teaching""" speakers="""Marcus Birkenkrahe""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""teaching""" note="""captioned, video posted, video: 19:27, answers: 42:23"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.opus">Download --answers.opus (34MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--answers.webm">Download --answers.webm (205MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.opus">Download --main.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-voice--enhancing-productivity-with-voice-computing--blaine-mooers--pad.md">Download --pad.md</a></li>""" title="""Enhancing productivity with voice computing""" url="""/2023/talks/voice""" speakers="""Blaine Mooers""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""voice""" note="""captioned, video posted, video: 18:49, answers: 1:07:47"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.mp4">Download --alternative.mp4 (126MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--alternative.webm">Download --alternative.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-table--who-needs-excel-managing-your-students-qualifications-with-orgtable--daniel-molina--pad.md">Download --pad.md</a></li>""" title="""Who needs Excel? Managing your students qualifications with org-table""" url="""/2023/talks/table""" speakers="""Daniel Molina""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""table""" note="""captioned, video posted, video: 15:51"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.opus">Download --answers.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--answers.webm">Download --answers.webm (46MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.opus">Download --main.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--main.webm">Download --main.webm (50MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-llm--llm-clients-in-emacs-functionality-and-standardization--andrew-hyatt--pad.md">Download --pad.md</a></li>""" title="""LLM clients in Emacs, functionality and standardization""" url="""/2023/talks/llm""" speakers="""Andrew Hyatt""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""llm""" note="""captioned, video posted, video: 20:26, answers: 28:32"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.opus">Download --answers.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--answers.webm">Download --answers.webm (96MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-one--oneel-the-static-site-generator-for-emacs-lisp-programmers--tony-aldon--pad.md">Download --pad.md</a></li>""" title="""one.el: the static site generator for Emacs Lisp Programmers""" url="""/2023/talks/one""" speakers="""Tony Aldon""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""one""" note="""captioned, video posted, video: 22:18, answers: 27:39"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.opus">Download --answers.opus (9.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--answers.webm">Download --answers.webm (35MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.opus">Download --main.opus (5.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-writing--emacs-turbocharges-my-writing--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Emacs turbo-charges my writing""" url="""/2023/talks/writing""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""writing""" note="""captioned, video posted, video: 08:53, answers: 15:53"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.opus">Download --answers.opus (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--answers.webm">Download --answers.webm (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--expr_depth.svg">Download --expr_depth.svg</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.opus">Download --main.opus (15MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull--testdata.org">Download --testdata.org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org">Download .org</a></li>""" title="""Improving compiler diagnostics with overlays""" url="""/2023/talks/overlay""" speakers="""Jeff Trull""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""overlay""" note="""captioned, video posted, video: 20:57, answers: 11:48"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.opus">Download --answers.opus (3.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--answers.webm">Download --answers.webm (9.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.opus">Download --main.opus (6.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--main.webm">Download --main.webm (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen--silence.mkv">Download --silence.mkv (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-nabokov--why-nabokov-would-use-orgmode-if-he-were-writing-today--edmund-jorgensen.org">Download .org</a></li>""" title="""Why Nabokov would use Org-Mode if he were writing today""" url="""/2023/talks/nabokov""" speakers="""Edmund Jorgensen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""nabokov""" note="""captioned, video posted, video: 09:51, answers: 09:21"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.opus">Download --main.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eval--editor-integrated-repl-driven-development-for-all-languages--musa-alhassy--pad.md">Download --pad.md</a></li>""" title="""Editor Integrated REPL Driven Development for all languages""" url="""/2023/talks/eval""" speakers="""Musa Al-hassy""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""eval""" note="""captioned, video posted, video: 09:37"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--main.webm">Download --main.webm (62MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-collab--collaborative-data-processing-and-documenting-using-orgbabel--jonathan-hartman-lukas-c-bossert--room-noise.webm">Download --room-noise.webm</a></li>""" title="""Collaborative data processing and documenting using org-babel""" url="""/2023/talks/collab""" speakers="""Jonathan Hartman, Lukas C. Bossert""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""collab""" note="""captioned, video posted, video: 19:16"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--main.webm">Download --main.webm (187MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-repl--repls-in-strange-places-lua-latex-lpeg-lpegrex-tikz--eduardo-ochs--pad.md">Download --pad.md</a></li>""" title="""REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ""" url="""/2023/talks/repl""" speakers="""Eduardo Ochs""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""repl""" note="""video posted, video: 59:10"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--answers.webm">Download --answers.webm (43MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.opus">Download --main.opus (6.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--main.webm">Download --main.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-solo--how-i-play-ttrpgs-in-emacs--howard-abrams--pad.md">Download --pad.md</a></li>""" title="""How I play TTRPGs in Emacs""" url="""/2023/talks/solo""" speakers="""Howard Abrams""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""solo""" note="""captioned, video posted, video: 14:36, answers: 19:20"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.ogg">Download --main.ogg (7.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-ref--orgmode-workflow-informal-reference-tracking--christopher-howard--pad.md">Download --pad.md</a></li>""" title="""Org-Mode workflow: informal reference tracking""" url="""/2023/talks/ref""" speakers="""Christopher Howard""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""ref""" note="""captioned, video posted, video: 15:04"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.json">Download --answers.json (1.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.opus">Download --answers.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--answers.webm">Download --answers.webm (69MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--main.webm">Download --main.webm (133MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-doc--literate-documentation-with-emacs-and-org-mode--mike-hamrick--pad.md">Download --pad.md</a></li>""" title="""Literate Documentation with Emacs and Org Mode""" url="""/2023/talks/doc""" speakers="""Mike Hamrick""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""doc""" note="""captioned, video posted, video: 42:45, answers: 11:00"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--main.webm">Download --main.webm (68MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-unentangling--unentangling-projects-and-repos--alexey-bochkarev--pad.md">Download --pad.md</a></li>""" title="""(Un)entangling projects and repos""" url="""/2023/talks/unentangling""" speakers="""Alexey Bochkarev""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""unentangling""" note="""video posted, video: 12:39"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.opus">Download --main.opus (7.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.webm">Download --main.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-devel--emacs-development-updates--john-wiegley--pad.md">Download --pad.md</a></li>""" title="""Emacs development updates""" url="""/2023/talks/devel""" speakers="""John Wiegley""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""devel""" note="""video posted, video: 23:22"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.opus">Download --answers.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.opus">Download --main.opus (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-windows--windows-into-freedom--corwin-brust--pad.md">Download --pad.md</a></li>""" title="""Windows into Freedom""" url="""/2023/talks/windows""" speakers="""Corwin Brust""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""windows""" note="""video posted, video: 57:48"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.json">Download --main.json (2.4MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.webm">Download --main.webm (211MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--pad.md">Download --pad.md</a></li>""" title="""Emacs core development: how it works""" url="""/2023/talks/core""" speakers="""Stefan Kangas""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""core""" note="""video posted, video: 1:07:13"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.opus">Download --main.opus (4.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sat-close--saturday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Saturday closing remarks""" url="""/2023/talks/sat-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sat-close""" note="""video posted, video: 09:00"""]]</div> + +Jump to: <a href="#date-2023-12-02">Sat Dec 2</a> - <a href="#date-2023-12-03">Sun Dec 3</a><a name="date-2023-12-03"></a> +# Sunday Dec 3, 2023 +[[!inline pages="internal(2023/schedule-2023-12-03)" raw="yes"]] + +<div class="schedule" data-start="2023-12-03T14:00:00+0000" data-end="2023-12-03T22:30:00+0000" data-tracks="General,Development"> +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.opus">Download --main.opus (2.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--main.webm">Download --main.webm (12MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-open--sunday-opening-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday opening remarks""" url="""/2023/talks/sun-open""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-open""" note="""captioned, video posted, video: 05:17"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.json">Download --main.json (2.9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.opus">Download --main.opus (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--main.webm">Download --main.webm (234MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--pad.md">Download --pad.md</a></li>""" title="""Top 10 ways Hyperbole amps up Emacs""" url="""/2023/talks/hyperamp""" speakers="""Robert Weiner""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""hyperamp""" note="""video posted, video: 1:05:16"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.opus">Download --main.opus (4.5MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.webm">Download --main.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--pad.md">Download --pad.md</a></li>""" title="""Using Koutline for stream of thought journaling""" url="""/2023/talks/koutline""" speakers="""Matthew Jorgensen (PlasmaStrike)""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""koutline""" note="""video posted, video: 06:44"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.opus">Download --answers.opus (5.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--answers.webm">Download --answers.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.opus">Download --main.opus (14MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--main.webm">Download --main.webm (54MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-scheme--bringing-joy-to-scheme-programming--andrew-tropin--pad.md">Download --pad.md</a></li>""" title="""Bringing joy to Scheme programming""" url="""/2023/talks/scheme""" speakers="""Andrew Tropin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""scheme""" note="""captioned, video posted, video: 21:01"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.opus">Download --answers.opus (6.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--answers.webm">Download --answers.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main-vp8.webm">Download --main-vp8.webm (95MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-parallel--parallel-text-replacement--lovro-valentino-picotti--pad.md">Download --pad.md</a></li>""" title="""Parallel text replacement""" url="""/2023/talks/parallel""" speakers="""Lovro, Valentino Picotti""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""parallel""" note="""captioned, video posted, video: 14:46, answers: 10:16"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.opus">Download --main.opus</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--main.webm">Download --main.webm (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-eat--eat-and-eat-powered-eshell-fast-featureful-terminal-inside-emacs--akib-azmain-turja--pad.md">Download --pad.md</a></li>""" title="""Eat and Eat powered Eshell, fast featureful terminal inside Emacs""" url="""/2023/talks/eat""" speakers="""Akib Azmain Turja""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""eat""" note="""video posted, video: 08:13"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.opus">Download --answers.opus (4.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--answers.webm">Download --answers.webm (38MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.opus">Download --main.opus (9.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-world--gnu-emacs-a-world-of-possibilities--anand-tamariya--pad.md">Download --pad.md</a></li>""" title="""GNU Emacs: A World of Possibilities""" url="""/2023/talks/world""" speakers="""Anand Tamariya""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""world""" note="""captioned, video posted, video: 20:31"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--main.webm">Download --main.webm (185MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--pad.md">Download --pad.md</a></li>""" title="""The browser in a buffer""" url="""/2023/talks/poltys""" speakers="""Michael Bauer""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""poltys""" note="""video posted, video: 34:30"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.json">Download --main.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.opus">Download --main.opus (10MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt">Download --main.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.webm">Download --main.webm (121MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--pad.md">Download --pad.md</a></li>""" title="""A modern Emacs look-and-feel without pain""" url="""/2023/talks/flat""" speakers="""Pedro A. Aranda""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""flat""" note="""video posted, video: 22:20"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--alternative.webm">Download --alternative.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.opus">Download --main.opus (8.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--presentation.webm">Download --presentation.webm (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann--solve-demo.webm">Download --solve-demo.webm (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-cubing--speedcubing-in-emacs--vasilij-wasamasa-schneidermann.pdf">Download .pdf</a></li>""" title="""Speedcubing in Emacs""" url="""/2023/talks/cubing""" speakers="""wasamasa""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""cubing""" note="""captioned, video posted, video: 13:35"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.opus">Download --answers.opus (39MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--answers.webm">Download --answers.webm (253MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.opus">Download --main.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--main.webm">Download --main.webm (32MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsen--the-emacsen-family-the-design-of-an-emacs-and-the-importance-of-lisp--fermin--pad.md">Download --pad.md</a></li>""" title="""The Emacsen family, the design of an Emacs and the importance of Lisp""" url="""/2023/talks/emacsen""" speakers="""Fermin""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsen""" note="""captioned, video posted, video: 18:28, answers: 1:08:14"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.opus">Download --answers.opus (19MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--answers.webm">Download --answers.webm (52MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.opus">Download --main.opus (21MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--main.webm">Download --main.webm (139MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emms--emacs-multimedia-system-emms--yoni-rabkin.outline">Download .outline</a></li>""" title="""Emacs MultiMedia System (EMMS)""" url="""/2023/talks/emms""" speakers="""Yoni Rabkin""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""emms""" note="""captioned, video posted, video: 38:38, answers: 32:38"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.opus">Download --answers.opus (11MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--answers.webm">Download --answers.webm (115MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.opus">Download --main.opus (22MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--main.webm">Download --main.webm (80MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-gc--emacsgcstats-does-garbage-collection-actually-slow-down-emacs--ihor-radchenko--pad.md">Download --pad.md</a></li>""" title="""emacs-gc-stats: Does garbage collection actually slow down Emacs?""" url="""/2023/talks/gc""" speakers="""Ihor Radchenko""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""gc""" note="""video posted, video: 33:22"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.json">Download --answers.json (1.1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--answers.webm">Download --answers.webm (48MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--pad.md">Download --pad.md</a></li>""" title="""hyperdrive.el: Peer-to-peer filesystem in Emacs""" url="""/2023/talks/hyperdrive""" speakers="""Joseph Turner and Protesilaos Stavrou""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""hyperdrive""" note="""captioned, video posted, video: 40:03, answers: 28:15"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--main.webm">Download --main.webm (66MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-steno--programming-with-steno--daniel-alejandro-tapia--pad.md">Download --pad.md</a></li>""" title="""Programming with steno""" url="""/2023/talks/steno""" speakers="""Daniel Alejandro Tapia""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""steno""" note="""captioned, video posted, video: 25:03"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers--trimmed.webm">Download --answers--trimmed.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.opus">Download --answers.opus (25MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--answers.webm">Download --answers.webm (176MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.opus">Download --main.opus (6.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--main.webm">Download --main.webm (26MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-mentor--mentoring-vscoders-as-an-emacsian-or-how-to-show-not-tell-people-about-the-wonders-of-emacs--jeremy-friesen.pdf">Download .pdf</a></li>""" title="""Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)""" url="""/2023/talks/mentor""" speakers="""Jeremy Friesen""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""mentor""" note="""captioned, video posted, video: 10:44, answers: 1:13:43"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.opus">Download --answers.opus (8.2MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--answers.webm">Download --answers.webm (23MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.opus">Download --main.opus (8.7MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--main.webm">Download --main.webm (29MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-lspocaml--writing-a-language-server-in-ocaml-for-emacs-fun-and-profit--austin-theriault.pdf">Download .pdf (87MB)</a></li>""" title="""Writing a language server in OCaml for Emacs, fun, and profit""" url="""/2023/talks/lspocaml""" speakers="""Austin Theriault""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""lspocaml""" note="""captioned, video posted, video: 16:04, answers: 14:24"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.json">Download --answers.json</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.opus">Download --answers.opus (7.6MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--answers.webm">Download --answers.webm (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--main.webm">Download --main.webm (53MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-web--emacs-saves-the-web-maybe--yuchen-pei.org">Download .org</a></li>""" title="""Emacs saves the Web (maybe)""" url="""/2023/talks/web""" speakers="""Yuchen Pei""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""web""" note="""captioned, video posted, video: 31:33, answers: 15:53"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.json">Download --answers.json (1MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.opus">Download --answers.opus (9MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--answers.webm">Download --answers.webm (41MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.opus">Download --main.opus (13MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--main.webm">Download --main.webm (57MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-test--what-i-learned-by-writing-test-cases-for-gnu-hyperbole--mats-lidell--transcript.txt">Download --transcript.txt</a></li>""" title="""What I learned by writing test cases for GNU Hyperbole""" url="""/2023/talks/test""" speakers="""Mats Lidell""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""test""" note="""captioned, video posted, video: 26:55, answers: 26:22"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.json">Download --answers.json (1.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.opus">Download --answers.opus (16MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--answers.webm">Download --answers.webm (44MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.opus">Download --main.opus (8.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--main.webm">Download --main.webm (47MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--pad.md">Download --pad.md</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--previous.mkv">Download --previous.mkv (377MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.org">Download .org</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sharing--sharing-emacs-is-caring-emacs-emacs-education-and-why-i-embraced-video--jacob-boxerman.txt">Download .txt</a></li>""" title="""Sharing Emacs is Caring Emacs: Emacs education and why I embraced video""" url="""/2023/talks/sharing""" speakers="""Jacob Boxerman""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sharing""" note="""captioned, video posted, video: 16:34, answers: 25:19"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.json">Download --answers.json (5.8MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.opus">Download --answers.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.vtt">Download --answers.vtt</a> (unedited)</li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--answers.webm">Download --answers.webm (317MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.opus">Download --main.opus (8.3MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--main.webm">Download --main.webm (37MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-emacsconf--emacsconforg-how-we-use-org-mode-and-tramp-to-organize-and-run-a-multitrack-conference--sacha-chua--pad.md">Download --pad.md</a></li>""" title="""EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference""" url="""/2023/talks/emacsconf""" speakers="""Sacha Chua""" watch="""https://emacsconf.org/2023/watch/dev""" slug="""emacsconf""" note="""captioned, video posted, video: 15:05, answers: 2:00:43"""]] +[[!template id=sched resources="""<li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.opus">Download --main.opus (71MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--main.webm">Download --main.webm (279MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.html">Download --pad.html</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-sun-close--sunday-closing-remarks--pad.md">Download --pad.md</a></li>""" title="""Sunday closing remarks""" url="""/2023/talks/sun-close""" watch="""https://emacsconf.org/2023/watch/gen""" slug="""sun-close""" note="""video posted, video: 2:00:43"""]]</div>
\ No newline at end of file diff --git a/2023/sidebar.md b/2023/sidebar.md new file mode 100644 index 00000000..5f397ee2 --- /dev/null +++ b/2023/sidebar.md @@ -0,0 +1,12 @@ +<p>Welcome to...</p> +<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2023]]</p> +<p class="center"><strong>[[EmacsConf 2023|2023]]</strong></p> + +--- + +* [[Watch]] +* [[Talks]] +* [[Volunteer]] +* [[Planning]] +* [[Guidelines for Conduct|conduct]] +* [[Contact information|contact]] diff --git a/2023/speakers.md b/2023/speakers.md new file mode 100644 index 00000000..becdf79e --- /dev/null +++ b/2023/speakers.md @@ -0,0 +1,98 @@ +[[!meta title="Conference-day instructions for speakers"]] +[[!meta copyright="Copyright © 2023 Sacha Chua"]] + +# Before your talk + +If you have a pre-recorded talk, please check in at least 30 minutes +before the start of your Q&A session (when your talk ends). If you're +doing the talk live, please check in at least 30 minutes before the +start of your talk. + +You can check in on IRC by joining the #emacsconf-org channel on +libera.chat using your favorite IRC client or using +[https://chat.emacsconf.org](https://chat.emacsconf.org/?join=emacsconf-dev,emacsconf-gen,emacsconf-org). +If you want, you can also join the channel for your track as well +(either #emacsconf-gen or #emacsconf-dev). Say something like "Hi, +this is <your name> checking in" in the \#emacsconf-org channel +and one of the organizers will check you in. If you are having a hard +time with IRC, e-mail <emacsconf-submit@gnu.org> or use the emergency +contact info in the check-in email and we can give you the URL of a +BigBlueButton room to join. + +- If you want to do Q&A over IRC or Etherpad: + - You can hang out in the IRC channel for your track and/or on the + pad for your talk. +- If you want to do Q&A in a BigBlueButton room (ex: quick demoes): + - We'll set you up in a BigBlueButton room (check your e-mail for + the URL, or ask in #emacsconf-org). You can keep watching the + conference or doing other things while waiting there. We'll let + you know shortly before you go live. If you want, you can get + things ready for whatever you might want to demonstrate. + - Please use headphones or earphones to minimize the risk of audio + feedback. Webcams are optional. +- If you want to do Q&A over Mumble: + - You can connect to mumble.emacsconf.org. + +Please let us know if you're running late or if it turns out you can't +make it. Drop by #emacsconf-org, e-mail us at +<emacsconf-submit@gnu.org> , or use the emergency contact information +from the check-in instructions email. If we start worrying, we'll +reach out to you via your emergency contact information. + +# While your talk plays + +People will add notes and questions on the Etherpad, or they'll ask +them on IRC. Volunteers will try to copy all the questions to the +Etherpad. If you're watching Etherpad or IRC, you can start answering +whenever you like. + +# Answering questions + +- General notes about answering questions: + - You can answer questions in any order, and you can skip any + questions you don't want to answer. + - You don't have to answer questions right away. If you want to take + some time to think about things, that's okay. + - If you're answering questions by voice and the host is not reading + the questions out for you, please read the question out before you + answer it. This makes it easier to follow the conversation and to + copy the answers to the talk page afterwards. + - Uploading PDFs doesn't work in our BigBlueButton instance, but you + can share your screen. Sharing screens with multi-monitor setups + can be tricky. If this acts weirdly for you, try sharing just the + window you want to focus on, or switch to using one monitor. + - The Q&A will be recorded so that people can keep learning from it + even after the conference. If you accidentally share something or + would like part of the recording removed, please add something + like "Oops" in the text chat, possibly with a description of what + to remove. We can work on editing that out of the recording. +- After your prerec finishes: + - If you're doing Q&A in a BBB room: + - We'll switch the stream to broadcast from the BBB room you're + in, and we'll start recording the session so that Q&A can be + available after the conference. We'll give you a signal when the + Q&A is ready to start. Other people can start joining the Q&A room. + - Depending on your preferences, the host can read questions to + you, or you can read questions off the pad/IRC yourself. + - This conversation can continue for as long as you like. If it's + time for the next talk to start, we'll give you a heads-up and + your Q&A can continue off the stream in the same BBB room. When + you are ready to stop answering questions, you can wrap up + however you'd like and end the meeting. + - If you're doing IRC/Etherpad: we'll let people know where to ask + questions and we can read out some of the questions and answers + that are there. + - If you're on Mumble: we'll pull you into the channel room and the + streamer will connect to it. When we confirm that you can be + heard, you and the host can go ahead with the Q&A. + +# After the conference + +We'll collect questions and answers from IRC and the pad. We'll put +them on the talk page and e-mail them to you in case you want to +follow up or keep the conversation going. We'll also work on +extracting the videos from the Q&A sessions and we'll post them on the +talk page. + +Thank you so much for putting so much time and energy into sharing +what you know at EmacsConf! diff --git a/2023/submit.md b/2023/submit.md new file mode 100644 index 00000000..5090fa94 --- /dev/null +++ b/2023/submit.md @@ -0,0 +1,78 @@ +[[!meta title="Submit"]] +[[!meta copyright="Copyright © 2019, 2020 Amin Bandali<br /> +Copyright 2021 Amin Bandali, Sacha Chua, Leo Vivier<br /> +Copyright 2022 Amin Bandali<br /> +Copyright 2023 Sacha Chua"]] + +When you're ready to submit your proposal, send your submission via +email to <emacsconf-submit@gnu.org> by **Friday, September 15, 2023**. +All speakers will be notified by Saturday, September 30 (or earlier) +regarding the status of their proposal. Accepted speakers will have +until November 3 (Friday) to prepare their video. + +If you put your talk title in your submission e-mail's subject line, +it'll be easier to keep track of the conversation. Please use the +following template for your submission email: + +``` +Talk title: + + +Talk description (<= 500 words): + + + + + + + + +Format (10 minutes, 20 minutes, description of other format) and outline: + +Introduction for you and your talk (<= 100 words): + +Speaker name (and optional pronunciation) and preferred pronouns: + +Speaker availability (times that you're available Dec 2-3; please indicate timezone): + +Preferred Q&A approach (live web conference, IRC, pad, wiki, e-mail questions after the event): + +Public contact information (IRC nick, e-mail, website, and/or social media): + +Private emergency contact information (phone number or messaging) in +case we need to reach you due to technical difficulties: + +Please include this speaker release in order to indicate your agreement with it. + + By submitting this proposal, I agree that my presentation at + EmacsConf 2023 is subject to the following terms and conditions: + + The EmacsConf organizers may capture audio and video (a "Recording") + of my presentation and any associated materials, which may include + slides, notes, transcripts, and prerecording(s) of my presentation + that I provide to the EmacsConf organizers. + + I authorize the EmacsConf organizers to distribute, reproduce, + publicly display, and prepare derivative works of the Recording and + any derivative works of the Recording (the "Licensed Materials") + under the terms of the Creative Commons Attribution-ShareAlike 4.0 + International (CC BY-SA 4.0) license. + + I grant to the EmacsConf organizers permission to use my name, + likeness, and biographic information in association with their use + of the Licensed Materials under the above license. + + I represent that I have the authority to grant the above license to + the EmacsConf organizers. If my presentation incorporates any + material owned by third parties, I represent that the material is + sublicensable to the EmacsConf organizers or that my use of them is + fair use. +``` + +For other details, see the [[call for participation|cfp]]. + +You can subscribe to the +[emacsconf-discuss mailing list](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +for discussions and announcements about EmacsConf 2023. + +We look forward to your ideas and submissions. Thank you! diff --git a/2023/talk-details.md b/2023/talk-details.md new file mode 100644 index 00000000..f32c9935 --- /dev/null +++ b/2023/talk-details.md @@ -0,0 +1,27 @@ +<table><thead><th>Duration</th><th>Title</th><th>Speakers</th></thead><tbody><tr><td>10</td><td><a href="/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a></td><td>Chung-hong Chan</td><tr> +<tr><td>20</td><td><a href="/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a></td><td>James Howell</td><tr> +<tr><td>20</td><td><a href="/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a></td><td>Tony Aldon</td><tr> +<tr><td>10</td><td><a href="/2023/talks/writing">Emacs turbo-charges my writing</a></td><td>Jeremy Friesen</td><tr> +<tr><td>10</td><td><a href="/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a></td><td>Edmund Jorgensen</td><tr> +<tr><td>20</td><td><a href="/2023/talks/collab">Collaborative data processing and documenting using org-babel</a></td><td>Jonathan Hartman, Lukas C. Bossert</td><tr> +<tr><td>20</td><td><a href="/2023/talks/ref">Org-Mode workflow: informal reference tracking</a></td><td>Christopher Howard</td><tr> +<tr><td>20</td><td><a href="/2023/talks/voice">Improving access to AI-assisted literate programming with voice control</a></td><td>Blaine Mooers</td><tr> +<tr><td>20</td><td><a href="/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a></td><td>Andrew Hyatt</td><tr> +<tr><td>20</td><td><a href="/2023/talks/extending">GNU Emacs for electronics, note-taking, and as lightweight IDE</a></td><td>Anand Tamariya</td><tr> +<tr><td>20</td><td><a href="/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a></td><td>Fermin</td><tr> +<tr><td>20</td><td><a href="/2023/talks/koutline">Using Koutline for stream of thought journaling</a></td><td>Matthew Jorgensen (PlasmaStrike)</td><tr> +<tr><td>10</td><td><a href="/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a></td><td>Akib Azmain Turja</td><tr> +<tr><td>40</td><td><a href="/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a></td><td>Joseph Turner</td><tr> +<tr><td>10</td><td><a href="/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a></td><td>Jeremy Friesen</td><tr> +<tr><td>10</td><td><a href="/2023/talks/hn">The many ways to browse Hacker News from Emacs</a></td><td>Mickael Kerjean</td><tr> +<tr><td>40</td><td><a href="/2023/talks/web">Emacs saves the Web</a></td><td>Yuchen Pei</td><tr> +<tr><td>20</td><td><a href="/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a></td><td>Jacob Boxerman</td><tr> +<tr><td>20</td><td><a href="/2023/talks/scheme">Bringing joy to Scheme programming</a></td><td>Andrew Tropin</td><tr> +<tr><td>10</td><td><a href="/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a></td><td>Austin Theriault</td><tr> +<tr><td>10</td><td><a href="/2023/talks/flat">A modern Emacs look-and-feel without pain</a></td><td>Pedro A. Aranda</td><tr> +<tr><td>40</td><td><a href="/2023/talks/windows">Windows into Freedom</a></td><td>Corwin Brust</td><tr> +<tr><td>20</td><td><a href="/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a></td><td>Sacha Chua</td><tr> +<tr><td>10</td><td><a href="/2023/talks/sat-open">Saturday opening remarks</a></td><td>nil</td><tr> +<tr><td>10</td><td><a href="/2023/talks/sat-close">Saturday closing remarks</a></td><td>nil</td><tr> +<tr><td>5</td><td><a href="/2023/talks/sun-open">Sunday opening remarks</a></td><td>nil</td><tr> +<tr><td>10</td><td><a href="/2023/talks/sun-close">Sunday closing remarks</a></td><td>nil</td><tr></tbody></table>
\ No newline at end of file diff --git a/2023/talks.md b/2023/talks.md new file mode 100644 index 00000000..0cb20c1e --- /dev/null +++ b/2023/talks.md @@ -0,0 +1,17 @@ +[[!meta title="Talks"]] +[[!meta copyright="Copyright © 2023 Sacha Chua"]] +[[!sidebar content=""]] + +These are the talks from EmacsConf 2023, which was a fully-online conference. + +Please note that the following talks are intended for a general +audience even though they've been scheduled in the development track +for time reasons: + +- [Literate documentation with Emacs and Org Mode](https://emacsconf.org/2023/talks/doc) +- [hyperdrive.el: Peer-to-peer filesystem in Emacs](https://emacsconf.org/2023/talks/hyperdrive) + +[[!inline pages="internal(2023/schedule-details)" raw="yes"]] + +Want to help make EmacsConf even awesomer? [[Volunteer!|/2023/volunteer]] + diff --git a/2023/talks/adventure.md b/2023/talks/adventure.md new file mode 100644 index 00000000..2654ce1b --- /dev/null +++ b/2023/talks/adventure.md @@ -0,0 +1,73 @@ +[[!meta title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp"]] +[[!meta copyright="Copyright © 2023 Chung-hong Chan"]] +[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp +Chung-hong Chan (he/his/him, er/sein/ihn/ihm, 佢/他) + +[[!inline pages="internal(2023/info/adventure-before)" raw="yes"]] + +I am experimenting with using org-mode as a HyperCard-like text +adventure game engine. In this talk, I am going to demonstrate a text +adventure game for learning the basics of Emacs. Through solving +puzzles and programming your companion robot, Emi, you will learn how +to use the built-in Emacs help system, the mechanic of emacs +customization and the basics of programming Emacs Lisp. I believe this +game is ideal as a light-hearted complement to the `C-h t` tutorial. + +About the speaker: + +Dr Chung-hong Chan is a senior researcher at GESIS Leibniz Institute for the Social Sciences, Germany. + +# Discussion + +- <https://github.com/chainsawriot/orgdungeon> +- Q: Maybe the Emacs tutorial could be adapted to this game flow? + - A: Unfortunately, that would be quite difficult. The Emacs tutorial is more about the basics (cursor movement, buffer management etc). And those bits are quite difficult to demo in the current text adventure format. I think a game format like vim-adventures[vim-adventures](https://vim-adventures.com/) would be better. +- Q: What was something that you learned about Org-Mode/Emacs in + working on this tutorial? + - A: ~(eval (car (read-from-string string)))~ +- Q: Could you please elaborate what's the background of this game? + What's the motivation why you choose this game as introduction for + a newbie ton enter the Emacs world? + - A: The background of this game is a bit silly. It’s actually my wife wanted to create a (general) video game last year and I told her I can create a puzzle game as well. I have no experience in programming any video game, but I enjoy playing niche video games such as Tetris and TIS-100. + I have tried to create educational material for R programmers to learn emacs, e.g. [this](https://github.com/chainsawriot/essaprimer) and [this](https://github.com/chainsawriot/presentation-typeless). Actually, the game presented so far is covering the same material of the latter tutorial. But I don’t think the written tutorial is as effective as this game. + There are so many introductory emacs tutorials. C-h t, for example, is quite good. If the path to emacs is from 0 to 100, those tutorials are good for going from 0 to maybe 20. It is nice to get the feet wet. I think that the gateway to really enjoy emacs, i.e. beyond 20, is to customize emacs so that emacs becomes your own tool. However, there is a huge perceived knowledge barrier of “learning emacs lisp” and “learning emacs internal”. From my own experience, the trick is stop “learning” (from an educational perspective, one can’t learn something for the sake of learning something.), but to “do.” The best way to immediately do something, is to play a game. +- Q: Thank you for the talk! Really cool project! How many planes are + you planning to make and what more will you teach the players? + + Q: Do you have an end goal for this game? That is, what information + do you want it to cover or will it be never ending? + - A: I am going to answer both questions jointly. The plan is to at least allow the users to write a 10-LOC function in emacs lisp. +- Q: What is plane? Is that something like a question set in the game? + - A: I am not a D&D player. But my wife told me [a Plane](https://en.wikipedia.org/wiki/Plane_(Dungeons_%26_Dragons)) is one parallel universe. But you are right, one Plane in this game is basically one question set, or one puzzle. +- Q: Is it for programmers? Non-programmers? Or general? + - A: I really hope that this is for everyone. But given the emacs userbase is like 90% programmers, I don’t mind this game is geared towards the programmer type wanting to “go beyond 20” +- Q: What is the link to your GitHub repository? + - A: It is above in the notes and links... + - <https://github.com/chainsawriot/orgdungeon> +- Q: Is `(find-file org-file-name)` [skip-to-plane] a effective + way to load information from your org-files? + - A: Probably not. The original idea was to have one giant org file and jump between headlines. But the current approach is easier to implement. +- I love this idea of using emacs to teach emacs! It is a good + continuation of C-h t. The adventure should not replace C-h t but be + its next step after finishing C-h t. Good job! +- Q: i am wondering what is the naming scheme of the planes, since there are large spaces between the numbering which i guess could be like how you leave space in between basic lines? + - A: +- with how simple the system seems it would be interesting if people forked it and add their own tutorials for their projects +- neat idea for learning about emacs! +- that was actually my first thought - it is good template for tutorial of complicated custom functions. +- Yeah, that sounds pretty interesting as an idea +- I mean, it is beautiful presentation of fun hacking, but I don't see it as real text adventure... But great intro and wish you good luck with it. +- so good thank you i will check this game out +- interesting idea +- i will definitely keep this game in mind since i have mostly just started my emacs journey + +[[!inline pages="internal(2023/info/adventure-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/adventure-nav)" raw="yes"]] + + diff --git a/2023/talks/collab.md b/2023/talks/collab.md new file mode 100644 index 00000000..1a88809b --- /dev/null +++ b/2023/talks/collab.md @@ -0,0 +1,195 @@ +[[!meta title="Collaborative data processing and documenting using org-babel"]] +[[!meta copyright="Copyright © 2023 Jonathan Hartman, Lukas C. Bossert"]] +[[!inline pages="internal(2023/info/collab-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Collaborative data processing and documenting using org-babel +Jonathan Hartman (he/him), Lukas C. Bossert (he/him) - <https://mastodon.social/@lukascbossert>, <mailto:hartman@itc.rwth-aachen.de>, <mailto:bossert@itc.rwth-aachen.de> + +[[!inline pages="internal(2023/info/collab-before)" raw="yes"]] + +In our presentation we will show an efficient way of combining +information and enriching it by retrieving data, processing it, and +finally exporting it, all with org-mode. In this presentation, we will +demonstrate not only org-mode, but also a few companion libraries that +add functionality such as knowledge graph visualizations, literate +programming, and collaborative editing to quickly create a deeply +informative reference page. + +The starting point of our best practice is the National Research Data +Infrastructure Germany (NFDI), about which we intend to retrieve and +process certain information data gathered from wikidata. For this, we +are additionally leveraging the "org-roam" emacs package, which +provides functionality for quickly and simply linking together notes +and ideas into a custom knowledge graph. Initially, we will write a +short abstract about the NFDI and embed it into our existing knowledge +graph by linking it to other existing nodes. In the visualized graph +(using the “org-roam-ui” package), links and secondary connections to +other existing nodes can now be revealed. + +Next, we would like to enrich the text about the NFDI by with data +retrieved from the Wikidata API. A convenient way of creating +self-documenting code is the approach called “literate programming”, +which presents program logic embedded within human language text. In +Emacs we achieve this by using the “org-babel” package. Perhaps now we +find it is helpful to collaborate with a colleague in the document: +while one is writing the code, the other can explain its use and +interpret the results. We will do this simultaneously in the same +document using a method called “crdt” (conflict-free replicated data +type) and – of course – there is also an implementation of this in +Emacs. The results of the code blocks can be used for further analysis +and shared throughout the same document. + +Finally, for the sake of proper and barrier free documentation, we +show how to export the document to various formats like pdf, html, txt +etc. using either the built-in feature of org-mode or the +implementation of pandoc. + +About the speakers: + +**Jonathan Hartman** is a trained data scientist and works at the IT +Center of the RWTH Aachen University, Germany. + +**Lukas C. Bossert** is a trained classical archaeologist and is deputy +head of the department "research process and data management" at the +IT Center of the RWTH. + +Lukas, an intermediate Emacs user, is currently exploring how to +optimize his daily workflow by leveraging various Emacs packages. On +the other hand, Jonathan is a relative newcomer to this environment, +encountering common pitfalls faced by beginners. Together, they +explore the capabilities and functionalities of org-mode, discovering +how it can enhance data management and presentation in their research +processes. + +[[!img /i/emacsconf-2023-collab-sponsorship.png alt="Lukas and Jonathan are financed by the DKZ.2R Datenkompetenzkolleg Rhein-Ruhr (16DKZ2030E), www.dks2r.de"]] + +# Discussion + +## Questions and answers + +- Q: How reliable it resolves the conflict? I mean, for my personal + use case, for example, Sycnthing, sometimes it's not working + perfectly and I had to manually edit it. How is it robust compared + to syncthing? + - A (Lukas): We also faced sometimes issues that letters got + mixed up. We couldnt figure out what caused it and it was not + reproducable . I cannot compare it to syncthing, never used that + with emacs/org-mode. +- Q: How's the security for this kind of things? I mean, if we adopt + these things in our PAD, is there any, can this thing execute + arbitrary (elisp) code in different people's computer? (Think like + an adversary!) + - A: (Lukas) As far as we saw the code is executed on the local + computer, see the part with the R-code in our video. + - (zaeph) We had plans with qhong (maintainer of crdt.el) to + tunnel the connection via SSL, but we were blocked by the SSL + library that shipped with Emacs, sadly. However, we did create + a security policy that allowed restrictions on the execution of + Elisp code. (great!) +- Q: Really nice talk and demo! You guys clearly rehearsed :). I + always wonder with serial data processing sequencing like this, to + what degree do the intermediate outputs need to appear inline in the + text? Suppose you had 50,000 or one million rows from your initial + wikidata (or similar) call. How would you handle that size of data + using a collaborative, literate approach like this? + - A: (Lukas) Good question. In your local buffer there is no + difference and for the collaborative partner I cannot tell. We + testet it with 50 items because that was enough for + demonstrating our purpose. + - noweb allows getting results of evaluation without having to put + the actual data into Org buffer - just arrange the original + block generating the data to have :results silent. Basically, + :var foo=block-name does not require "block-name" to be + evaluated in advance - it will be evaluated as necessary. AFAIU, + in the talk, it is re-evaluated every time (to not have it, one + would need :cache t). + - This has tremendous utility + - So it would be stored on disk and referenced by name in a + subsequent block? Sounds useful. + - Not on disk - just cached within a single session. To store + on disk, need to save to actual file on disk. +- Q: How do you handle the viewing of larger or really any tabular + data in Emacs/Org when you want to inspect it, like the nice way + tabular data is displayed inline in Rmarkdown/RStudio? + - A: (Lukas) I have no particular way of doing this. + - What about pandas data summary functionality? Can be a simple + python block. + - Lukas: Jonathan is our python expert, he might answer this + question. + - A: (Jonathan) If I follow, you can certainly just use + DataFrame.describe() or Series.describe() to get summary + statistics for a dataset - the return value would be a Series or + a DataFrame, which would be displayed similiarly to how we show + things here. Alternatively, DataFrame.head(n) or + DataFrame.sample(n) would return a dataframe of the first n / n + random lines of a dataset, and might be a way of providing the + gist of a very large dataset without printing the entire table + in the document. + - Would be nice to have a "summarized table" functionality in + Org, that includes an abridged copy of a long table inline, but + you can open it in another buffer to browse/edit the full table + (ala block edit). + - Feel free to post a feature request - see + <https://orgmode.org/manual/Feedback.html#Feedback> +- Q: I'm thinking about an application for a single user, but in + different platforms. In a simple case. For example, you have a + buffer in your local computer, and you also want to have some files + on your pad or on your phone, and you can use this CADT concept to + make sure that there's not too much conflict in between different + editing sections. Do you think this is a good idea? I mean, compared + to purely relying on Syncthing, which sometimes I feel is unreliable + for resolving those conflicts. + - A: (Lukas) This sounds very interesting and could beneficial for + contiously working on things. + +## Notes + +- I like the way you highlight the point you are talking about in real + time. +- Conflict-free Replicated Data Types (CADT) :: + <https://github.com/emacs-straight/crdt> +- !This is the future of PAD for our conference. +- Just came here to say watching two users editing the same buffer + simultaneously is BLOWING MY MIND + - BLOWING MY MIND +2 + - blowing my mind, too ... + - WOW +- Gitlab custom-export.setup + - What about it? + - I am looking for that setup file and want to try it :) + --> + <https://git.rwth-aachen.de/dl/workshops/collaborative-coding-with-emacs/-/blob/main/emacs/custom-export.setup> + - Thank you! +- Truly one of the most impressive talks of the day. Congrats! Very + inspiring + - Yes, indeed. + - (Lukas) Wow! Thank you. We werent sure if this is worth showing + at EmacsConf because there already have been plenty of talks + about literate programming and org-babel.... + - Great collaborative conversation and step-wise example + creates a different (and impactful) framing. Thank you! +- crdt is fantastic; pity that most (all but one) of my collaborators use Word & VS Code. 🙁 +- that's really cool. One of the parts that's a bit hidden from the user is seeing the format that the data is in inside the shell script +- it is whatever constitutes the closest equivalent of table in sh (array) + - yeah, you have to keep the representation in mind when filtering it as text through sed +- this demo is so cool :D +- Really, really impressive I have to admit +- HA. you cannot evaluate in place so seamlessly in that way with Rmarkdown :). And you cannot combine named blocks in this way either. Wish more folks used emacs. +- wow, so `#+CALL` can be embedded in text via `call_()?` TIL +- such a slick presentation, I like the CRDT collaboration angle, looks like an end-game UX +- Impressive workflow! +- great presentation! +- For those of you who remember the bad old days before "reproducible research," that talk is even more impressive. Great job! + - i was prolly not there in the bad old days, but imho reproducible research is a pressing, current problem. +- I feel like that talk video should be shared on Hacker News + + +[[!inline pages="internal(2023/info/collab-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/collab-nav)" raw="yes"]] + + diff --git a/2023/talks/core.md b/2023/talks/core.md new file mode 100644 index 00000000..a413a3c2 --- /dev/null +++ b/2023/talks/core.md @@ -0,0 +1,179 @@ +[[!meta title="Emacs core development: how it works"]] +[[!meta copyright="Copyright © 2023 Stefan Kangas"]] +[[!inline pages="internal(2023/info/core-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs core development: how it works +Stefan Kangas + +[[!template id="help" +summary="main talk does not have captions" +tags="help_with_main_captions" +volunteer="jchelary 2024-01-10" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-core--emacs-core-development-how-it-works--stefan-kangas--main.vtt)."""]] + +[[!inline pages="internal(2023/info/core-before)" raw="yes"]] + +- Why it is fun and exciting to contribute to Emacs + - We have easy bugs that anyone can fix, in random packages + - And extremely hard ones for experts in things like garbage + collection, and compilers +- We are not scary, in fact working to build a welcoming culture. +- The nature of a public list + - Don't listen to random people being negative or hostile + - No response is not necessarily a bad thing +- Cultural aspects of emacs-devel vs GitHub +- How to behave (be polite, etc.) +- Email vs forge, help wanted. +- Why copyright assignment +- Plans for Emacs 30 (maybe) - needs coordinating with Eli + +If I have more time, I'd like to cover more things, for example: + +- GNU ELPA vs NonGNU ELPA - why and how + - Our plans for GNU ELPA going forward (bundle stuff in tarballs) +- The future of Emacs: a vision + +Basically, I want to do everything I can to inspire people to join core +development and to lower the barrier to participating. In effect trying +to work on "bridging the gap" that we have identified exists between +emacs-devel and the community. + +About the speaker: + +Stefan Kangas is one of the Emacs core maintainers. + + +# Discussion + +## Questions and answers + +- Q:Can you tell us some about your background with Emacs development + and programming in general (your professional work possibly)? + - A: studied CompSci at university. started programming on a + Commodore 64, then C, Perl, and so on +- Q: Do you think that one day, there will be a "native" graphical + web browser in Emacs or is it kind of against its philosophy and + architecture? So will we stick just with EWW and EAF or similar + workaround tricks? + - A: Proper HTML rendering in Emacs is a dream right now +- Q: Emacs development and communication still is very much focused on + E-Mail mailing lists. I like this. But what do you think about + introducing other channels for talking to users? E.g., the Emacs + project/ community could set up a Mastodon instance of its own etc. + - A: +- Q: What are some features or packages you'd like to see developed + by the community? + - A: Some of the things that Stefan would like to see happen right + now + - treesitter: improving and working on new modes + - refactoring capabilities in Emacs +- Q: What is the hardest decision being made within Emacs-dev for last + three years? + - A: +- Q: Any plans to integrate EXWM into core? Emacs is a really good WM. + - A: +- Q: Do you think it is a good idea to choose Org-mode for writing + documentation instead of Texinfo? + - A +- Q: What do you plan to work on in Emacs core in the future? + - A: +- Q: What do you use Emacs for in your life, other than working on + Emacs itself? + - A: Programming, obviously (Stefan works as a programmer). + org-mode (including to prepare this talk), for productivity, rss + reader, emails. +- Q: What could we do in order to make Emacs more attractive for + younger users? + - A: +- Q: How are we going to make sure that the cool idea is going to pass + it through for the next generation, let's say 20 years later, that + generation still have the good knowledge we have today. + - A: +- Q: If you're willing to discuss it, what do you think about the + recent controversy about use of cl-lib in Emacs core code? + - A: Stefan's opinion is on emacs-devel. +- Q: When we find a bug, in our emacs.... do we need to try to + replicate it on the sid version (debian/sid=1:29.1+1-5 at ehe time + of writing), then update all the usual lisp package we use... and + if we succeed to replicate the bug in this version, only then go to + the development version 30 and do the same ? Then only, ask for + assistance in reporting the bug we found ("M-x report-emacs-bug" + will be sufficient ) ? + - A: (Answering for Stefan, because information about how to + report Emacs bugs is widely available, including in Emacs's own + documentation: You should try to reproduce it on the latest + released version of Emacs, with a clean Emacs configuration + (i.e. "emacs -q"), before reporting. And you should look for + existing bug reports on the tracker. If you have extra time, + consider trying to reproduce it on the master branch or the + branch for the next release as well. And if you're sure + you've found a bug, be sure to report it using "M-x + report-emacs-bug" rather than just emailing emacs-devel about + it.) +- Q: On branching off sub-threads. I note that they are less visible + compared to starting a new thread in practice. I am wondering if it + is just my impression or something devs also observe. + - A: +- Q: What about rewriting emacs in Rust? Use guile instead of elisp? + Multi-threaded emacs? Make emacs prettier and shiny? And of course, + sane defaults! Just kidding. We are spoiled children because you and + Eli, Lars, etc. do an impressive work. I live in Emacs since 2001. + Thanks! + - A: +- Q: The only downside I see with copyright assignment is that one has + to disclose their real identity. Would it be a possibility to assign + copyright under a nickname? + - A: (not the speaker) FSF said they can publish a pseudonym but + need the actual identity in their paperwork, which will be + presumably protected, but it's not totally anonymous. + - (AFAIK from Bastien) The actual FSF assignee list is not + public - I know that it is available to maintainers, but + must not be shared. +- Q:Do you think it is possible to reach an agreement on sane defaults + for better out of the box experience? + - A: It's more of a social problem than a technical problem (my + sane defaults might not be yours). +- Q:Will xwidgets have a future? Seeing the new bugs popping up in the + latest xwidget dev. + - A: +- Q: Have you voted for Emacs as the software of the year on the + Tuxies by Jupiter Broadcasting? I did, because Emacs 29 is great! + Thank you! :-) + +## Notes + +- Cambrian explosion of packages (5000 packages in MELPA) + - GNU ELPA <- generally better if someday it might be good to + ship it with Emacs + - João Távora (Eglot author): haven't seen a problem with + copyright assignment + - To be fair, it does happen in certain cases. But + infrequently. + - New package archive NonGNU ELPA is now enabled by default, no + copyright assignment needed +- Emacs is hackable. I think that's a blessing and a curse. The types + of choices you can make when you implement... Different choices + between things like Common Lisp and Scheme. I think we have that + kind of tensions within Emacs. These are good discussions to have. I + think what will never change is that Emacs is hackable. Emacs is + customizable. This is what's bringing you that amazing user + experience. The flip side is that it's easy to hack around bugs + instead of fixing them. Or we accept limitations in Emacs core. I + think we could get better at taking those few extra steps to make + Emacs better for all users. +- Thank you Stefan! That was all really cool! :D +- thank you you guys it's fantastic +- thank you guys to say you amazing is to not give you enough + + +[[!inline pages="internal(2023/info/core-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/core-nav)" raw="yes"]] + + diff --git a/2023/talks/cubing.md b/2023/talks/cubing.md new file mode 100644 index 00000000..b8f11327 --- /dev/null +++ b/2023/talks/cubing.md @@ -0,0 +1,105 @@ +[[!meta title="Speedcubing in Emacs"]] +[[!meta copyright="Copyright © 2023 Vasilij "wasamasa" Schneidermann"]] +[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Speedcubing in Emacs +Vasilij "wasamasa" Schneidermann (he/him) - Pronunciation: [vɐˈsʲilʲɪj] [vazamaza] [ˈʃnaɪ̯dɐman], IRC: wasamasa, Website: <https://emacsninja.com> Fediverse: @wasamasa@lonely.town, <mailto:mail@vasilij.de> + +[[!inline pages="internal(2023/info/cubing-before)" raw="yes"]] + +Emacs is well-known for its kitchen-sink nature and sheer extensibility. +However, its utility for tasks beyond text manipulation is still +disputed. While it is possible to do most of your computing inside +Emacs, the existing solutions are of varying quality. Sometimes it is +necessary to create a custom solution tailored to one's personal needs +and I believe Emacs to be a worthwhile platform for this. + +In this talk I present my journey of building a package to assist me +with speedcubing, a competitive sport with the goal of solving the +Rubik's Cube as fast as possible. Along with a demo, useful Emacs +features and challenges that came up during development will be shown. + + +# Discussion + +## Questions and answers + +- Q: I see that there is a way to document the time it took to + complete the puzzle; however, what about other things such as the + date and time, and potentially a note on technique or warm up + routine etc? It seems like an interface that included these things + would also help people who are practicing and trying to improve. It + would help answer the question... what kinds of things do I need to + do to improve. ;;Thank you for your answer. + - A: Currently, only the timestamp and completion time are + recorded for the puzzle/label. However, I've looked at + twisty-timer and it does record both the used scramble and a + comment field as well, so I plan adding those once the other + features work properly. This would allow keeping track of + particularly good/bad solves for example. +- Q: As a side-note, could you say something about how you use emacs + to help with your cybersecurity or CTF actifivities? Are there some + recommended packages or do you use all of your own templates and + procedures to speed your activity? Maybe just post a link to your + homepage or GH repositories. + - A: It's pretty much only Org usage to document my activities in + a way that I know what I did 3 weeks ago and can pick up my + research from then. I do not use Emacs for source code review + specifically (depending on the target environment, there are + better suited tools). The thing with the field is that often, + one has to resort to work with whatever tools are at hand and to + make the most of them, which is kind of at odds with using Emacs + first and foremost as an integrated environment for everything. + Other than Org, I use it as an editor for pretty much any + programming language I encounter. +- Q: What are the biggest challenges to using transient? + - A: The documentation was very high-level compared to what I'm + used to, so I had to skim it a lot to find out how to use it for + basic tasks. I think it would be useful to have some slightly + more hands-on examples for common tasks. One issue I've run + into a few times was the code using generic functions, so it was + difficult to debug errors (like using a non-interactive lambda + form when a command was expected and getting an unhelpful error + message). + - <https://github.com/positron-solutions/transient-showcase> + might be helpful. + - Definitely, but as I've remarked in the talk, the + examples felt very "generic". Slightly more realistic + examples would make it even better. +- Q: Very cool project. Alas I'm not a cuber, so my question is + merely, what did you learn in the process of making this + presentation? + - A: I've never recorded a demo video happening outside of my + laptop before, so getting the external recording setup right + was... fun. It involved a ladder, several cardboard boxes and + my phone. After five attempts (one of which ended up with the + cube rolling off the desk loudly), I finally got an okayish + recording to use for the presentation. +- Q: Does svg.el support tap events? + - A: svg.el is only responsible for generating valid SVG documents + and one can put whichever tags/attributes there they wish. From + my understanding, anything interactive usually solved with JS in + the browser would need to be rewritten using Emacs Lisp instead. + Tap events for example could be solved with the ":map" + property put on the image and would work for other image formats + than SVG as well. + +Notes + +- There's probably quite a few cubers in here. =) I tend to average 50s on 3x3, the kiddo is usually a bit faster. +- I've recently got a 45s best with LBL +- I have some code in my config to draw last-layer diagrams as SVGs and an Org link thing like #+LINK: pll https://alg.cubing.net/?stage=PLL&type=alg&setup=x_y_z&view=playback&alg=%s to link to algs quickly; https://sachachua.com/blog/2023/02/using-org-babel-to-learn-rubik-s-cube-algorithms/ + - speaker: ah yes, I've had the idea to try out roofpig or cubing.js for doing that in org documents, nice to see it has been done before +- FWIW transient just had a v0.5.0 release which adds and fixes things. It continues to improve thanks to tarsius's tireless work. +- i'm glad you're exploring Emacs UI wasamasa , i've also been confounded trying to write a transient, and its nice to see that sqlite is working for ya +- to be fair, I've considered to just stick to my usual approach of writing boring code that does work on as many machines as possible, but there were so many new features that would help making a nice looking and working package that I decided to just depend on emacs 29.1 + +[[!inline pages="internal(2023/info/cubing-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/cubing-nav)" raw="yes"]] + + diff --git a/2023/talks/devel.md b/2023/talks/devel.md new file mode 100644 index 00000000..6dd8bd2a --- /dev/null +++ b/2023/talks/devel.md @@ -0,0 +1,111 @@ +[[!meta title="Emacs development updates"]] +[[!meta copyright="Copyright © 2023 John Wiegley"]] +[[!inline pages="internal(2023/info/devel-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs development updates +John Wiegley (he/him) + +[[!template id="help" +summary="main talk does not have captions" +volunteer="jchelary 2024-01-10" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-devel--emacs-development-updates--john-wiegley--main.vtt)."""]] + +[[!inline pages="internal(2023/info/devel-before)" raw="yes"]] + +In this talk, John Wiegley will briefly summarize important developments on the road to Emacs 30. He will not be able to answer questions right now, but you can post questions in the pad and he can +follow up after the event. + + +# Discussion + +## Questions and answers + +- Q: Which changes in recent Emacs releases are you enjoying using? + - A: I have really liked the visual-line-mode. I'm not sure how + recent that is. Some of these features I've discovered quite + late. The new display-line-number-mode, much faster. Native + compilation. I do a lot of stuff in Emacs. Native compilation + has brought the experience much closer to a modern app. +- Q: What do you think the future in the area of artificial + intelligence from the developer point of view? + - A: I do use xinside Emacs quite a bit when doing development in + other languages. Ex: working on ledger, haven't done a lot of + C++ lately. Ex: comparing strings only up to the length of the + shortest string. I think in terms of developer assistance, not + having to keep all the libraries in memory... Like Rosetta Code + (<https://rosettacode.org/wiki/Rosetta_Code>). That's a great + database - code in different languages. +- Q: What is the future of Emacs on macOS? I understand that there are + too few developers for the platform. Is that still true? + - A: I do not know exactly what the state of Emacs development on + macOS is, but I have never suffered in any way, using Emacs on + the Mac for decades. +- Q:Why aren't you contributing to Emacs anymore? Lack of time, I + guess? + - A: Lack of free time + - Draft? (story about describing what he wanted, and then someone + ran it through ChatGPT and sent him Emacs Lisp code) <- ChatGPT + example, may increase the efficiency of my free time + - What was the language that you code in now? +- Q: One of the tricky things about running emacs on android is do you + use anything that requires extra packages ex, pdf-tools with + mupdf? - org-roam with a database - playing music or video with mpd + or mpv and bonga, elfeed. Do you run emacs turmux, Emacs apk, emacs + in virtaul machine??? This is also the case on Emacs for windows but + to a lesser degree + - A: (zaeph) We'll put a pin in this for Stefan afterwards. +- Q: Will AUCTeX some day become the default TeX mode in Emacs? And, + if so, when? :) + - A: The downside of moving to core is that your release cycle is + slowed down because you have to go through emacs-devel and the + devel team. So it seems to be up to AUCTeX developers. This can + be troublesome if a package develops rapidly. +- Q: Do you use other IDEs for theorem proving work, notably VS Code + for LEAN? Which languages and provers can/do you use Emacs for? + - A: I have always used Emacs. +- Q: Can we see that AI-generated "Drafts"-like code anywhere? + - A: + <https://github.com/jwiegley/dot-emacs/commit/ab27998dee4cb92c6f660b434b32582e3d2842f9#r113795175> +- Q: Wait, just a quick search over "Draft". Does that mean you're + not using Org anymore? + - okay, I am good now :) +- Q: Speaking of which, do you ever hit the walls in terms of + multithreading issues, and if so when doing what / in what cases? +- Q: was [perl-mode] just abandonned or did cperl bring a new design ? + - Not the speaker: I think someone just started a separate cperl-mode (based on c-mode) and many of us found it worked better, so switched to it. + +## Notes + +- Emacs 29 has been quite a success so far, 29.2 to be released soon +- Thinking about starting Emacs 30 release cycle (emacs-30 will be cut + and development will be frozen with only bugfixes going in); could + take some time +- Not a huge number of changing features, but still some interesting + things +- Android support - native Emacs on a tablet, etc. +- Much better support for touchscreen devices (laptops and tablets) + Interesting, the original design of Hyperbole anticipated iPad-like + devices with each node of information represented by a rounded + square and interconnected in a knowledge graph like Org-roam does, + so maybe we'll do some work in that direction. +- There will be some support for LL(?) +- perl-mode -> cperl-mode +- byte-compiler will warn about more questionable constructs: empty + macro bodies, etc. +- Stefan Kangas is a new co-maintainer (and he'll be giving the next + talk live) +- Thanks John for all the news on Emacs and informative answers. + + +[[!inline pages="internal(2023/info/devel-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/devel-nav)" raw="yes"]] + + diff --git a/2023/talks/doc.md b/2023/talks/doc.md new file mode 100644 index 00000000..a27fe496 --- /dev/null +++ b/2023/talks/doc.md @@ -0,0 +1,69 @@ +[[!meta title="Literate Documentation with Emacs and Org Mode"]] +[[!meta copyright="Copyright © 2023 Mike Hamrick"]] +[[!inline pages="internal(2023/info/doc-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Literate Documentation with Emacs and Org Mode +Mike Hamrick + +[[!inline pages="internal(2023/info/doc-before)" raw="yes"]] + +When writing about programming or other technical subjects, you’re often weaving blocks of source code, program output, and raw data in with your prose. These supplementary materials are usually copied and pasted into your document from other sources, which can be difficult and tedious to keep up-to-date as things change. Inconsistencies and errors can easily creep in when you “hard-code” dynamic information like program output into your writing. + +Wouldn’t it be great if the tool you used for writing knew how to run code in a variety of programming languages, collect and format output, and let you refer symbolically to all this dynamically generated content in your prose? In this talk I’ll demonstrate how to use GNU Emacs’ Org mode to create technical documents that do just that. We’ll explore the features of Babel, Org mode’s literate programming add-on, that makes it convenient to edit, evaluate, and manage embedded code, output, and data all from inside GNU Emacs. + +We'll also show how these literate documents can be exported to LaTeX and ultimately PDF format to create professional looking output that looks stunning when printed or viewed. + +Also shared at SeaGL 2023 + +# Discussion + +## Questions and answers + +- Q: Did you develop a variant of your document for Centos? + - A: +- Q: Great presentation. The preparation is outstanding. For someone + like me that never touched the org--mode side of emacs, what do you + feel its the more complex part to tackle? You made it seem simple + but the complexity there.. woof + - A: +- Q: How do you normally debug, e.g. view the logs or see failed + statuses, when the commands in the src blocks fail? Especially if + they output lots and lots of logs, and you need to see the full + history of the build. + - A: +- Q: Do you find yourself doing plain-text exports? I saw you doing + that as an example for a bit. How do you like to format them so they + come out looking nice? + - A: +- Q: IIUC if you commit that eval line to your config then theoretically you could open an Org file prepared by someone else and it would automatically run the code in a "startup" block that might be malicious, right? + - A: for sure. if you agree to have a block run when you load the document, you could get burned if it changes into something eveil. + +### Notes and discussion + +- Seems like we could use some kind of extension that would hash a source block and allow you to automatically run ones you've marked safe +- Property inheritance I still don't completely understand, heh. +- seeing section on Org MACRO, recall having trouble a while back invoking a MACRO from inside a MACRO; is this a limitation or was I holding it wrong? + - AFAIR, macros do support recursion + - actually my issue was passing TITLE to a MACRO <https://paste.rs/LZunR> + - yeah. "eval" macro arguments in particular are not expanded. you may raise it on the mailing list - looks like something worth considering +- I almost wanted to pre-process my org mode files with a more advanced macro system like m4. But then I came to my senses. + - When discussing Org mode as replacement of TexInfo, it has been rised (Texinfo uses m4) (<https://www.gnu.org/software/texinfo/manual/texinfo/texinfo.html#External-Macro-Processors>) but why do you need m4 when there is Elisp... can just put a code block that will do all the work and eval on export + - A: True. You can write elisp to do all the macro replacement, but you end up editing the buffer when you do that, which has its own disadvantages. + - during export, it is a throwaway buffer + - A: oh, I didn't think of that. Ultimately though org macros have a ways to go before they're truly useful in all context you might want to use them. + - org-export-before-processing-hook runs before macro expansion but around the same time (we really need to document the export process step by step) +- Thanks for the awesome presentation, I can't wait to add some of this stuff to my documents +- I was pretty terrified to see that ChatGPT could write elisp +- Also, loved the presentation — great walk-through of the thought process & how to improve. Was happy when Macros made their way in +- Yeah. tramp would have been cool, but can be dangerous if you start doing sudo apt in the wrong machine +- I tried cross-compiling Emacs for Serenity. Emacs uses some intermediate binaries (like make-docfile) during its build process, which causes issues with cross-compiling that I couldn't quite figure out. + +[[!inline pages="internal(2023/info/doc-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/doc-nav)" raw="yes"]] + + diff --git a/2023/talks/eat.md b/2023/talks/eat.md new file mode 100644 index 00000000..bd548153 --- /dev/null +++ b/2023/talks/eat.md @@ -0,0 +1,141 @@ +[[!meta title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs"]] +[[!meta copyright="Copyright © 2023 Akib Azmain Turja"]] +[[!inline pages="internal(2023/info/eat-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Eat and Eat powered Eshell, fast featureful terminal inside Emacs +Akib Azmain Turja (he/him) - IRC: akib, <https://akib.codeberg.page> +Fediverse: akib@hostux.social, <mailto:akib@disroot.org> + +[[!inline pages="internal(2023/info/eat-before)" raw="yes"]] + +Eat is a terminal emulator for Emacs, written in pure Emacs Lisp. It +can run most (if not all) terminal programs. Despite being implemented +in Emacs Lisp, it is fast enough for day-to-day uses. + +In this talk, I'll give an overview of Eat, its features and +configuration. I'll show the most useful features and the features that +make Eat unique (e.g. shell integration, mouse tracking, Sixel support). +(This may include features that hasn't been implemented yet but will be +implemented and stable enough by the time of the recording of the talk.) +Most of the features require no configuration to use, but are +configurable with user options. I'll also show the most useful +customization options available that users may want to customize or +tinker with. + +Thanks to the architecture of Eat, Eat can emulate terminal within any +region of a buffer. Therefore, Eat can be integrated with Eshell. I'll +show how to integrate Eat with Eshell, and the useful Eshell-specific +features and configuration. + +Then, I'll compare Eat with other terminal emulators available for +Emacs, and I'll show which feature that Eat has but the other doesn't, +and which feature Eat lacks. I'll show why Eat is good or bad for some +users/use cases. For example, why Shell mode users may prefer Coterm (a +terminal emulator for Comint) over Eat, why Eat is better Term mode in +the most cases, or why Vterm should be prefered for huge bursts of +outputs, etc. + +Then I'll give pointers to the documentation available like the Info +manual or README and what they contain. And I'll also discuss what to +do when you hit a problem. I'll discuss about the common problems or +misconfiguration, and also discuss where and how to report bugs +properly. I won't go into much details in this part, since the manual +covers this topic completely, and the users are expected to not +encounter problems. + +Then I'll discuss the future plans of the project. And finally, I'll +conclude the talk with a summary of the whole talk. + +Outline: + +- Introduction: What's Eat and why? +- Installing Eat from NonGNU ELPA +- Demonstrating Eat's features and configuring them +- Eshell integration +- Comparison with other terminal emulators +- Shortcomings and common (fixable) problems +- Future plans +- Conclusion + + +# Discussion + +## Questions and answers + +- Q: Have you thought about upstreaming EAT? + - A: Yes, but I haven't yet completed the copyright paperwork. + - S: Look into it, I think it would be great to have a better + implementation of a terminal OOTB! +- Q: Very impressive! What lessons did you learn while developing + EAT? + - A:I learned how to optimize Elisp code, and also how terminals + work actually. And also process handling in Elisp. +- Q: How long did it take you to develop EAT to this point? + - A:It took around 5 months to make it working at bare minimum. + - Q: Did you have any experience with terminal emulation + before working on EAT? + - A:Not much really. I mean I knew how terminals worked + but I didn't know the escape sequences. +- Q:Impressive work; I look forward to trying it. What did you want + that Vterm did not provide? I think I'll try it today. + - A:The keybindings, specially. And also I wanted Eshell terminal + emulation. +- Q: Is Elisp native-compilation what allows EAT to peform as well as + or better than Vterm, or is EAT even that fast with just + byte-compilation? + - A:I use native-compilation. But Eat is still quite a few times + faster than Term mode when byte-compiled. +- Q: Should it work on Emacs 28.1? + - A:Yes. +- Q: What does EAT do differently than other terminal emulators that + allows it to perform so well? + - A:I don't really know quite clearly. At the time I implemented + the main code, I had plenty of time. I did profiling and tried + various implementations to do the same thing. +- Q: what sparked your interest in Emacs, considering its often + perceived as outdated, and how do its powerful capabilities remain + relevant today? + - A: First of all, it's free software, I have the freedom. And + the IDEs I used to use were resource hogs, so needed something + lightweight. And, after I started using Emacs, I discovered how + powerful it actually is. Emacs is itself a programming + platform, so you can make literally anything with it. +- Q: have you thought about making EAT work with shell-mode? + - A: Yes, I have considered integrating with shell-mode/Comint but + it doesn't work, they need the terminal text to be mutable and + Eat doesn't support that. So I have implemented "line mode," + an input mode similar to shell-mode. +- Q: did the talk show how to show sixel? + +## Notes + +- I found out about EAT a while ago and was excited to find out that + it works so well! Thank you for your great work! +- akib, truly impressive! +- :clap::clap::clap::clap::clap::clap: +- ¡Muy bueno! +- I use eat, and I have almost replace terminal (bash/zsh) with eshell paired with eat +- i use eat but i don't really have anything to say cuz i don't use the CLI nearly as much anymore since learning more emacs stuff. but i still think eat is awesome cuz it is really fast for when i do need it +- I'll be looking into eat more, thanks for the talk! +- demonstrating sixels would have been a surprise for some... +- eat is very easy to try out compared to vterm since there's no foreign code involved +- I was stunned at how fast eat is! +- even without native-comp, it's pretty fast +- eat is the apple equivalent of terminal emulators in emacs: It just works! ;) +- best of both world is, eshell paired with eat +- <http://yeti.freeshell.org/tmp/20231203-155213__emacs_eshell_eat__showing_xkcd_378_via_sixels.png> + - I usd img2sixel wnd some awk glue + - imagemagick can also convert to sixel +- you're the one who helped me with eat and the dumb term line for .zshrc so ty! +- speaker: yes, i have considering integrating with shell-mode/comint but it doesn't work, they need the terminal text to be mutable and eat doesn't support that so i have implemented "line mode," input mode similar to shell mode + + +[[!inline pages="internal(2023/info/eat-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/eat-nav)" raw="yes"]] + + diff --git a/2023/talks/emacsconf.md b/2023/talks/emacsconf.md new file mode 100644 index 00000000..cabe7a6b --- /dev/null +++ b/2023/talks/emacsconf.md @@ -0,0 +1,149 @@ +[[!meta title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference"]] +[[!meta copyright="Copyright © 2023 Sacha Chua"]] +[[!inline pages="internal(2023/info/emacsconf-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference +Sacha Chua (she/her) - IRC: sachac, <https://sachachua.com>, Mastodon: @sachac@emacs.ch, <mailto:sacha@sachachua.com> + +[[!inline pages="internal(2023/info/emacsconf-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emacsconf-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +Go on a whirlwind tour behind the scenes to see how we've been using +large Org Mode files and a bunch of Emacs Lisp functions to organize +and run EmacsConf. You might be able to pick up some ideas about Org +Mode navigation, image and video manipulation, captioning, publishing, +and remote command execution, and then check out the notes to find out +more. + +Resources: + +- [RevealJS presentation with clickable links, etc.](https://sachachua.com/proj/emacsconf-2023-emacsconf/) +- [As one long webpage](https://sachachua.com/proj/emacsconf-2023-emacsconf/exported.html) +- [Presentation org file](https://sachachua.com/proj/emacsconf-2023-emacsconf/index.org) + +# Discussion + +## Questions and answers + +- Q: How "easy" would it be for someone else to reuse the EmacsConf + scripts and config to do a conf of their own? + - A: +- Q: How can speakers and viewers help make preparing for next year's + EmacsConf even more fun for the organizers? + - A: 1. Suggest ideas for talks! They don't have to be big or + complicated. 2. Share the word about things you liked! + - follow-up Q: Would you consider making a demonstration video of + using subed.el? +- Q: What tools would you like to exist in Emacsland to help with + preparing the conference next time? + - A: Etherpad integration with Emacs from an API would be very + helpful, e.g. maybe using crdt.el. Also it would be nice if + subed could be used to fix audio sync issues while editing + subtitles. +- Q: Could you elaborate on the workflow that goes on in your mind for + when approaching these things? Do you start with an Emacs/Org + solution right off the bat at this point, when faced with a task? + Are there some conscious steps involved from early ideas to + automations of the kind you just showed? + - A: 1. Take the time to try to understand and automate a task, + even if you think you're only going to do it once. The + learning process adds up over time and makes future, similar + tasks easier. +- Q: How well does this approach allow for other organizers to do + individual customizations to their liking while still being able to + collaborate effectively? + - A: +- Q:What was the hardest problem you encountered in organizing or + running the conference this year and how did you deal with it? +- Q: Are you seeing year-to-year growth in attendance and after the + conference video watching? You should build the searchable + EmacsConf archive! + - A: "The evil plan is working!" --Sacha Chua, 2023 +- Q: Any chance of an in-person EmacsConf again someday? + - A: I'm not travelling any time soon, but if someone else wants + to organize things, I'll be happy to spread the word and help + with the backstage things. I really like virtual conferences, + though! +- Q: Any suggestions or specific recommendations for hosting an + EmacsConf satellite event? Sorry wait, what was that name again? + - A: +- Q: Do you have any stats on how many people watched, were in irc and + bbb , over those 2 days? + - A: + +TODO check out mcron + +## Notes + +- I talk really quickly! Here's a self-paced RevealJS presentation + with narration and clickable links, etc. + <https://sachachua.com/proj/emacsconf-2023-emacsconf/> + - and as a long HTML page: + <https://sachachua.com/proj/emacsconf-2023-emacsconf/exported.html> + - and the source Org file using org-re-reveal: + <https://sachachua.com/proj/emacsconf-2023-emacsconf/index.org> +- Amazing presentation, Sacha!!! It's wonderful that all of your work + is well-documented. Thank you!!! +- Feedback: toobnix was streaming much better than the webm feeds, so + would be great to expand that. Also, IRC on the web kept + disconnecting me and then I lose all the history. Would be great if + Etherpad could handle all the dialog and then have it archived as + the chats are interesting to review later as well. +- This is my first year attending the conference, it was amazing! All + of the presenters and material were very impressive. And from a + technical perspective, the event was extremely smooth. It was easy + to find the agenda material online, and then use mpv to watch, and + ask questions on etherpad. +- New stuff for EmacsConf 2023: + - Other organizers busy during prep time, so prioritization was + key + - Wrote lots of blog posts on the way to refamiliarizing myself + with the code + - Early acceptance with a week for extra comments + - Two tracks from the start, could give everyone more time + - Moved more mail merge templates into the library + - Added more scripts for handling the sessions, playing talks, + joining Q&A + - Used Spookfox to control Firefox from Emacs: creating BBB rooms, + extracting data + - Phone recordings + subed-align + subed-record-compile-video = + intros, this presentation + - subed-waveform made it more fun to check and adjust the + timestamps + - I still don't like dealing with audio processing or sync + issues, good thing zaeph can handle them + - Reduced coordination needs by opening Q&A right away instead of + waiting for signal + - Used Tampermonkey to automatically connect to BigBlueButton from + streaming user + - Crontab working smoothly; used timers and TRAMP last year + + +- Whatever you do, don't miss out @sachac's talk (this PM or otherwise). I stumbled on it on @bandali's channel following a link to Howard's, and it's a *masterclass* in wrangling things together to automate workflows in Emacs/Elisp/Org. When people ask about VS Code, this shows we are talking different mindsets and tools altogether. +- Yeah! I'm excited for that one. + - So am I.. again! And I'll be rewatching it multiple times too, that's how packed in useful insights and tidbits it is. "What do you mean Emacs/Org is a platform and a way of life?" Well, here you go, great examplar :) +- FYI Emacs now has `with-memoization` + - I use a package (skeeto's?) that has defmemoize and such, is that outdated now? + - Yes, Chris's package was developed years ago, and it's been useful to me as well. Stefan Monnier, IIRC, added with-memoization in...28.1, I think. IIRC there are minor differences but now the built-in one should usually be enough. +- The breadth of use cases and applications, and range of Emacs/Elisp/Org capabilities reached for in this talk is fascinating. +- I had some time to pop into the mentor Q&A, and one of the things that bubbled up from the conversation was that there's always something to be curious about, even if you've been using Emacs for decades. It's not just about the stuff that comes built-in or even in packages, it's also all these different workflows. so it's easy to be perpetually curious and to have lots of fun. + - sachac, Agreed! Not only Emacs, either. For the last several years, I've hosted 1:1s with teammates where they can ask any tech question they want; if I don't know the answer, we figure it out together. And those are my favorite ones. :) + +- So nice to see these practical example of automating workflow with Emacs, great presentation sachac + + +[[!inline pages="internal(2023/info/emacsconf-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/emacsconf-nav)" raw="yes"]] + + diff --git a/2023/talks/emacsen.md b/2023/talks/emacsen.md new file mode 100644 index 00000000..d1b7cc7e --- /dev/null +++ b/2023/talks/emacsen.md @@ -0,0 +1,73 @@ +[[!meta title="The Emacsen family, the design of an Emacs and the importance of Lisp"]] +[[!meta copyright="Copyright © 2023 Fermin"]] +[[!inline pages="internal(2023/info/emacsen-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# The Emacsen family, the design of an Emacs and the importance of Lisp +Fermin (he/him) - <https://codeberg.org/sasanidas> + +[[!inline pages="internal(2023/info/emacsen-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emacsen-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +This talk is about the design of an Emacs the Emacsen editors, GNU +Emacs, Emacs Lisp and the extensibility of GNU Emacs (and Lem as an +example of Common Lisp). I want to focus the talk about the understand +of the concept of Emacs but with concrete examples (GNU Emacs and +Lem), also highlight some historical Emacsen and how the family of +editors is doing today. + +About the speaker: + +I'm Fermin MF, I'm a Software Engineer from Spain with interest in +Emacsy editors. + +# Discussion + +## Questions and answers + +- Q: How large is the LEM community? How big is the chance of it + surviving long term? + - A: +- Q:Are there any Lisp machine capabilities you are trying to revive + that GNU Emacs lacks? The typed objects capability in the editor as + an example. + - A: +- Q: What about using Lem for things other than coding common lisp, + dired magit "notes org mode dentoe org roam" emms pdf tools shell + mode? + - A: +- Q:What about using this in conjunction with Nyxt the common lisp; + web browser + - A: +- Q: What is the license of LEM? + - A: +- Q: Big question, I realize, but: How far is LEM from being able to + run Elisp libraries, e.g. imagine if Magit could "just work" in + LEM? + - A: +- Q: How are LEM buffers designed? Similar to Emacs? TextGrid with + Properties? Or something other? I just tried again to give Emacs + more interactivity & am thinking if there is a possible display + future for the Emacsen. +- Q: What are the things or experances that lem gives you that are + nicer than Emacs? or make you happy using both? + - A: +- Q: (Forgive me if you answered this already.) Do you think Lem will + continue to have a lot of Japanese documentation, or is there a + chance it will move entirely to English? (IMHO having much of the + docs in Japanese will hold back the project.) + - A: + +[[!inline pages="internal(2023/info/emacsen-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/emacsen-nav)" raw="yes"]] + diff --git a/2023/talks/emms.md b/2023/talks/emms.md new file mode 100644 index 00000000..bcb69c9d --- /dev/null +++ b/2023/talks/emms.md @@ -0,0 +1,102 @@ +[[!meta title="Emacs MultiMedia System (EMMS)"]] +[[!meta copyright="Copyright © 2023 Yoni Rabkin"]] +[[!inline pages="internal(2023/info/emms-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs MultiMedia System (EMMS) +Yoni Rabkin - IRC: yrk + +[[!inline pages="internal(2023/info/emms-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="emms-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +- Introduction to Emms: A Practical Introduction +- How Emms Works: The Technical Part +- How We Work: Emms Development + + +# Discussion + +## Questions and answers + +- Q: To warm up, what is the music playing during the lunch break? + - A:(zaeph) Album: *basement days* by shoshin (Grant Shangreaux) + ❤️ + - <https://cicadas.surf/~shoshin/casiopeia/basement%20days/> +- Q: For next emacsconf, could we have an EMMS playlist to follow the + talks along? + - A: +- Q:I I like to use Music and AudioBooks in very different ways. With + music I like shuffling by artist and with AudioBooks want to read + sequentially and pick it the same playlist over a couple of + days/weeks. Do you have any tips for using these 2 opposing media + workflows + - A: + - Q: For audiobooks I use mpv with m4b files +- Q: Is there a way to search your music selection by lyrics-- + assuming those lyrics are in the meta-data or available elsewhere. + It would be neat to call songs up from the lyrics to the song. + - A: For the lyrics: not possible to do right now. The caching + system is extremely naïve. Now, with sqlite3 integration, we + need to expand the cache to be a lot more greedy and lot more + flexible. The rewrite is in progress, and any related + information (including lyrics) will be integrated. +- Q: Are aliases available for the songs that you like? Defining those + aliases or shortcuts either inside or outside emms? ;;BTW: melpa + version of emms is missing; however, I was able to install from + elpa. + - A: We'll put a pin on this +- Q:Are there plans for managing meta-data with online resource + backends; i.e. discogs or musicbrains? What about something like + Beets in Emacs or part of EMMS? + - A: That's an active discussion on the mailing-list right now. + We don't want to replicate what Beets does really well, and we + don't want a clunky interface with Beets. It's hard to tell + where to draw the line. Short answer: yes, we want to do that, + but the long answer is that it's complicated. The backends that + are used are complicated. +- Q: Have the developers considered using Emacs' "Customize" + functionality to persistently store settings when using + emms-setup-discover-players? + - A: Another active project, especially with -discover-players. + It's tough to figure out what is a good way to not annoy people + too much. +- Q: Is there a way to store a bookmark pointing to a song in a + playlist? + - A: +- Q: I like what you said about balancing the concern for software + freedom with the worry that this might alienate the package user. I + was wondering if you have advice for other maintainers on how to + communicate this sort of thing diplomatically, when you have to deny + implementing a feature for a "freedom" reason. + - A:I found that people appreciate knowing where the project + stands. But care needs to be taken to be descriptive and not + perscriptive; explain why your project is like that as opposed + to making them feel judged. Some people are ornery and will get + upset anyway, but that's a part of working within the public + eye. +- Q: i wonder if it would be possible to add fluidsynth as a backend for emms to play midis + - A: I can add a fluidsynth backend to the tasklist no problem. right now, emms-player-fluidsynth works, but only with basic play/stop/pause support. I assume you are looking for more features than that. emms-player-simple.el defines a few, appropriately named, simple interfaces to some midi players such as fluidsynth and timidity +Notes: + +- This guy has <chefs-kiss> taste in music, by the way. Take it from me, I'm a big snob + - i like how it was a bunch of classical and then Tool :) +- Brilliant 👏 +- Amazeballs 👏 +- oh that's a good idea +- I just really enjoy seeing the folks that contribute to free software. They are truly people to emulate. That goes double for Yoni. +- someone on the pad mentioned there not being an EMMS package in MELPA, that is intentional, since EMMS is built into Emacs, and we have the newest version in ELPA + +[[!inline pages="internal(2023/info/emms-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/emms-nav)" raw="yes"]] + + diff --git a/2023/talks/eval.md b/2023/talks/eval.md new file mode 100644 index 00000000..0758cc7a --- /dev/null +++ b/2023/talks/eval.md @@ -0,0 +1,77 @@ +[[!meta title="Editor Integrated REPL Driven Development for all languages"]] +[[!meta copyright="Copyright © 2023 Musa Al-hassy"]] +[[!inline pages="internal(2023/info/eval-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Editor Integrated REPL Driven Development for all languages +Musa Al-hassy (he/him) - Pronunciation: moo seh, <http://alhassy.com/> <https://github.com/alhassy>, <mailto:Alhassy@gmail.com> + +[[!inline pages="internal(2023/info/eval-before)" raw="yes"]] + +Emacs’ C-x C-e is arguably one of its killer features: The ability to run +arbitrary Lisp code, anywhere. We demonstrate that the **idea** is portable +to other languages [0, 1]. The result is an Emacs interface for any +language, where code of your choosing is evaluated, and results are echoed +at your cursor in overlays. We will demonstrate how to solve simple +problems such as FizzBuzz in a RDD style using, say, Java or any language +that the audience chooses. We will also look quickly at "growing programs" +such as a photo gallery application, starting from scratch. Along the way, +we discuss what features make a RDD system pleasant and how they can be +implemented with our system. Finally, we conclude with how this RDD setup +allows for inserting results of a computation as a use case for writing +tests —i.e., we we show how user-definitions of a read protocol (the 'R' +of 'REPL') can result in an analog of C-u C-x C-e. + +[0] 💐 Repl Driven Development: Editor Integrated REPLs for all languages 🔁 + +<http://alhassy.com/repl-driven-development> + +[1] REPL Driven Development :: Teaching a JavaScript runtime, +incrementally, to be a web server 🍽️ 🔁 � + +<https://youtu.be/b6Z3NQVn4lY?si=MTMJDSdzszhbA267> + +About the speaker: + +Musa is an Emacs afficando. His day job is with Java, but his heart is with +Lisp. His experience with interactive programming is only with Agda [2] +and Emacs Lisp [3], and both [4]. + +[2] Graphs are to categories as lists are to monoids + +http://alhassy.com/PathCat.html + +[3] A Life Configuring Emacs + +http://alhassy.com/emacs.d/ + +[4] Making Modules with Meta-Programmed Meta-Primitives +http://alhassy.com/next-700-module-systems/prototype/package-former.html + +# Discussion + +## Questions and answers + +- Q: I know that there are many packages for creating graphics with + Javascript, but I don't know how to use any of them... is it + possible to use your package to create graphics in Javascript step + by step from Emacs? + - A: +- Q: Can you summarize what languages your packages support and do you + have a common framework for interfacing to their interpreters? + - A: +- Q: Did you get the job? =) Did the interviewer have any feedback + about your screen-sharing-driven development? + - A: +- Q: Could you compare your package to Language Servers (LSP)? They + seem to have similar functionality to your package. + - A: + +[[!inline pages="internal(2023/info/eval-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/eval-nav)" raw="yes"]] + + diff --git a/2023/talks/extending.md b/2023/talks/extending.md new file mode 100644 index 00000000..41a962aa --- /dev/null +++ b/2023/talks/extending.md @@ -0,0 +1,34 @@ +[[!meta title="GNU Emacs for electronics, note-taking, and as lightweight IDE"]] +[[!meta copyright="Copyright © 2023 Anand Tamariya"]] +[[!inline pages="internal(2023/info/extending-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# GNU Emacs for electronics, note-taking, and as lightweight IDE +Anand Tamariya + +[[!inline pages="internal(2023/info/extending-before)" raw="yes"]] + +I've been working on a plethora of ideas around extending Emacs. Since they +are highly disparate ideas, I think the small videos can fit in as fillers +/ lightning talks. Below are some playlists containing the proposed videos +on Youtube. + +GNU Emacs for Electronics +<https://www.youtube.com/playlist?list=PLW9poAEUvGDC7ZWO69qrwRMqdW2xYLsGt> + +GNU Emacs for Note taking +<https://www.youtube.com/playlist?list=PLW9poAEUvGDDxCZX-3xIQ3Wb1HOVcg7N>_ + +GNU Emacs as a lightweight IDE +<https://www.youtube.com/watch?v=d14tLD5XiCU&list=PLW9poAEUvGDAMYvvznljaNtvooaJZxsFQ&pp=gAQBiAQB> + + + +[[!inline pages="internal(2023/info/extending-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/extending-nav)" raw="yes"]] + + diff --git a/2023/talks/flat.md b/2023/talks/flat.md new file mode 100644 index 00000000..bf579540 --- /dev/null +++ b/2023/talks/flat.md @@ -0,0 +1,69 @@ +[[!meta title="A modern Emacs look-and-feel without pain"]] +[[!meta copyright="Copyright © 2023 Pedro A. Aranda"]] +[[!inline pages="internal(2023/info/flat-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# A modern Emacs look-and-feel without pain +Pedro A. Aranda (he) + +[[!template id="help" +summary="main talk does not have captions" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-flat--a-modern-emacs-lookandfeel-without-pain--pedro-a-aranda--main.vtt)."""]] + +[[!inline pages="internal(2023/info/flat-before)" raw="yes"]] + +In my talk I will show how to enrich themes without having to write them +from scratch, using the flat-button style. This gives you the possibility +of creating a nice Emacs GUI with minimal extra ELISP. + +About the speaker: + +Pedro A. Aranda is a 30+ year Emacs user, who started on an HP mainframe +and soon started using the DJGPP port of emacs on a 386 at home. Currently +lecturing at a university in Madrid, he uses emacs for most of his teaching +activities. + +# Discussion + +## Questions and answers + +- Q: Do you plan to upstream this style into core Emacs? + - A: It's in core emacs +- Q: How difficult is it to modify face styles like this internally? + - A: It's very simple, just set the :style of the :box face + attribute. +- Q: How much work was involved in implementing this style internally + in Emacs core? + - A: About a 20-line patch. +- Q: Could you please share the code for copy and paste? Thx! + - A: + - (defun flat-style(theme &rest args) + - (custom-set-faces + - `(mode-line + - ((t (:inherit mode-line + - :box (:line-width ,mode-line-height :style + flat-button)))) t) + - `(mode-line-inactive + - ((t (:inherit mode-line-inactive + - :box (:line-width ,mode-line-height :style + flat-button)))) t))) + - (advice-add 'load-theme :after #'flat-style) +- Q: Do you teach Emacs to any of your university students? + - A: No teaching, but a lot of introdcuing ;-) + +## Notes + +- It looks great, thanks for upstreaming it in GNU Emacs core as well! + + +[[!inline pages="internal(2023/info/flat-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/flat-nav)" raw="yes"]] + + diff --git a/2023/talks/gc.md b/2023/talks/gc.md new file mode 100644 index 00000000..dac7add0 --- /dev/null +++ b/2023/talks/gc.md @@ -0,0 +1,134 @@ +[[!meta title="emacs-gc-stats: Does garbage collection actually slow down Emacs?"]] +[[!meta copyright="Copyright © 2023 Ihor Radchenko"]] +[[!inline pages="internal(2023/info/gc-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# emacs-gc-stats: Does garbage collection actually slow down Emacs? +Ihor Radchenko (he) - Mastodon: <https://emacs.ch/@yantar92>, <mailto:yantar92@posteo.net> + +[[!inline pages="internal(2023/info/gc-before)" raw="yes"]] + +Talk sources, PDF, raw data, and analysis are published at <https://dx.doi.org/10.5281/zenodo.10213384> . + +Is Emacs responsiveness really affected by slow garbage collector? +Should `gc-cons-threshold' be increased during startup? +Or maybe during the whole Emacs session? + +I will try to answer these questions using the real data collected from +Emacs users who installed +<https://elpa.gnu.org/packages/emacs-gc-stats.html> package and submitted +their results to <https://lists.gnu.org/archive/html/emacs-gc-stats/>. + +About the speaker: + +Materials science researcher, Org mode users since many years ago, Org +mode (unofficial) co-maintainer :) + +The talk is an excuse to sum up emacs-gc-stats data for later discussion +of changing Emacs GC defaults: +https://yhetil.org/emacs-devel/87v8j6t3i9.fsf@localhost/ + +# Discussion + +## Questions and answers + +- Q: Are the GC duration statistics correlated with users? I mean: + does the same user experience GCs of various durations, or do some + users experience GCs of >0.2 s exclusively while others never + experience GCs of >0.2 s? + - A: Some users have <0.1 GC time, while others struggle with + near 1 sec. Really varies. But the number of people + with >0.2sec is significant enough to make GC a big deal. You + can check it yourself - there are GC stats plots for each + individual user in <https://zenodo.org/records/10213384>. +- Q:Having recently been working on a high-performance smooth + scrolling mode, which needs to respond to scroll events + arriving >50-60 times per second, a 100ms delay is *very* + noticeable in this scenario. For normal buffer interation and + commands 0.1s a reasonable dividing line, but I'd estimate you can + easily feel a 20ms delay during varoius "fast" interactions. Do + you think there is hope to "spread out" GC latency to keep it + below say 15ms, even if more frequent (without just repeating many + short GC's in a row)? + - A: The only reasonable "spread out" is deferring GC to + _after_ that scrolling. Like (let ((gc-cons-threshold <large + enough number to avoid multiple GCs>)) (do the scrolling)). + This is also what recommended by Emacs devs (AFAIR). +- Q:Opinions about gcmh-mode? + - A: (Not Ihor): Ironically it uses too many timers, creating + garbage of its own. It should use `timer-set-time` instead of + creating and throwing away timers after each command (via + `post-command-hook`) Interesting! + - A: (from Ihor): the problem is it ends up consuming a ton of + memory, increasing GC time, and that most GCs occur when Emacs + is being used intensively and there is no chance for Emacs to go + on idle and perform the GC. Since GC cons threshold is raised to + ~1G (gcmh-high-cons-threshold) while Emacs is used - you will + face a really bad hang (seconds to tens of seconds regularly). + Ends up not helping much, recommend increasing + gc-cons-percentage=0.2 or so instead. +- Q: + - A: +- Q: Is there some way to free up memory (such as via + `unload-feature`) in Emacs? Often I only need a package loaded for + a single task/short period but it persists in memory afterwards. + - A: <https://elpa.gnu.org/packages/memory-usage.html>, and + built-in M-x memory-report - most of the time, it is some + history/cache variables of large buffers that are occupying + memory. The library code itself is rarely affecting GC. (The + other question is when libraries add timers/heavy mode-line + constructs/post-command-hooks/etc - that's indeed a problem, + but solved by disabling or not using a package; no need to + unload) +- Q: Very nice presentation! I just experimented with the threshold + and lowered my gc-elapsed from 1.1 to 0.06 seconds (during startup). + Interestingly, going to 10MB increased the time, 4MB was the + sweet-spot for my system. What is the recommended way to lower the + value back to the default value after startup is complete? + - A: after-init-hook +- Q:what were you using to flip through the PNGs? (thanks for the + answer. look-mode on melpa does that too ;) + - A: []{.underline} + [[https://feh.finalrewind.org/]{.underline}](https://feh.finalrewind.org/) +- Q: What was the final point you were making regarding Emacs 30? You + got cut off... + - A: M-x malloc-trim +- Q: With 16-32G RAMs a minimal OS swapping, how about systematically doing this temporary deferral @yantar92 suggested and leave it down for a longer GC at night and whatnot? Or would cons/allocation also degrade too noticeably? + - Not the speaker: That would cause Emacs to use a lot more total memory + - Indeed. Essentially the question is at what point all my daily mostly-textual Emacs usage doesn't come close to using all the available memory on a 32G sys? (but my mind went more to being concerned about new cons/alloca and fragmentation for the intra-day use) I'll have to look into it more before being cogent. One more onto the todo list then :) + - A: for increasing thresholds up to RAM limits, do remember that individual GC time will increase - with 32Gb RAM you will likely make individual GC prohibitedly slow sooner than later. I'd say that it only makes sense to increase the thresholds when you have multiple agglomerated GCs. Going beyond this is of little use. (I am thinking about adding some kind of summary statistics command to emacs-gc-stats, so that one can look into GC duration, frequency, init time, and agglomeration and then adjust the settings according to the results) + +## Notes + +- <https://elpa.gnu.org/packages/emacs-gc-stats.html> +- Data, presentation, and analysis: + <https://dx.doi.org/10.5281/zenodo.10213384> +- This presentation is a direct continuation of emacs-devel thread: +- <https://yhetil.org/emacs-devel/20230310110747.4hytasakomvdyf7i@Ergus/> + - At some point, Eli asked to collect GC statistics - + <https://yhetil.org/emacs-devel/83y1n2n11e.fsf@gnu.org/> + - <https://elpa.gnu.org/packages/emacs-gc-stats.html> and my talk + summarizing the results are the answer to that request. + - Now, we can continue the discussion on emacs-devel with real + data at hand :) + - I hope to push for a temporary bump of `gc-cons-threshold' + during Emacs init and possibly for increasing + `gc-cons-percentage'. +- Came for clear-cut magic bullet answers, left with nuanced analysis - and that, surprise, Eli was overall right? Now what to do with that viral gc init snippet that I've never taken time to measure myself but keep anyway... + - A: I do believe that temporarily raising thresholds is ok for init time. that's the only clear-cut conclusion, unortunately +- Thanks yantar92, both for the detailed investigation and exposition. I've been deferring to much-smarter-than-me Henrik for my default position (Doom has it in it's init), for lack for doing any measurements myself. +- Thanks for your work on this project. Very thorough. +- Definitely a huge extra thanks for the tireless Org-mode work yantar92! +- A: Do not take things Doom does blindly. I am still horrified by let-binding major-mode + - Good advice, thanks. I don't personally (more of a vanilla/DIY type myself), but I'd be remiss to leverage Henrik's insights nonetheless :) +- A: (fun fact: memory-info tries to get memory information on remote system when connected via TRAMP) ... not a problem (anymore; after that very surpising bug report) for emacs-gc-stats + + +[[!inline pages="internal(2023/info/gc-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/gc-nav)" raw="yes"]] + + diff --git a/2023/talks/hn.md b/2023/talks/hn.md new file mode 100644 index 00000000..4bc7f038 --- /dev/null +++ b/2023/talks/hn.md @@ -0,0 +1,36 @@ +[[!meta title="The many ways to browse Hacker News from Emacs"]] +[[!meta copyright="Copyright © 2023 Mickael Kerjean"]] +[[!inline pages="internal(2023/info/hn-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# The many ways to browse Hacker News from Emacs +Mickael Kerjean - <mailto:mickael@kerjean.me> + +[[!inline pages="internal(2023/info/hn-before)" raw="yes"]] + +There's so many ways one can use Emacs to do something. Want to browse +around Hacker News? + +from the plain standard emacs: + +- browser based solutions: M-x xwidget-webkit-browse-url and M-x eww +- using gnus +- using eshell +- using org mode + +with some other packages + +- nnhackernew +- hackernews +- and probably more! + + + +[[!inline pages="internal(2023/info/hn-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/hn-nav)" raw="yes"]] + + diff --git a/2023/talks/hyperamp.md b/2023/talks/hyperamp.md new file mode 100644 index 00000000..341743aa --- /dev/null +++ b/2023/talks/hyperamp.md @@ -0,0 +1,121 @@ +[[!meta title="Top 10 ways Hyperbole amps up Emacs"]] +[[!meta copyright="Copyright © 2023 Robert Weiner"]] +[[!inline pages="internal(2023/info/hyperamp-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Top 10 ways Hyperbole amps up Emacs +Robert Weiner - Pronunciation: like fine 'wine' and 'er', <https://gnu.org/s/hyperbole> <https://github.com/rswgnu/hyperbole>, <mailto:rsw@gnu.org> + +[[!template id="help" +volunteer="sachac" +summary="main talk does not have captions" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-hyperamp--top-10-ways-hyperbole-amps-up-emacs--robert-weiner--original.vtt)."""]] + +[[!inline pages="internal(2023/info/hyperamp-before)" raw="yes"]] + +We will count down the top ten ways that GNU Hyperbole can improve your +Emacs productivity and experience through: + +- its magical ability to turn ordinary text into hypertext + +- its legal-style auto-numbered outlining + +- its fast, record-based lookups + +- and its rapid, programmable ability to control all of your frames and windows. + +Hyperbole has no required external package dependencies and is +compatible with and tested against every major Emacs version from 27 +to the latest master branch and works on every major computer +operating system and window system in use today, so you can run it +regardless of your environment. + + +# Discussion + +## Questions and answers + +- Q: Do buttons keep their metadata within the same file? E.g. would I + see it if I change to fundamental-mode? + - A: Summarizing: if it's an explicit button the metadata is in a + different file in the same directory, ".hypb". If it's an + implicit button, no, no metadata in the buffer; such buttons + have no metadata, Hyperbole creates all of the button properties + from the existing text in the buffer. +- Q: Is it possible to link to a file by its ID (denote, Org ID, or + some similar unique string inside)? + - A: +- Q: Re: the frames example: any thoughts or consideration for a + transient interface? Or, is this something one could already toggle? + - A: Hyperbole predates many of the newer features and packages + and Emacs but they integrate as they find them useful for + Hyperbole. They think the current minibuffer menu is pretty good + and don't have plans to have a transient menu +- Q: Re: multi-file search functionality. Why not implementing it + within the existing framework of M-x grep or similar built-in + commands? Yet another search interface sounds a bit redundant. + - A: + - The point is: why not upstream search interface? +- Q: + - A: +- Q: Hyperbole's been around for a number of years now. What + inspired you to write it back around the time of its birth? + - A: Born before the Web. The Web was born in the middle of a + Hyperbole version's development. Seemed like an explosion of + unstructured information was imminent, e.g. needing to deal with + many emails, non-database-structured info. Needed a general + system that could work with other general systems like emails, + document production. Was researching at a university on + "Personalized Information Environments" (PIEs). PIEs was an + architecture with managers (like Hyperbole) and point tools that + would leverage the managers (e.g. an email reader as a point + tool to leverage the hypertext manager). Wrote a Gmail-like + system years before Gmail (also similar to Rmail). Allowed + buttons embedded in Rmail drawn from the subject of the email + message. Rule-based processing was included, etc. +- Are you familiar with embark package? I think there is some + overlapping functionality with Hyperbole. + - A: Yes, recently started using it. Have talked to oantolin + (Omar Antolin Camarena), the author. Thinks that Embark and + Hyperbole are compatible, much like Hyperbole and Org are. All + of these tools can be used together well. +- Q: Wow. What you are describing now reminds me a lot about HyperCard + that I grew up on. Do you know if Hyperbole inspired Bill Atkinson + or if you were inspired by HyperCard? Or were there just a lot of + thought about hypercontextuality around that time? + - A: Bob's research on PIEs was seen by Apple and helped to + inspire their work on the Newton, which later also inspired the + iPhone, et al. +- Q: Is it possible to only use one feature of hyperbole without the + others (i.e. using only the implicit/explicit buttons without + hycontrol, hyrolo...)? (without having to rewrite part of the code + in hyperbole) in order to be able to load a smaller hyperbole + (hyperbole is now quite large). +- Q: Is there a link to the video for this talk? I woke up too late for + it! It was done live, so the recording will be added after the + conference organizers have time. + - Should now be up at <https://emacsconf.org/2023/talks/hyperamp> + +- thanks bob i heard about hyperbole long time ago now it is time to revisit with this beautiful presentation +- nice presentation, bob! +- no metadata no problemo +- Q: for anyone who uses hyperbole is there a way to delimit a button like you create text that is shaped like a button but you don't want it to be a button? +- i'm intersted in hyperbole it's on my todo list of looking into for emacs stuff +- Great talk thank you bob! +- thanks for showing hyperbole, always been curious about it. makes me think there's an overlap with ffap, hyperbole and even treesitter in a way +- i'm going to look into hyperbole for sure now. it's been on my to do list +- Bob has a long history of doing impressive work :) +- I didn't know about rsw other packages, look at that <http://ftp.ntua.gr/mirror/python/workshops/1996-06/papers/h.pasanen/oobr4.html> + + +[[!inline pages="internal(2023/info/hyperamp-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/hyperamp-nav)" raw="yes"]] + + diff --git a/2023/talks/hyperdrive.md b/2023/talks/hyperdrive.md new file mode 100644 index 00000000..9c70a791 --- /dev/null +++ b/2023/talks/hyperdrive.md @@ -0,0 +1,194 @@ +[[!meta title="hyperdrive.el: Peer-to-peer filesystem in Emacs"]] +[[!meta copyright="Copyright © 2023 Joseph Turner and Protesilaos Stavrou"]] +[[!inline pages="internal(2023/info/hyperdrive-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# hyperdrive.el: Peer-to-peer filesystem in Emacs +Joseph Turner and Protesilaos Stavrou, <https://ushin.org> xmpp:discuss@conference.ushin.org (XMPP MUC for USHIN discussion), <mailto:joseph@ushin.org> + +[[!inline pages="internal(2023/info/hyperdrive-before)" raw="yes"]] + +This talk explores [hyperdrive.el](https://ushin.org/hyperdrive/hyperdrive-manual.html), an Emacs interface to [hyperdrive](https://docs.holepunch.to/building-blocks/hyperdrive), a +peer-to-peer shared filesystem. + +Peer-to-peer networks give you the freedom to choose your sources of +information and to communicate directly with them. Emacs is a +[freedom-respecting](https://www.gnu.org/philosophy/free-software-even-more-important.html) text editor/operating system that puts you in the +driver's seat. By bringing these two worlds together, hyperdrive.el +aims to inspire deliberation about digital communication freedom. + +Hyperdrives are peer-to-peer shared folders, well-suited for data that +changes over time, like personal blogs. It complements Bittorrent and +IPFS, which work best with unchanging data, like journal archives. + +Here's a scenario: Alice creates a new hyperdrive and adds some files. +Her computer returns a public key URL that uniquely identifies the +hyperdrive. Alice shares that URL with Bob, who can then download +Alice's files directly from her computer. No third-party servers are +required to route the connection. + +Data is distributed among peers; once Bob has loaded Alice's files, +Carol can get them from Bob (or anyone else who has a copy) even when +Alice is offline. Drives are mutable; when Alice adds/removes/changes +files in the drive, Bob can refresh her drive on his machine to get +the latest changes. Drives are versioned; anyone with the URL can +"check out" prior versions of Alice's drive to see what her files used +to look like. + +Currently supported features in hyperdrive.el include: + +- [directly edit hyperdrive files](https://ushin.org/hyperdrive/hyperdrive-manual.html#Write-to-a-hyperdrive) +- [dired-like directory view](https://ushin.org/hyperdrive/hyperdrive-manual.html#Directory-view) +- [org-mode link support](https://ushin.org/hyperdrive/hyperdrive-manual.html#Org-mode-links) +- [version history navigation/diffing](https://ushin.org/hyperdrive/hyperdrive-manual.html#View-the-hyperdrive-version-history) +- [built-in bookmark.el integration](https://ushin.org/hyperdrive/hyperdrive-manual.html#Bookmark-a-hyperdrive) +- [local directory mirroring](https://ushin.org/hyperdrive/hyperdrive-manual.html#Mirror-a-whole-directory) +- [audio/video streaming](https://ushin.org/hyperdrive/hyperdrive-manual.html#Stream-audio-and-video) + +Planned features include: + +- peer discovery (swarming) +- diffing directories between versions + +Check out [the manual](https://ushin.org/hyperdrive/hyperdrive-manual.html#Installation) for installation instructions! + +You're welcome to join our public XMPP chat room! + +- xmpp:discuss@conference.ushin.org ([Join anonymously from your browser](https://anonymous.cheogram.com/discuss@conference.ushin.org)) +- #_bifrost_discuss_conference.ushin.org:aria-net.org (Matrix bridge) + +Bugs can be submitted to the [ushin issue tracker](https://todo.sr.ht/~ushin/ushin). Patches, comments or +questions can be submitted to the [ushin public inbox](https://lists.sr.ht/~ushin/ushin). + +About the speaker: + +I'm Joseph Turner. I enjoy fiddle, Aikido, peer-to-peer networks, +Emacs, and swimming in cold water. I work with [USHIN](https://ushin.org/), a tiny +educational US nonprofit whose mission is to promote personal, +community, and global health through free and open universal shared +information for everybody. This year, we're focusing on the +hyperdrive.el project, with the goal of bringing Emacs and +peer-to-peer together. + +I am Protesilaos. Friends call me "Prot" and you are welcome to do the +same. I have been an Emacs user for ~4 years. I use Emacs full-time for +practically every aspect of my computing. I am the author and maintainer +of several packages for Emacs and am enthusiastic about its potential +for user freedom. + +# Discussion + +## Questions and answers + +- Q: It's not clear how hyperdrive (not hyperdrive.el) works. Do I + need to install something on my computer to use it? Can I use it + from my phone? + - A: Like the emacs transmission client connects with the + transmission-daemon, hyperdrive.el connects with the + hyper-gateway daemon. + - Accessing hyperdrives on mobile: + <https://github.com/AgregoreWeb/agregore-mobile> +- Q: What lessons have you learned while developing hyperdrive.el? + - A: Great support and guidance from talented folks like Adam, + Mauve, Jonas, Prot!! +- Q: I use multiple computers and my partner also would like acess to + my notes. so 2 questions. How well would this work with using this + to editing my zettelkasten hyperdrive using multiple computers + - A: Hyperdrives are single-writer, so you'd be better off + linking between drives. In the future, we plan to add support + for <https://github.com/nobiot/org-transclusion> to + hyperdrive.el. + - Q2: How well would it work if my and my partner worked on the + same hyperdrive zettelkasten + - A: If you linked between drives, it could work quite well! +- Q: What would be a good way of getting Hyperdrives if you don't + want to install NPM and hava a binary. Could you compile it with + deno or the "rust or zig or go?" cli alternative tool? I would + prefer to download a single binary. + - A: Jonas has been using hyper-gateway installed with a `guix + shell` command. Thank you, Jonas!!! + - Quick gist: + <https://gist.github.com/tarsius/509e9c65c9df1bc243d77cd968d60daa> + - Q: <https://github.com/datrs/hypercore> rust hyperdrive? + - A: I'm not familiar with this rust port yet. +- Q: If you had your druthers, what would make your work on + hyperdrive.el easier? + - A: User feedback!! Please try it out :) +- Q: Have you tried putting a git repo in hyperdrive? Does it work + well? + - A: If you use a bare repository, take care to gc and create pack + files before mirroring to the drive, and only publish periodic + updates, then that might be okay. (And make sure not to repack + old pack files.) +- Q: Is data transferred between nodes in the clear or encrypted? + - A: Encrypted in transit. +- Q: Is there a searchable catalogue of hyperdrives? + - A: Not yet, but we have plans for a distributed "trust" + network that could be used with hyperdrive: + <https://git.sr.ht/~ushin/trust.el> +- Q: Any plans for FUSE or posix semantics? + - A: Not yet. There was + <https://github.com/andrewosh/hyperdrive-fuse> , but it's not + maintained currently. +- Q: Any plans for a TRAMP interface? + - A: Good idea! A TRAMP interface may make it easier to offer + live hyperdrive filename completions. +- Q: How does this comprare to syncthing? + - A: Syncthing is useful for sharing files among a small group of + trusted peers, like an F2F network + (<<https://en.wikipedia.org/wiki/Friend-to-friend>>). + Hyperdrives are useful for publicly sharing a set of files which + you can updated going forward and which others can link to. +- Q: If you edit a file on the hyperdrive, then edit the same file on + the local mirror. How is the conflict handled when you sync the + mirror again? + - A: If I understand correctly, you're asking about what happens + when you write to the same hyperdrive from multiple machines. + The short answer is, "Please don't do that." However, it + appears that the Holepunch team is making progress on + <https://docs.holepunch.to/building-blocks/autobase> for + "autohmatically rebasing" hyperdrive history, effectively + allowing for multi-writer hyperdrives. +- Q: wouldn't user be able to collaborate asynchronously by viewing diffs on a serially "shared" file, in other words, a user would copy another peer's text file, edit and upload their changes, share the link to their updated file so that then others can see diffs and in that way co-create an evolving file? + - A: You could try this. Another idea that we have in the works is integration with <https://github.com/nobiot/org-transclusion> + +## Notes + +- damn, I never even knew about dired-jump (C-x C-j). Main + differences with (C-x d) from the file are one fewer keystroke and + having the point on the file you came from. +- Btw, hyperdrive looks like another one of those things that would be amazing if I collaborated with anyone using emacs +- Also incidentally hyperdrive is amazing +- I installed hyperdrive.el and tried to run it and immediately got: transient-setup: Symbol’s function definition is void: transient-prefix-object + - Need to upgrade transient.el + - Gah, you are right. I had an obsolete version just hanging out causing pain. + - Okay, I got hyperdrive.el working and it was super easy. hyper://fwsn55wnznts5mpkee16j89ja38nfz6zne4wijzap1z9ka4jsxio/Dird_a333f1_4884540.jpg +- I think hyperdrive is a pretty easy way to share files. Easier than Dropbox. But maybe for delivery? I'm not sure. + - A: What do you mean by "delivery"? + - I was thinking of asset delivery. I write professionally, so I have things like PDFs and other documents to deliver. Sometimes I have big files to deliver to clients. Using something like hyperdrive would be cooler than Dropbox. ... Hmmmm, is there a hyperdrive web gateway? + - A: A good non-Emacs option is <https://github.com/AgregoreWeb/agregore-browser> Agregore is Chromium with built-in support for more protocols besides HTTP, like Hyperdrive, Bittorrent, IPFS, Gemini, and Gun. <https://github.com/RangerMauve/hyper-gateway> , the program that hyperdrive.el connects to as a client is, I think, exactly what you asking about. I don't know of a public HTTP gateway, but you could easily run hyper-gateway on a VPS. + - That would be fun. Then I could control the domain name so it would look cool and professional and like I was extra high-tech. + - A: hyper-gateway lets you serve multiple drives at various subdomains. For example, you could serve your primary drive at <https://reverik.tld>, and then folks could access, e.g., the USHIN drive at <https://aaj45d88g4eenu76rpmwzjiabsof1w8u6fufq6oogyhjk1ubygxy.reverik.tld> + + +- Great work, everyone. Thank you. +- Prot's presentations are so clear. Perfectly model pedagogy. +- Just like his code: his .el buffers SQUEAK as you C-v through them. +- Prot is indeed a model of paying attention to detail. +- I have learned so much from his videos, and from his code. +- Prot switching from vim/etc to Emacs seems to correspond to an inflexion point in the current Emacs renaissance does it not? Coincidence, or... I wonder what way the causal arrow goes :) + - I think the current "Emacs renaissance" probably dates back to around the time that package.el was developed and then when MELPA came online. momentum seems to have been building since then + - We must also consider Org-mode's inception as a key moment in recent Emacs history +- My Emacs environment would be much poorer without Prot's contributions, that's for sure. +- My hypothesis is that Diogenes himself made his way to Cyprus and spent the past immortal couple thousand years as a mountain hermit waiting to return to mortal life when the Emacs community needed him. Humor aside, there are a few key personalities---many of them here this weekend---who have been disproportionately catalytic to the community recently. Prot is certainly one. Thanks to all of you! + + + +[[!inline pages="internal(2023/info/hyperdrive-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/hyperdrive-nav)" raw="yes"]] + + diff --git a/2023/talks/koutline.md b/2023/talks/koutline.md new file mode 100644 index 00000000..5091b4dc --- /dev/null +++ b/2023/talks/koutline.md @@ -0,0 +1,70 @@ +[[!meta title="Using Koutline for stream of thought journaling"]] +[[!meta copyright="Copyright © 2023 Matthew Jorgensen (PlasmaStrike)"]] +[[!inline pages="internal(2023/info/koutline-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Using Koutline for stream of thought journaling +Matthew Jorgensen (PlasmaStrike) - <mailto:plasmastrike@voiddragon.me> + +[[!template id="help" +summary="main talk does not have captions" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-koutline--using-koutline-for-stream-of-thought-journaling--matthew-jorgensen-plasmastrike--main.vtt)."""]] + +[[!inline pages="internal(2023/info/koutline-before)" raw="yes"]] + +I will talk about a nice journaling workflow I have developed using the +Koutline, from the hyperbole package. I will showcase this workflow and +describe what I like about Koutline and why I use it over other options +like Org Mode and plain text. + +About the speaker: + +I have used Emacs for 10+ years and enjoyed some of the last +EmacsConfs. To share back, I have decide to share a unique workflow I +have developed, as well as challenging myself by learning how to make +videos to learn some new skills along the way. + +# Discussion + +## Questions and answers + +- Q: extremely interesting point about loss of concentration, i think + with tools like that people who really work alot with text in an + abstract matter could have enormous benefits doing it without being + hypnotized by all the options, i have to rewatch the presentation + again to see nuances, i also would like to see it written somewhere + in a short conciese even maybe stream of conciousness mode. my + question is i hope you don't plan to stop the development of this + wonderful idea, thank you + - A: A lot of people think tools like this and emacs vim are all + about speed, However it is more about staying in flow state can + change the types of thoughts you get. That is the bigger part to + me. +- Q:Do you tend to create outline structure while journalling, or + after you have captured thoughts? Do you change the structure a lot + while capturing it? + - A: Whatever feels good at the time, Saying my day went good for + reasons 1,2,3 is a natural ways of sharding my thoughts that + maps well into outlins. Plus editing them later is always an + option + - The easy keybings for child, same level and parent cell + makes it efficient enough for live journaling + +## Notes + +- Koutline file used in talk + <https://mega.nz/file/uQ9UTSiD#vy5ZnB-Xnea_C2l_LcgUSKOtvHoTrobSrjBcnbD4Xa0> +- nice job plasmastrike + + +[[!inline pages="internal(2023/info/koutline-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/koutline-nav)" raw="yes"]] + + diff --git a/2023/talks/llm.md b/2023/talks/llm.md new file mode 100644 index 00000000..64966f28 --- /dev/null +++ b/2023/talks/llm.md @@ -0,0 +1,118 @@ +[[!meta title="LLM clients in Emacs, functionality and standardization"]] +[[!meta copyright="Copyright © 2023 Andrew Hyatt"]] +[[!inline pages="internal(2023/info/llm-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# LLM clients in Emacs, functionality and standardization +Andrew Hyatt (he/him) - <ahyatt@gmail.com> - <https://urbanists.social/@ahyatt> - <http://github.com/ahyatt> + +[[!inline pages="internal(2023/info/llm-before)" raw="yes"]] + +As an already powerful way to handle a variety of textual tasks, Emacs +seems unique well poised to take advantage of Large Language Models +(LLMs). We'll go over what LLMs are and are used for, followed by listing +the significant LLM client packages already for Emacs. That functionality +that these packages provide can be broken down into the basic features that +are provided through these packages. However, each package currently is +managing things in an uncoordinated way. Each might support different LLM +providers, or perhaps local LLMs. Those LLMs support different +functionality. Some packages directly connect to the LLM APIs, others use +popular non-Emacs packages for doing so. The LLMs themselves are evolving +rapidly. There is both a need to have some standardization so users don't +have to configure their API keys or other setup independently for each +package, but also a risk that any standardization will be premature. We +show what has been done in the area of standardization so far, and what +should happen in the future. + +About the speaker: + +Andrew Hyatt has contributed the Emacs websocket package, the triples +(making a triple-based DB library) and the ekg package (a tag-based +note-taking application). He has been using various other LLM +integrations, and ss part of extending ekg, he's been working on his own. +# Discussion + +## Questions and answers + +- Q: What is your use case for Embedding? Mainly for searching? + - A: + - I got you. It's kinda expand our memory capcity. +- Q: What do you think about "Embed Emacs manual" VS "GPTs Emacs + manual? + - A: + - yes GPTS actually how it's kind of embedding your document + into its memory and then using the logic that provided by + GPT-4 or other versions. I never tried that one but I'm + just wondering if you have ever tried the difference +- Q: When deferring commit messages to an LLM, what (if anything) do + you find you have lost? + - A: +- Q: Can you share your font settings in your emacs config? :) (Yeah, + those are some nice fonts for reading) + - A: I think it was Menlo, but I've sinced changed it (I'm + experimenting with Monaspace +- Q: In terms of standardisation, do you see a need for a + medium-to-large scale effort needed? + - A: + - I mean, as a user case, the interface is quite simple + because we're just providing an API to a server. I'm not + sure what standardization we are really looking at. I mean, + it's more like the how we use those callback from the llm. +- Q: What are your thoughts on the carbon footprint of LLM useage? + - A: +- Q: LLMs are slow in responding. Do you think Emacs should provide + more async primitives to keep it responsive? E.g. url-retrieve is + quite bad at building API clients with it. + - A: + - Gptel.el is async. And very good at tracking the point. +- Q: Speaking of which, anyone trained/fined-tuned/prompted a model + with their Org data yet and applied it to interesting use cases + (planning/scheduling, etc) and care to comment? + - A: + - I use GPTS doing weekly review. I'm not purely rely on it. + It's help me to find something I never thought about and I + just using as alternateive way to do the reviewing. I find + it's kind of interesting to do so. + +### Notes and discussion + +- gptel is another package doing a good job is flexible configuration and choice over LLM/API +- I came across this adapter to run multiple LLM's, apache 2.0 license too! https://github.com/predibase/lorax +- It will turn out the escape-hatch for AGI will be someone's integration of LLMs into their Emacs and enabling M-x control. +- i don't know what question to ask but i found presentation extremely useful thank you +- I think we are close to getting semantic search down for our own files + - yeah, khoj uses embeddings to search Org, I think + - I tried it a couple of times, latest about a month ago. The search was quite bad unfortunately + - did you try the GPT version or just the PyTorch version? + - just the local ones. For GPT I used a couple of other packages to embed in OpenAI APIs. But I am too shy to send all my notes :D + - Same for me. But I really suspect that GPT will be way better. They now also support LLama, which is hopeful + - I keep meaning to revisit the idea of the Remembrance Agent and see if it can be updated for these times (and maybe local HuggingFace embeddings) +- I think Andrew is right that Emacs is uniquely positioned, being a unified integrated interface with good universal abstractions (buffers, text manipulation, etc), and across all uses cases and notably one's Org data. Should be interesting...! +- Speaking of which, anyone trained/fined-tuned/prompted a model with their Org data yet and applied it to interesting use cases (planning/scheduling, etc) and care to comment? +- The ubiquitous integration of LLMs (multi-modal) for anything and everything in/across Emacs and Org is both 1) exciting, 2) scary. +- I could definitely use semantic search across all of my stored notes. Can't remember what words I used to capture things. +- Indeed. A "working group" / "birds of a feather" type of thing around the potential usages and integration of LLMs and other models into Emacs and Org-mode would be interesting, especially as this is what pulls people into other platforms these days. +- To that end, Andrew is right that we'll want to abstract it into the right abstractions and interfaces. And not just LLMs by vendor/models, but what comes after LLMs/GPTs in terms of approach. +- I lean toward thinking that LLMs may have some value but to me a potentially wrong result is worse than no result + - I think it would depend on the use case. A quasi-instant first approximation that can readily be fixed/tweaked can be quite useful in some contexts. +- not to mention the "summarization" use cases (for papers, and even across papers I've found, like a summarization across abstracts/contents of a multiplicity of papers and publications around a topic or in a field - weeks of grunt work saved, not to mention of procrastination avoided) + - IMHO summarization is exactly where LLMs can't be useful because they can't be trusted to be accurate +- <https://dindi.garjola.net/ai-assistants.html>; A friend wrote this <https://www.jordiinglada.net/sblog/llm.html>; < https://blogs.microsoft.com/on-the-issues/2023/09/07/copilot-copyright-commitment-ai-legal-concerns/> +- I have a feeling this is one of the 'em "if you can't beat them join them" scenario. I don't see that ending with a bit global rollback due to such issues anytime soon... +- (discussion about LLMs, copyright, privacy) +- I spent more time than I was hoping to setting up some custom Marginalia(s?) the other day, notably for cases where the "category" is dynamic, the annotation/affixation function varies, the candidates are an alist of key-value pairs and not just directly the value, and many little specificities like that. Idem for org-ql many moons back, org-agenda, etc. That sort of workflow always involves the same things: learning/reading, examples, trials, etc. I wonder if LLMs could be integrated at various points in that recurring exercise, to take just a sample case. +- that's yet another great use case for LLMs : externalizing one's thinking for its own sake, if only to hear back the echo of one's "voice", and do so with an infinitely patient quasi-omniscient second party. + - oooh, might be a good one for blog post writing: generate some follow-up questions people might have + - Yeah, a "rubber duck" LLM could be very handy + - I'm sure there would be great demand for such a thing, to dry-run one's presentations (video or text) and generate anticipate questions and so on. Great take. + - I've seen some journaling prompts along those lines. I think it'll get even more interesting as the text-to-speech and speech-to-text parts get better. Considering how much people bonded with Eliza, might be interesting to see what people can do with a Socratic assistant... + + +[[!inline pages="internal(2023/info/llm-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/llm-nav)" raw="yes"]] + + diff --git a/2023/talks/lspocaml.md b/2023/talks/lspocaml.md new file mode 100644 index 00000000..7646c7b5 --- /dev/null +++ b/2023/talks/lspocaml.md @@ -0,0 +1,50 @@ +[[!meta title="Writing a Language Server In OCaml for Emacs, fun, and profit"]] +[[!meta copyright="Copyright © 2023 Austin Theriault"]] +[[!inline pages="internal(2023/info/lspocaml-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Writing a Language Server In OCaml for Emacs, fun, and profit +Austin Theriault (he/they) - last name prounounced tare -e -o, <mailto:austin@cutedogs.org> + +[[!inline pages="internal(2023/info/lspocaml-before)" raw="yes"]] + +Recently, while working at Semgrep, Inc. I wrote a language server for our +SAST tool in OCaml: +<https://github.com/returntocorp/semgrep/tree/develop/src/language_server>. I +then added support for it to emacs +<https://github.com/emacs-lsp/lsp-mode/blob/master/clients/lsp-semgrep.el>. +In this talk I plan to go over what LSP is, why it's important, getting +started writing a language server, and supporting a language server in +Emacs. + +About the speaker: + +Austin Theriault is a software engineer at Semgrep, Inc. working on +their SAST tool Semgrep. In this talk he will cover the Language +Server Protocol, a way to provide language features to an editor, why +it's important to the future of editors, and how someone might go +about writing a server, and how to integrate it with Emacs. +# Discussion + +## Questions and answers + +- Q:Why not write the LSP server in OCaml? I missed the reasoning to + switch to Rust/etc - performance? + - A: The "stack" (cross-compilation, libraries, etc.) being less + developed than for developing LSP servers in, e.g., TypeScript +- Q: What are the corner cases, limitations, and other issues you + encountered in implementing an LSP server with client in Emacs, that + were surprising? + - A: Multiple, but performance being the big one. Caching + implementation. And then delivery/distribution (doing so + cross-platform given the OCaml tooling, etc.) + + +[[!inline pages="internal(2023/info/lspocaml-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/lspocaml-nav)" raw="yes"]] + + diff --git a/2023/talks/matplotllm.md b/2023/talks/matplotllm.md new file mode 100644 index 00000000..4117374b --- /dev/null +++ b/2023/talks/matplotllm.md @@ -0,0 +1,73 @@ +[[!meta title="MatplotLLM, iterative natural language data visualization in org-babel"]] +[[!meta copyright="Copyright © 2023 Abhinav Tushar"]] +[[!inline pages="internal(2023/info/matplotllm-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# MatplotLLM, iterative natural language data visualization in org-babel +Abhinav Tushar (he/him) - abhinav@lepisma.xyz, https://lepisma.xyz, @lepisma@mathstodon.xyz, <mailto:abhinav@lepisma.xyz> + +[[!inline pages="internal(2023/info/matplotllm-before)" raw="yes"]] + +Large Language Models (LLMs) have improved in capabilities to an extent +where a lot of manual workflows can be automated by just providing +natural language instructions. + +On such manual work is to create custom visualizations. I have found the +process to be really tedious if you want to make something non-standard +with common tools like matplotlib or d3. These frameworks provide low +level abstractions that you can then use to make your own +visualizations. + +Earlier to make a new custom visualization, I would open two windows in +Emacs, one for code, other for the generated image. In this talk, I will +show how a powerful LLM could lead to a much more natural interface +where I only need to work with text instructions and feedback on the +currently generated plot. The system isn't perfect, but it shows us how +the future or such work could look like. + +The package is called MatplotLLM and lives here +<https://github.com/lepisma/matplotllm> + +About the speaker: + +I am a Programmer and Machine Learning Engineer who has been in love +with Emacs' extendability from the moment I pressed M-x. Since then, I +have been doing as many things inside Emacs as I can. In this talk, I +will cover a recent attempt at automating one of my workflows inside +Emacs. + +# Discussion + +## Questions and answers + +- Q: What is the license of <https://github.com/lepisma/matplotllm> + project ? Sjo + - A: GPLv3 or later. Sorry, I didn't put this in the repository, + You can refer to + <https://github.com/lepisma/matplotllm/blob/main/matplotllm.el#L18C12-L29> + though. +- Q: Sometimes LLMs hallucinate. Can we trust the graph that it + produces? + - A: Not always, but the chances of hallucinations impacting + 'generated code' that causes a harmful but not identifiable + hallucinations are a little lower. Usually hallucination in code + show up as very visible bug so you can always do a retry. But I + haven't done a thorough analysis here yet. +- Q: What are your thoughts on the carbon footprint of LLM useage? + - (not the speaker): to add a bit more to power usage of LLMs, it is not inherent that the models must take many megawatts to train and run. work is happening and seems promising to decrease power usage +## Notes + +- Repository link <https://github.com/lepisma/matplotllm> . A + connected blog post here + <https://lepisma.xyz/2023/08/20/matplotllm:-an-llm-assisted-data-visualization-framework/index.html> + + + +[[!inline pages="internal(2023/info/matplotllm-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/matplotllm-nav)" raw="yes"]] + + diff --git a/2023/talks/mentor.md b/2023/talks/mentor.md new file mode 100644 index 00000000..21b53045 --- /dev/null +++ b/2023/talks/mentor.md @@ -0,0 +1,144 @@ +[[!meta title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)"]] +[[!meta copyright="Copyright © 2023 Jeremy Friesen"]] +[[!inline pages="internal(2023/info/mentor-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs) +Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, https://takeonrules.com, <mailto:jeremy@jeremyfriesen.com> + +[[!inline pages="internal(2023/info/mentor-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="mentor-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +<https://takeonrules.com/2023/12/03/mentoring-vs-coders-as-an-emacsian/> + +Join me as I share some anecdotes and approaches for mentoring other +developers who use tools different from mine; all in service of +furthering a shared understanding, sharpening my own toolkit, and +hopefully helping others grow their capabilities. + +Most everyone I mentor has chosen VS Code as their editor; yet I don’t +use VS Code. Our pairing and mentoring sessions are about me being +curious about their habits and modes of operation. I use my journeyman +knowledge of what Emacs can do to help these VS Coders navigate +pathways towards sharpening their skills. I also learn a few editor +tricks from them. + +I’ll talk about remote pairing sessions, one-on-one sessions, and +larger show-and-tell efforts; each with the purpose of revealing +potentially different approaches. The idea being that asking questions +and showing alternate approaches can begin to illuminate previously +unknown pathways. + +The underlying goal is to ignite in folks a desire to improve their +understanding and usage of their preferred tools; and show +alternatives that might peek further interest in learning and +exploration. + +About the speaker: + +Jeremy Friesen is a long-time software developer but only recently an +Emacs convert (as of May 2020). For most of his career he has been +writing open source software for educational institutions such as +universities, libraries, archives, and museums. He’s mentored several +dozen developers at his places of employment as well as through +volunteer efforts. He strives to meet people where they are, learn how +they are looking to grow, then working with them to grow; often by +nudging folks to practice and explore their tools. +# Discussion + +## Questions and answers + +- Q: re: super-. -- which key do you bind to super? then where is + meta? + - A:mac: ctrl-meta-super---space---hyper-meta-ctrl (caps lock + as ctrl) +- Q:Great talk; what's the package you use to make the Org slide? + - A: prot's logos, olivetti mode? I have a minor mode that I + turned on: + <https://github.com/jeremyf/dotemacs/blob/2c5d37c2d0cc3f0433bc4588352bd6bf5bd09460/emacs.d/jf-framing.el#L109-L123> +- Q: If people do get interested in picking up Emacs because of what + they see you do, how do you recommend they get into it? + - A: A lot of it comes down to the problems that they're trying + to solve. I worked in TextMate for a long time, then Sublime, + then Atom... I chose Spacemacs, and then I chose Doom, and then + I said, wait, start over, erase everything, start with the + tutorial. I said, I really want this functionality. Then I went + and figured out how to do it. Helping ask them, "What do you + really want to do?" Ex: okay to advise people to go back to + vim, develop ownership of their editor. **Understand the + problems they're experiencing,** which tends to be what we + should do in software development. Take the time to walk with + them on their journey to understand what's frustrating them. + Story about a mentee learning to ask questions earlier (not + focused on navigating editor). +- Q: I've been using Emacs for about 30 years and I find it really + difficult to figure out how to help people get started with it. Uh + ... so I guess my question is the same as the green question right + above this. + - A: My wife a while ago talked about the idea of being in between + someone who's more informed and someone who's less informed. + Introducing someone who's new to Emacs might be too hard + because you're too much an expert. Pedagogy. Sharing what you + have where you're at will by nature move the entire queue of + people behind you, will help move them together forward. Not an + only one person thing, improving shared understanding. + - Zone of proximal development; just i + 1 - Lev Vygotsky + - It can be very challenging to unwind things. Muscle memory. + I know how to do it on a keyboard... We've internalized so + much. Being curious with them and close to them, trying to + diffuse questions and not ask overly leading questions... + - What is the question that I can ask the group so that I can + ask the question? ex: not "Why do we suck at sharing + code?", but before that + - I'm also 30 years in (at least) and just recently picked up + JF's method of only giving away a little bit of the + functionality of emacs at a time. +- Q:Have you encountered anyone that are being... "nagative" about + the fact that you're using Emacs? (Assuming that they just don't + know/have misconceptions about Emacs and nothing malicious.) If so, + how do you handle these kinds of people? + - A: Analogy with a pen: my goal is to write something, who cares + about what kind of pen I use? + - I want my text editor to flow with me. + - I don't need it to multi-thread-- it's just me on the + computer. + - "My goal is to be better at computering." +- Q: I love the attitudes and worldview that infuses your blog posts + and your talks this weekend. Learn something every week: it's + CUMULATIVE. English class was the most important. What other advice + do you have, and how is it generalizable to those of us who are not + devs? + - A: fountain-mode (package for writing screenplays) + - Wonderful answers! Thanks so much! + - Broad curiosity (ex: background is liberal arts, very little + computer science classwork/theory; Lord of the Rings, poetry, + etc.) + +## Notes + +- Presenter blogs at <https://takeonrules.com> +- such valuable work being described +- I wonder if there is still reasons to use ag compared to ripgrep + - it can search compressed archives better, so I like using it on emacs sources + - <https://github.com/aswild/the_silver_searcher/commit/7b571a8a94d0e22a06e3313cb0d9672b416fb2c1> + - yeah indeed, ripgrep shells out and is five times slower than ag +- Hyper modifier is tops. On normie keyboards, I like super, meta, space, meta, hyper. 100% do not regret switching to a split ergo mechanical QMK board. + - On my work Mac, caps is control, I don't have a super, and it's meta-space-meta-hyper. But I almost never use that, because the keyboard is deeply unpleasant to actually type on. The sole thing I like better about Emacs on macOS over Emacs on Linux is that it's a oneliner to set the Hyper modifier. Linux requires delving deep into the forbidden territory of xkb. <https://codeberg.org/ieure/xkbsucks> if you need a guide + - my mac setup is the same as him but reversed: command is control, option is meta (like him) and control is super cuz i use super all the time. and hyper, like him, is on the right of the keyboard. +- (discussion about fountain pens) + + +[[!inline pages="internal(2023/info/mentor-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/mentor-nav)" raw="yes"]] + + diff --git a/2023/talks/multi.md b/2023/talks/multi.md new file mode 100644 index 00000000..63c41965 --- /dev/null +++ b/2023/talks/multi.md @@ -0,0 +1,29 @@ +[[!meta title="Emacs for the Indecisive/Multi-Talented"]] +[[!meta copyright="Copyright © 2023 Noah"]] +[[!inline pages="internal(2023/info/multi-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs for the Indecisive/Multi-Talented +Noah (she/they) + +[[!inline pages="internal(2023/info/multi-before)" raw="yes"]] + +To the average person (or even programmer), Emacs seems like either just +another basic text-editor, or this huge "bloated" piece of software, but +behind peoples (rather wack) perception on Emacs, holds potential and power +for EVERYONE, not just programmers. My talk discusses how I use GNU Emacs +for my programming, school tasks and notes, lyric organization, team +management, zine writing and formatting, and more! I will also discuss how +Emacs is useful to non-programmers, how other people can use it/get into +it, and practical uses for Emacs outside of programming. + + + +[[!inline pages="internal(2023/info/multi-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/multi-nav)" raw="yes"]] + + diff --git a/2023/talks/nabokov.md b/2023/talks/nabokov.md new file mode 100644 index 00000000..b5b346fc --- /dev/null +++ b/2023/talks/nabokov.md @@ -0,0 +1,125 @@ +[[!meta title="Why Nabokov would use Org-Mode if he were writing today"]] +[[!meta copyright="Copyright © 2023 Edmund Jorgensen"]] +[[!inline pages="internal(2023/info/nabokov-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Why Nabokov would use Org-Mode if he were writing today +Edmund Jorgensen (he/him) - <https://tomheon.com>, <mailto:ewj@inkwellandoften.com> + +[[!inline pages="internal(2023/info/nabokov-before)" raw="yes"]] + +I've written several novels in Emacs. One of them grew into a monster with a +baker's dozen twisty, interconnected subplots. + +When I started to revise that novel, I had to use an outline to keep all the +subplots straight, but I found it nearly impossible to keep that external +outline consistent with the prose. + +Finally I landed on a workflow using org-mode to keep the outline and the +prose together, which significantly reduced the burden of keeping the two +consistent as I moved and modified sections. I also found a way to use tags +and sparse views over them to enable quick read-throughs of subsets of the +book for continuity checks (which I plan to demo). + +Later--long after finishing the book--I realized this process was essentially +the Emacs update to the writing process that Nabokov used: he wrote on index +cards that served as both prose and outline, so that he could move them around +(which he did incessantly). + +There's something deeply beautiful about org-mode's refusal to treat structure +and prose as different things in a piece of writing--something I think Nabokov +would have appreciated, and something I definitely appreciate, because it +saved my novel. + +About the speaker: + +I'm Edmund Jorgensen, a software engineer by day and a writer by night, using +Emacs for both. When one of my novels threatened to collapse under the weight +of its own subplots, org-mode's powerful blending of structure and prose +rescued it. I'd like to show you how that worked, and how much of org-mode's +power for writing comes from its similarity to Nabokov's famous +index-card-based writing process. +# Discussion + +## Notes + +- It looks like the Zettelkasten slipbox for nabokov +- James Howell also like the idea using small slide to convey single + idea to the reader. In emacs, we have `narrow` function. Yes! I + use various narrow functions to present text with Emacs. (I use + narrow a bunch when editing, it really helps focus on a chapter or + scene) + - The funny thing about narrow functions, I mean the first time I + saw it in the manual, there is a warning to the new user. That + would be afraid of this kind of functionality, and you have to + be careful, haha... + - I saw that warning too and avoided narrow for a long time as a + result! But it's not really that bad... + - Exactly, I use narrow a lot, you know, every time I'm + working on any single type of writing or writing a code or + writing a piece of manuscript. It's really helped me to + narrow down my attention and to kind of release any other + thoughts that is not directly connected to the current + things I'm working on. And that really is an underestimated + functionality for the Emacs. +- The most valuable thing that Org will bring to the writer is the + structure, how we can navigate between different structures of + thoughts. +- The idea is using tag to narrow down a single person's timeline in + the whole context of stories. It's something very interesting. +- ewj.io/emacs +- 👏 I'll start writing my masterpiece tomorrow! +- I need to use tags more, org-sparse-tree is handy + + +## Questions and answers + +- Q: Does the index really matter here? I mean, his colleague is also + using some A4 paper, and do you think that the index card is the + most important thing here? + - A: + - portbablity win! +- Q:How do you export the second level headings (scenes in this + example) without the heading itself, just the content? + - A:3 ways for this: ox-ignore (it was visually annoying), dumb + awk script, pandoc filters in lua + - I would say the org-transclusion works very well for this + kind of demand. +- Q: Slightly offtopic: where can we see your novels? + - A: there are on Amazon: two of them, and a book of short-stories + - Links:<https://www.amazon.com/World-Enough-Time-Edmund-Jorgensen/dp/0984749233> + - <https://www.amazon.com/Other-Copenhagens-Stories-Edmund-Jorgensen-ebook/dp/B00O4OQCBE> +- Q: Have you looked at the Denote Signature features. The + hierarchical nature of luhman IDs and index cards work well with + Denote Signatures + - A:I haven't, but I will take a look! + - <https://protesilaos.com/emacs/denote#h:f9204f1f-fcee-49b1-8081-16a08a338099> + - The part that I like with signatures is they can be optional + with your zettelkasten as another way to use it. +- Q: Do you have a workflow combining hand-written index cards and org + mode? + - A: + - Maybe just take a picture and OCR for your small index + cards, but at the end of the day you always have to go back + to your main Org files. + - Ooh, I have a workflow for using Google's OCR to grab + the text from my sketches (esp. the ID) so that I can + link to my sketches in Org with ID and completion - + sachac + - haha, nice to see different approach, I personally + didn't do that because I still most of my work is + on the computer so yeah in the future if i have lots + of handwriting notes in my working I will reconsider + Google solution +- Q: + - A: + + +[[!inline pages="internal(2023/info/nabokov-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/nabokov-nav)" raw="yes"]] + + diff --git a/2023/talks/one.md b/2023/talks/one.md new file mode 100644 index 00000000..d41f0acf --- /dev/null +++ b/2023/talks/one.md @@ -0,0 +1,173 @@ +[[!meta title="one.el: the static site generator for Emacs Lisp Programmers"]] +[[!meta copyright="Copyright © 2023 Tony Aldon"]] +[[!inline pages="internal(2023/info/one-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# one.el: the static site generator for Emacs Lisp Programmers +Tony Aldon - <mailto:tony@tonyaldon.com> + +[[!inline pages="internal(2023/info/one-before)" raw="yes"]] + +Have you ever wanted to write a blog: + +- contained in a unique org file, +- rendered with only one Emacs command, +- that can be modified by writing Emacs Lisp code (and CSS too), +- with "html templates" that are plain Emacs Lisp data, +- with no config file, +- and no dependencies on external static site generators? + +If so, you might be interested in one.el package. + +In this talk, we'll look at how to get started with one.el and write a +a simple blog as an example. + +What kind of static sites can be produced with one.el? I don't know +but you can get an idea by checking those 3 websites built with +one.el: + +- <https://lnroom.live> +- <https://tonyaldon.com> +- <https://posts.tonyaldon.com> + +Below you can see the basics of a one.el website. + +In one.el, the following org file/buffer defines a website with 2 +pages that we build by calling `one-build` command while we are visiting +it: + + *** My website + :PROPERTIES: + :ONE: one-default-home + :CUSTOM_ID: / + :END: + + Welcome to my website! + + *** Blog post 1 + :PROPERTIES: + :ONE: one-default + :CUSTOM_ID: /blog/page-1/ + :END: + + My first blog post! + + The path ~/~ in the first ~CUSTOM_ID~ org property tells ~one.el~ that the + page "My website" is the home page. That page is rendered using + ~one-default-home~ render function, value of ~ONE~ org property of the + same headline. + + The path ~/blog/page-1/~ in the second ~CUSTOM_ID~ org property tells + ~one.el~ that we want to render "Blog post 1" page in such a way + that when we serve our website locally at ~http://localhost:3000~ for + instance, that page is served at ~http://localhost:3000/blog/page-1/~. + How that page is rendered is determined by the value of ~ONE~ org + property of the same headline which is ~one-default~, a render + function. + + As you might have noticed, a ~one.el~ website is an org file where the + pages are the headlines of level 1 with the org properties ~ONE~ and + ~CUSTOM_ID~ set. Nothing more! + + ~ONE~ is the only org property added by ~one.el~. Its value (an Elisp + function which returns an HTML string) for a given page determines how + ~one.el~ renders that page. + + The paths of pages are set using ~CUSTOM_ID~ org property. + + That's it! + + note: I wanted to have a blog written in org-mode that I can modify + only by evaluating some Emacs Lisp code. This is how one.el got + started. Down that path I found that the Org parser and exporter do an + amazing job, in fact 95 percent of the heavy work in one.el. I just + had to find a way to pass org data to render functions and write an + Emacs Lisp html generator package to be used by those render + functions. I'm having a good user experience so far and I hope its + design will fit your workflow. + + +# Discussion + +## Notes + +- Also provides a demo of Jack package + (<https://github.com/tonyaldon/jack/>) +- Custom function for rendering by interogating the page-tree + - Of use: grabbing metadata from the document/node +- Easy menu and tab generation would also be great. + +- very cool indeed 👏 +- thx for the nice presentation +- Yeah, definitely a fun project that solves a problem to keep more Emacs and less external services. Static web sites are the best. :-D +- I agree. I currently use Hugo, but I think this looks great! +- I really like that `jack-html` is a separate project, as that looks nifty. +- jack-html feels like a hiccup for elisp, nice + - A very programatically solution! +- I didn't watch the talk, but I use esxml to template pages that I generate from Org files: <https://codeberg.org/SystemCrafters/systemcrafters-site/src/commit/b9b33910e68c6a9321ee7dcd92015b8a29b260bd/publish.el#L176> - Lisp backquotes are the best templating language :) + - To be fair, pcase DSL is not easy to remember. [some discussion on IRC about pcase], recommendation of <http://newartisans.com/2016/01/pattern-matching-with-pcase/> + - I keep using elisp-demos with great success <https://github.com/xuchunyang/elisp-demos> - adds examples to Help buffer +- This looks like a nice setup. My blog is still using org-page, which was abandoned years ago. +- org-page still works though + - I know, I'm still using it. But it's finicky in a bunch of ways and I'd like a replacement static site generator. I don't really care if the code is elisp or not, as long as I can write in Org Mode and don't have to run Wordpress. + - we have a bunch now.. <https://github.com/novoid/lazyblorg> <https://ox-hugo.scripter.co/> + +## Questions and answers + +- Q: does the "one" part of one.el refers to one source file? +- Does one.el support #+include: to add from other (org) files? +- Q: What's the main motivation for this new package? I used to use + ox-hugo and use github action to build the blog. (Curious as well, + as I use ox-hugo and have almost 1000 pages) + - A: Mapping from org-mode to Hugo added another system to + understand; wanted Emacs centric approach. + (<https://one.tonyaldon.com/> has some rational) + - understand. For me, it's just org-mode, ox-hugo take care of + the rest. And I find it is easy for me. Maybe, I am not used it + so much. Full control definiitely requires your package. +- Q: Is it possible to use #+include to add content from other files? + - A: Not included; the idea was to only have one file. It is + possible to code what you want in elisp. + - Perhaps org-transclusion would play with this? +- Q: Can this generate a single site from different sources like + blog.org (for example.org/blog/), videos.org (for + example.org/videos/), contact.org (for example.org/contact/), etc? + - A: Refer to the previous question's answer +- Q:Do you have pre-made templates already along with the one.el + package? + - A:Yes and no. There are quite a few constructs/templates in the + one.el code, you could perhaps use them to customize to get it + to do what you want. +- Q: What additional features are there that you would like to add to + one.el in the future? + - A: A full text search + - (Comment not from presenter:) I've used Lunrjs which is a JS + package that keeps all things local; but your site generator + does need to kick out a JSON representation of the content (e.g. + path, text, tags/keywords). I've been considering + <http://elasticlunr.com/> +- Q:Can you create navbars on a website and fancy things like + carousels (pictures rolling/sliding from one to another) using + one.el? + - A:Sidebars, navbars are already part of the package. one.el also + generates responsive. pages. pages argument used recursively can + manage/mimic the carousel effect. +- Q: Would there be an automated way to convert an existing HTML + document into jack-html form? + - A: + - One challenge is that HTML documents do not need to be + "precise" (you don't need to close tags). So finding a + tree-parser for HTML (perhaps treesitter?) to build the + conceptual tree. +- Q: Does this or you use any other Emacs Packages for your + package/website ex org-publish. + + +[[!inline pages="internal(2023/info/one-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/one-nav)" raw="yes"]] + + diff --git a/2023/talks/overlay.md b/2023/talks/overlay.md new file mode 100644 index 00000000..c8c6c4fe --- /dev/null +++ b/2023/talks/overlay.md @@ -0,0 +1,111 @@ +[[!meta title="Improving compiler diagnostics with Overlays"]] +[[!meta copyright="Copyright © 2023 Jeff Trull"]] +[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Improving compiler diagnostics with Overlays +Jeff Trull (he/him) - Pronunciation: rhymes with "hull" and "dull", IRC: jaafar, @jaafar@hachyderm.io + +[[!inline pages="internal(2023/info/overlay-before)" raw="yes"]] + +Overlays are a feature of Emacs that allow changing the +appearance of text while preserving its contents. They play a prominent +role in packages like org-mode, which uses them to hide or reveal custom +properties and display inline images, and magit, which uses them to +highlight diffs. + +The presenter will give a introduction to the features of overlays, +demonstrating how to: + +- Create and use overlays in Emacs Lisp code +- Query locations in an existing buffer to find out what overlays are +present. + +He will then demonstrate a new compilation minor mode for improving the +readability of error messages, using overlays to flexibly reformat portions +of the compiler output under user control. + + +# Discussion + +## Questions and answers + +- Q: How did you draw the underbraces and overbraces? + - A: TikZ, the greatest drawing tool ever :) See + <https://tex.stackexchange.com/a/128096/105203>. I went to some + effort to match up the colors, font, and background to Emacs. I + got quite close, I think. +- Q: You've got a nice sounding keyboard. What kind is it? + - A: Sorry about that. It's an ErgoDox EZ +- Q: Do you find that the "invasive" reformatting interferes with + navigation? + - A: A bit. You can't move your cursor into the not-real buffer + text (indentation). But the original text is still visible, so + that works fine. +- Q: Can you show us the keybindings of your minor map for editing + overlays? + - A: It's C-c - and C-c + but you can change it. +- Q:Your examples were with c++, have you experimented with any other + languages? Oh, thanks for the interesting talk by the way! + - A: Other languages don't have the same unpleasant behavior :) I + say this as a long time fan of C++. But it should be possible! +- Q: Would it be possible to include overlays in the source file + itself. There are some language modes (Rust, for instance) that do + this. + - A: [someone else] Sounds like enriched-mode. [Jeff] I'm not + sure what this question means; it's the error messages that are + the big issue +- Q: What are your plans for tspew in the future? + - A: Better future-proofing and more options for formatting +- Q: What is your repository link <https://github.com/jefftrull> ? + - A: <https://github.com/jefftrull/tspew> +- Q: What IDEs do C++ programmers use? If not emacs? How do they deal +with these error messages? + - A: VSCode is quite popular, as well as CLion and also XCode. I think they simply display the error messages as is. +- Q: Have you tried to use treesitter to parse the output? + - A: I think it wants to parse an entire buffer. If I could write a + grammar for a portion of the text and point it at that, that would be + great. I could have maybe made a tsit grammar if I could have applied it to a small bit of the output + - (not the speaker): ISTM that since you set up the syntax tables to recognize <> as parens/whatever that Emacs should be able to parse the effective lists as sexps, but I'm not an expert on that + - (not the speaker) ye it's true, often you want to select what the root source node type would be an AFAIK you cannot change it + +- Q: "org-mode, which uses them to hide or reveal custom properties" I thought they used buffer-invisibility-spec or something like that + - A: yes that's part of it + - do you know of they also use text properties. org code is usually pretty messy, so I don't know much about it + - A: org has been moving toward text properties but I think there is a flag that will use overlays instead (!). There's some controversy about performance that I will touch on in a bit + - Interesting, does that initiative predate the recent performance improvements by Stefan Monnier? + - A: I think so. They were known to be a problem for some time, but then that happened? +- Q: Did you use, e.g. syntax-ppss to parse the depth using the syntax table? + - A: No I tried to though... maybe there's a better way + +## Notes and discussion + +- The org file containing the presentation is here: + <https://media.emacsconf.org/2023/emacsconf-2023-overlay--improving-compiler-diagnostics-with-overlays--jeff-trull.org> +- Tony Aldon's Reddit post on visibility + <https://www.reddit.com/r/emacs/comments/t1r2wq/have_you_ever_wondered_how_orgmode_toggles_the/> +- Overlay performance (maybe) fixed + <https://www.reddit.com/r/emacs/comments/yg4mvt/the_noverlay_branch_was_merged_to_master_this/> +- I think I might need to change subed-waveform to use text properties instead of overlays or fix something else that I'm doing incorrectly, since the overlays get left behind when I kill text + - A: yeah you have to track them yourself +- Can you put the overlay object in a text property to track it? + - A: I don't think you would mix properties and overlays in that manner. There are overlay search functions; people typically add a property that identifies them as theirs. or you can store references in a list or something +- A: One of my reasons for doing this was frustration and people talking about how great VSCode was and I *knew* that Emacs was a good match for certain kinds of problems people don't even try to solve in IDEs +- A: I actually edited this down I know it's still a lot of detail :) +- This is really good! +- Very impressive! And well explained. Thank you. +- yeah try doing that in VSCode! yeah. +- this is slick! +- i'm not a fan of ligatures, but imho :: just begs for it + - Same, I want to see the actual thing that'll be given to the compiler/interpreter/whatever. +- That was great, showing how relatively easy it is to extend Emacs with features like that. +- From the speaker: yantar92: your help was much appreciated in the weeks I spent putting this together :) + +[[!inline pages="internal(2023/info/overlay-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/overlay-nav)" raw="yes"]] + + diff --git a/2023/talks/parallel.md b/2023/talks/parallel.md new file mode 100644 index 00000000..8806e7c2 --- /dev/null +++ b/2023/talks/parallel.md @@ -0,0 +1,88 @@ +[[!meta title="Parallel Text Replacement"]] +[[!meta copyright="Copyright © 2023 Lovro, Valentino Picotti"]] +[[!inline pages="internal(2023/info/parallel-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Parallel Text Replacement +Lovro, Valentino Picotti - IRC: hokomo, <mailto:hokomo@disroot.org> + +[[!inline pages="internal(2023/info/parallel-before)" raw="yes"]] + +We present our Emacs package for performing parallel text +replacement. + +"Parallel" in this context does not refer to improving +efficiency through parallelism, but to the concept of performing +more than one text replacement without them interfering with +each other. This is in line with the usage of the term in the +Lisp community when contrasting the behaviors of LET and LET*, +SETQ and PSETQ, etc. (e.g. +<http://www.lispworks.com/documentation/lw60/CLHS/Body/s_let_l.htm>). + +We will present the package's features and its integration with +Emacs' query-replace system, a comparison with previous +solutions, and a few notes on our implementation. We will +describe some common use-cases and showcase how the package is +used. + +The package is currently not yet published in a package archive, +but the code is already publicly available at +<https://github.com/hokomo/query-replace-parallel>. The name +"query-replace-parallel" is not yet final and we are thinking of +alternatives. Our current best candidate is "replace-parallel" +(similar to the built-in "replace.el"), but suggestions are +welcome. + + +# Discussion + +## Questions and answers + +- Q: This looks great, and was very well-presented. Do you have plans + to upstream this functionality into Emacs? + - A: Would require some refactoring upstream, so not suitable for + upstreaming as-is. +- Q: Did you use pair-programming while developing it, or did you work + independently, alternating and reviewing? + - A: Yes, we did! I was at the keyboard, Valentino was at the + whiteboard, and we kept bouncing ideas back and forth, trying + out prototypes, coming up with various tests, checking the edge + cases, etc. +- Q: What is your background in programming? Was it difficult to + implement following the same API and architecture as what is already + in Emacs? + - A: Both Valentino and I are PhD students in computer science, + but a PhD or similar is definitely not a requirement. It wasn't + too difficult because we could reuse the interactive + functionality from query-replace's internals. Figuring out what + and how to reuse is what took a bit of creativity, but a lot of + the necessary knowledge for that came from just reading and + poking around Emacs' replace.el. Don't be afraid to go and + read the source! +- Q: What did you learn about Emacs programming or programming in + general while working on this project? + - A: That Emacs is so flexible that you can even advise its + `message` function. Similarly, being able to prototype + functionality so quickly and immediately integrate it into the + rest of Emacs is so fun and so satisfying! + +## Notes + +- One usecase could be character names in a novel manuscript, if one + has named a character and want to now rename it to some other + character names or swap it with another one. +- Nice, I was wondering if it utilized `rx` +- package installed, ready to use! +- excellent talk, and also such a cool package +- great talk, very clever concept +- that SRE "paper" you linked to is interesting +- just saw the "Parallel Text Replacement" talk - 👏 great talk! + +[[!inline pages="internal(2023/info/parallel-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/parallel-nav)" raw="yes"]] + + diff --git a/2023/talks/poltys.md b/2023/talks/poltys.md new file mode 100644 index 00000000..4cd13b92 --- /dev/null +++ b/2023/talks/poltys.md @@ -0,0 +1,100 @@ +[[!meta title="The browser in a buffer"]] +[[!meta copyright="Copyright © 2023 Michael Bauer"]] +[[!inline pages="internal(2023/info/poltys-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# The browser in a buffer +Michael Bauer (he/him) - Pronunciation: [ˈmɪçaːʔeːl] [ˈbaʊ̯ɐ], IRC: permcu, <http://perma-curious.eu>, <mailto:perma-curious@posteo.de> + +[[!template id="help" +summary="main talk does not have captions" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-poltys--the-browser-in-a-buffer--michael-bauer--original.vtt)."""]] + +[[!inline pages="internal(2023/info/poltys-before)" raw="yes"]] + +In this talk I am going to show a thing I made to integrate my second +most used program with my first most used one. + +Poltys - a periodic orb weaver - is an interactive interface to the +current browser session that lives inside an Emacs buffer. It forms a +[narrow +waist](https://www.oilshell.org/blog/2022/03/backlog-arch.html) between the browser & Emacs; bringing Emacs text editing +to tab management. This makes it one more thing ready to be used in +your favorite Emacs workflow. + +During the talk I will explain what poltys does, how it can be used in +different workflows and how it is made. The first half of the talk is +show and tell, while the second half goes into the technical details. + +This talk is for you if you like neat text interfaces, +already live mostly inside Emacs, +or just want to have a look at what Emacs - the universal shell - is +among many other things capable of. + +About the speaker: + +Michael Bauer is from Germany. He does most of his computing from +inside Emacs and works currently on an evolved lisp dialect. +# Discussion + +## Questions and answers + +- Q: Have you seen the Nyxt browser. It is the Emacs of Web browsers + and would probably be easier to work with as it matches a lot closer + to Emacs. I think you can tag browser tabs for example. + - A: Yes, but the author did not look into it yet. It could + probably be made to work as well. +- Q:Nice ideas. Needs a better name though to attract people to it. + What about browsys or webnote? + - A: Ideas for better naming are appreciated, but the suggestions + did not convince the author. +- Q: Can you use browser extensions with this, example ublock + sponserblock darkreader These are needed for browsing others peoples + web sites + - A: The presented software is a browser extension (plus elisp + code to interact with it), so it works in addition to other + already installed browser extensions. +- Q: Are there any inherent security issues with this (bi-directional + synchronization sounds like a possible issue) ? How are they solved? + Can a malicious website impact Emacs or the host system? + - A: The overall surface is limited, so there should be little a + website can do. One thing that helped with this is the web + extensions API being fine-grained in terms of things that can be + done with the browser. +- Q:When do you think you'll make a first release? I hate needing + browser extensions and would love to control my tabs in Emacs. + - A: The code is there, may be, in the next week, the presenter + would upload the code out there. + - I am not the presenter, but you can configure emacs to open + windows instead of tabs and control them with EXWMNeed + cross-window system support (GNU/Linux, MacOS and Windows). +- Q: What happened to the Sway compositor you showed last year? I am + an EXWM user and need a Sway equivalent!!! Please !!! Is the code + available? + - A: <http://perma-curious.eu/repo-ewx/> +- Q: Does the browser have to be firefox for syncing or is there a + choice there? + - A: It should be possible to use this with other browsers due to + the web extensions API working for both Chromium and Firefox, + but it needs testing and Chromium may switch to an incompatible + API in the future. + +## Notes + +- It is too small, please zoom up *4, for all the impaired, or normal + good old user of emacs... +- The highlighting copying could be done with xclip or wl-clipboard if + you don't mind a dependency outside Emacs. + + +[[!inline pages="internal(2023/info/poltys-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/poltys-nav)" raw="yes"]] + + diff --git a/2023/talks/ref.md b/2023/talks/ref.md new file mode 100644 index 00000000..9f6b724e --- /dev/null +++ b/2023/talks/ref.md @@ -0,0 +1,64 @@ +[[!meta title="Org-Mode Workflow: Informal Reference Tracking"]] +[[!meta copyright="Copyright © 2023 Christopher Howard"]] +[[!inline pages="internal(2023/info/ref-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + +# Org-Mode Workflow: Informal Reference Tracking +Christopher Howard (he/him) - IRC: lispmacs, <mailto:christopher@librehacker.com> + +[[!inline pages="internal(2023/info/ref-before)" raw="yes"]] + +This talk describes my Emacs workflow for keep track of references to papers, +book, and Web articles, and other things I might want to look-up or quote +later. I go over a few code snippets and some basic org commands which make +the process quick, easy, and practical for my needs. + +This talk is targetted for the beginner to intermediate Emacs user, or those +who do not have much experience with org-mode. Also, those who do a lot of +advanced technical writing should look instead to Vidianos Giannitsis' talk +[Writing and organizing literature +notes for scientific writing](https://emacsconf.org/2022/talks/science/) where they will find better tools for reference +tracking and scraping. + +About the speaker: + +Christopher Howard is an electronics technician who studies various scholarly +and scientific subjects in his (very limited) spare time. He needed a quick +and easy system for keeping track of various references to books, Web +articles, and so forth. He found that a few code snippets and some basic tools +from Org-Mode have worked well for him, while requiring a minimal setup and +learning curve. He hopes that sharing his workflow will be useful to some +others with similar needs. + +# Discussion + +- Q: Is the emacs config for the system in the last talk published? +- example code: <https://bpa.st/UXBQ> +- I didn't mention it in the video, but I like also to use + org-mode's attach feature to sometimes attach documents to the + references. +- Try this for inserting link: + <https://xenodium.com/emacs-dwim-do-what-i-mean/> +- I use (ivy-bibtex &optional ARG LOCAL-BIB) but never hacking tag + system, this something I can improve. +- The current talk shows that most of the time, the already included tools in Emacs allow for custom workflows without needing to use external packages (org-roam, etc.). Of course, the latter are great for richer workflows, but core Emacs is often enough. +- do you know about the org-insert-link command? saves you from having to type brackets :) +- You'll likely find helm-org-rifle useful for searching, it handles, e.g. tag inheritance and so forth +- I used to use a similar approach: https://dindi.garjola.net/zettelkustom.html but I finally moved to protesilaos denote +- if you search properties infrequently, you can take advantage of quite specific literal pattern ":name" (starting with ":") using swiper or its help equivalent. You should have limited no of candidates if you know prop name. This way you do not need to remember dedicated command for searching org properties :). +- See also org-ql-find for property searches, e.g. "property:NAME=FOO" syntax + - that's honestly so verbose that I never managed to use it + - Well you could alias "property" to "p" and then type "p:foo" or "p:foo=bar". or you could just search for "foo bar" as plain text regardless of their being properties + - If you frequently search for certain properties you could use org-ql-defpred to define a predicate that matches them + - I personally find postfix notation easier in practice - aka search-string:tag. it is very practical - I first think of a term, see the results, and then expand/narrow the scope of the search term as necessary. I find it more natural than M-b + adding predicate: <https://0x0.st/HxVC.txt> <https://github.com/yantar92/emacs-config/blob/master/config.org#trying-org-ql> beware that I use org-ql fork. So, 100% untested on the released version +- Great talk. +- Great talk, clap clap clap + + +[[!inline pages="internal(2023/info/ref-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/ref-nav)" raw="yes"]] + + diff --git a/2023/talks/repl.md b/2023/talks/repl.md new file mode 100644 index 00000000..bd0c01f9 --- /dev/null +++ b/2023/talks/repl.md @@ -0,0 +1,116 @@ +[[!meta title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ"]] +[[!meta copyright="Copyright © 2023 Eduardo Ochs"]] +[[!inline pages="internal(2023/info/repl-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ +Eduardo Ochs - IRC: edrx, edrx <http://anggtwu.net/>, <mailto:eduardoochs@gmail.com> + +[[!inline pages="internal(2023/info/repl-before)" raw="yes"]] + +Many years ago, when I started programming, my dream was to write +games. I failed miserably in that, but I became fascinated by +languages, and I discovered Forth - that was perfect for writing +languages whose syntax was as simple as possible. Then I switched to +GNU/Linux and I had a series of favorite languages; at some point I +discovered Lua, that became not only my favorite language but also my +favorite tool for implementing other languages. One of the main +libraries of Lua is something called LPeg, that lets "people" +implement complex parsers in just a few lines of code using PEGs - +Parsing Expression Grammars. + +I've put the "people" in the last paragraph between quotes because for +many years I wasn't included in the "people who can implement complex +parsers with LPeg"… lots of things in LPeg didn't make sense to me, +and I couldn't visualize how it worked. Something was missing - some +diagrams, maybe? + +The main tool for drawing diagrams in LaTeX is something called TikZ, +that is HUGE - its manual has over 1000 pages. TikZ includes lots of +libraries and extensions, and each one of these libraries and +extensions extends TikZ's core language with some extra constructs. + +I don't know anyone - except for a handful of experts - who knows what +is the "core language" of Tikz, that lies, or that should lie, below +all these extensions… all of my friends who use TikZ are just +"users" of TikZ - they've learned some parts of TikZ by starting with +exemples, and by then modifying these examples mostly by trial and +error. In particular, no one among my friends knows how styles in TikZ +really work; styles are implemented using "keys", that are hard to +inspect from a running TeX - see [1] - and I found the chapter on "key +management" in the manual very hard to understand. It feels as if +something is missing from it… some diagrams, maybe? + +In my day job I am a mathematician. I work in a federal university in +Brazil, and besides teaching I do some research - mostly in areas in +which the papers and theses have lots of diagrams, of many different +kinds, and in which people use zillions of different programs to draw +their diagrams. Every time that I see those diagrams I think "wow, I +<span class="underline">need</span> to learn how to draw diagrams like that!", but until a few +months ago this seemed to be impossible, or very hard, or very +painful… + +This presentation will be about a point in which all these ideas +intersect. I am the author of an Emacs package called eev, that +encourages using REPLs in a certain way; Lua can be used in several +different styles, and if we use it in a certain way that most people +hate - with lots of globals, and with an implementation of OO that +makes everything inspectable and modifiable - then it becomes very +REPL-friendly; there is an extension of LPeg called LPegRex ([2], +[3]), that I found promising but hard to use, so I rewrote some parts +of it to make them more REPL-friendly, and to make it print its ASTs +in 2D ASCII art. The core of my presentation will be about how I am +using REPLs written in Lua to write grammars, parsers, and tools to +generate many kinds of diagrams, and how I am using these diagrams to +document both my own code and other people's programs - the parts of +them in which some diagrams seem to be missing. My hope is that people +will find these ideas easy to port to other languages besides Lua, to +other tools for generating diagrams besides LaTeX - SVG, maybe? - and +to other ways to use REPLs in Emacs besides eev. Some ideas in this +presentation were inspired by the blog post [4]. + +[1] +<https://tex.stackexchange.com/questions/663740/alternative-to-edef-c-pgfkeys-a> +[2] <https://github.com/edubart/lpegrex> +[3] <https://github.com/edubart/lpegrex/blob/main/parsers/lua.lua> +[4] <https://ianthehenry.com/posts/my-kind-of-repl/> + +About the speaker: + +I am this person here: http://anggtwu.net/eepitch.html + +# Discussion + +## Questions and answers + +- Q:if you had to summarize what you where trying to say in 3 + sentences or less, what would you say? + - A: Ouch! I would answer with a link... this one: + <http://anggtwu.net/eev-for-longtime-emacs-users.html#summarize-in-one-paragraph> + +## Notes + +- Magic is good as long as you have the option to look behind the + scenes when you want! :-) Imagine if all code was assembly + language. +- hi edrx! =) great talk + +- A :I didn't create a git repo with the code yet because I don't have any idea if anyone would want to test it today... everything is made to be used with this interface, <http://anggtwu.net/eepitch.html> + +- Q: is the code available as a tarball perhaps? or not at all yet? + - as I know very few people who use eev - and who already use that interface - I wanted to ask them if they'd be ok with installing some files in ~/LUA/ and ~/LATEX/, or if they really needed to use other directories, or what... the things that are to be installed in ~/LUA/ are in a tarball, but a few of the files require some files in ~/LATEX/. I'm preparing the LATEX/ directory of the tarball now and I'll announce it on the eev mailing list soon +- Dealing with diagrams with Emacs is tricky. Having documented examples of that is nice and would be helpful + - A: I _guess_ that the ideas that I presented would be easy to adapt to SVG diagrams, and to some packages that use Javascript to generate their diagram... but I don't want to write the code for SVG and for js diagrams all by myself. what do you use - or what have tried to use - to generate diagrams? + - i've personally tried using a bunch of different tools but never found anything that fully clicked for me or was remotely pleasant to use. i guess 'draw.io' is decent, but something in Emacs would be awesome + - do you think that musa's way to making emacs run javascript could work for draw.io? + - hmm no clue tbh, worth trying to ask him. but i must say i'm not super enthused about embedding js in emacs + - having tried most things (from exwm to org-protocol, to devtools debug protocol, and what not), I've converged on small personal extension that loads across browsers, locally, and stay connected with Emacs via the very useful emacs-websocket package, to interact both with the internal state of the browser (windows, tabs, etc.) and intra-page + +[[!inline pages="internal(2023/info/repl-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/repl-nav)" raw="yes"]] + + diff --git a/2023/talks/sat-close.md b/2023/talks/sat-close.md new file mode 100644 index 00000000..78ffa525 --- /dev/null +++ b/2023/talks/sat-close.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday closing remarks"]] +[[!meta copyright="Copyright © 2023 ${speakers}"]] +[[!inline pages="internal(2023/info/sat-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday closing remarks + + +[[!inline pages="internal(2023/info/sat-close-before)" raw="yes"]] + + + + +[[!inline pages="internal(2023/info/sat-close-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/sat-close-nav)" raw="yes"]] + + diff --git a/2023/talks/sat-open.md b/2023/talks/sat-open.md new file mode 100644 index 00000000..6179cce0 --- /dev/null +++ b/2023/talks/sat-open.md @@ -0,0 +1,24 @@ +[[!meta title="Saturday opening remarks"]] +[[!meta copyright="Copyright © 2023 ${speakers}"]] +[[!inline pages="internal(2023/info/sat-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday opening remarks + + +[[!inline pages="internal(2023/info/sat-open-before)" raw="yes"]] + +# Discussion + +- I like the relaxing music +- So intimidating! Being in a chatroom with all these famous Emacs celebrities! + + +[[!inline pages="internal(2023/info/sat-open-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/sat-open-nav)" raw="yes"]] + + diff --git a/2023/talks/scheme.md b/2023/talks/scheme.md new file mode 100644 index 00000000..011d52b1 --- /dev/null +++ b/2023/talks/scheme.md @@ -0,0 +1,78 @@ +[[!meta title="Bringing joy to Scheme programming"]] +[[!meta copyright="Copyright © 2023 Andrew Tropin"]] +[[!inline pages="internal(2023/info/scheme-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Bringing joy to Scheme programming +Andrew Tropin - Nick: [abcdw](https://trop.in/contact), Site: <https://trop.in/>, Fediverse: <https://fosstodon.org/@abcdw> + +[[!inline pages="internal(2023/info/scheme-before)" raw="yes"]] + +Emacs is usually a primary tool people remember, when talk about +development environment for lisp languages. It serves the purpose +great for Common Lisp, Clojure and of course Emacs Lisp, but what +about Scheme? Let's talk about current state of the things, recent +improvements, and emerging tools in this field. + +My talk covers the following: + +- What does a usual Scheme developer day look like? And how it can be + made more enjoyable? +- Important developer duties, their automation and acceleration. +- Interactive development and its benefits. +- Emacs setup for Scheme development. + +Links: + +- <https://git.sr.ht/~abcdw/emacs-arei> +- <https://git.sr.ht/~abcdw/guile-ares-rs> + +About the speaker: + +Talk about Lisp development workflows, REPLs, and modern Scheme tooling for Emacs. +Author of Guix Home, maintainer of [rde](https://git.sr.ht/~abcdw/rde), FOSS developer. + +# Discussion + +## Questions and answers + +- Q: How much do you use these repels remotely ex using a server or + desktop from your laptop? + - A: I don't use it remotely at the moment, but it should work + perfectly fine (except maybe lookup and other similiar + functions). I also want to add a shepherd service for ares-rs, + so you can connect to GNU Shepherd and systems based on it (like + GNU Guix) from you emacs process and interact fluently with + guile code. +- Q: Can this be integrated with eglot? + - A: I'm not sure how this integration could look like. + Theoretically, it's possible to expose many of ares-rs + functions via LSP custom actions (or whatever it called). + Anyway, contact me on IRC or <https://trop.in/contact> to + discuss it in more details if you have something in mind. +- Q: How hard is it to add support for something else than Guile? Does + it make sense to contribute at this early stage of development? + I've written several packages for CHICKEN Scheme before and would + like to try this one. + - A: It's a matter of implementing the whole chicken-ares-rs :) + Many of the code can be reused, but not all, unfortunately. + emacs-arei doesn't need any (or almost any) changes. +- Q: (One day late sorry) Is nREPL more extensible than what SLIME/SLY + use in Common Lisp world (I think it's comint.el) ? + - A: Yes, it's. I was evaluating and considering SWANK protocol, + but found nREPL to be more suitable and future proof. + <https://github.com/astine/swank-client/blob/master/swank-description.markdown> + +### Notes and discussion + +- brilliant work for scheme +- yeah, this is overdue. the only real alternative is slime-r7rs + +[[!inline pages="internal(2023/info/scheme-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/scheme-nav)" raw="yes"]] + + diff --git a/2023/talks/sharing.md b/2023/talks/sharing.md new file mode 100644 index 00000000..b27edbbb --- /dev/null +++ b/2023/talks/sharing.md @@ -0,0 +1,117 @@ +[[!meta title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video"]] +[[!meta copyright="Copyright © 2023 Jacob Boxerman"]] +[[!inline pages="internal(2023/info/sharing-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sharing Emacs is Caring Emacs: Emacs education and why I embraced video +Jacob Boxerman (he/him) - <mailto:jakebox0@protonmail.com> - <https://www.youtube.com/c/JakeBox0> - <https://www.linkedin.com/in/jacob-boxerman/> + +I am looking for a summer internship for Summer 2024, please feel free to reach out, I am looking to network :) + +[[!inline pages="internal(2023/info/sharing-before)" raw="yes"]] + +My YouTube Emacs series, "Straightforward Emacs," started as a quick video to +share with one person. That video now has over 50 thousand views, and inspired +me to do my part and give back to the Emacs community, creating what I wish I +had when I started my journey. + +150,000 views later, I still find my YouTube channel one of the most +fulfilling things in my life at the moment (despite the fact that I am very +busy and don't have so much time for videos these days), because it is my way +of giving back and sharing Emacs with a wider community. + +In addition to the technicalities of video production and teaching Emacs, this +talk will also address two crucial topics in our community — a love of Emacs +and desire for its longevity, and spreading Emacs to new users. + +In particular, I will discuss my views on the sharing of information in the +Emacs community — how we do it, what it does for us, and how we can do it +better. + +People often complain about the Emacs learning curve. As we all know, Emacs is +a beast, and those who use and love Emacs spend years tweaking, adjusting, +modifying, and, above all, learning. Because at the end of the day, Emacs is a +personal journey. Everyone has preferences, searching for what makes them most +comfortable, happy, and productive. Still, I believe that we are stronger +together than we are apart. One of the best ways to find out what we like is +by seeing what other people like. What's important is that what other people +like, other people can understand. + +I hope you'll come check out my talk, and that it will inspire you to do one +of the most honorable things one can do: teach and share with others. + +About the speaker: + +Jacob Boxerman is the creator of Straightforward Emacs, a video-based +Emacs series with practical, easy-to-follow and implement tutorials +and advice. He is a 2nd-year computer science student at Columbia +University in New York and is interested in the intersections of +computer science, finance, and psychology. In his talk today, titled +"Sharing Emacs is Caring Emacs: Emacs Education and Why I Embraced +Video," he will share his views on communication and sharing in the +Emacs community, and how we can all do our part to spread Emacs, +support each other, and ensure its growth. +# Discussion + +## Questions and answers + +- Q: Are you using ox-reveal to make your slides? If not, what are you + using? They look very elegant. + - A: Yes, and Jacob has a video about it on his channel! +- Q: Videos can be very inspirational to learn about something by + watching it used. I often find I need to do some research after + watching a video to learn more. Do you give people links to relevant + resources etc? + - A: Definitely something that I can do more of. I like to think + of my videos as jumping-points to the manual. +- Q: What are your fellow cohort of students using for their editors? + What kinds of "feedback" do you get from them when they learn + about you using Emacs? (Missed your talk so perhaps you answered + this) + - A: Professors making entry to comp sci as "accessible/simple" + as possible. In 3rd course the professor gives option of either + Emacs or Vim. Professor uses vim; so the class gravitates + towards that. A 4th course, in assembly, and the professor + suggests Emacs. At Columbia, vim is more used (as it's + modeled) +- Q: Did you start those university classes using Emacs? + - A: Yes. (Two years before entering college); taking notes in + org-mode for programming classes is the BEST!!! Syntax + highlighting, inline code blocks, literate-esque programming is + great for school. Professors want PDFs on their desk! And + org-mode simplifies this process. + - Also presenter is in humanities, and writes their humanities + essays in org-mode +- Q: To Leo: Before NeoVim, you had to do as much (or more) + configuration to get basic editing done than in Emacs. It's also + slower with modal editing compared to Emacs keybindings because you + have to press Esc and two keys to get things done while in Emacs you + only have to press C/M-something (one keypress) to move or search or + whatever and then write. I instantly became productive for writing + when I switched to Emacs. (I have 5 times tried to adopt Vim...and + each time I get a bit better. But Emacs was lightning in a bottle + for "productivity"; for those where vim works, I love it. And am + eccstatic that they are owning their editor) + - A: +- Q: Wha was a question you'd hoped we'd ask of you? + - A: + +## Notes + +- Cool talk! :-) +- I've used your videos before! Thanks for all the good work. + - So awesome to hear that!! You are welcome and thanks for letting me know, love to hear it +- Ha ha. I think Emacs users might just enjoy inconvenience. If a picture is worth a thousand words ... then maybe the value of a video is based on frame rate. +- Agreed, jakeb --- video is worth it. +- Interesting to think about video beeing worth it while watching a video of the conference. + + + +[[!inline pages="internal(2023/info/sharing-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/sharing-nav)" raw="yes"]] + + diff --git a/2023/talks/solo.md b/2023/talks/solo.md new file mode 100644 index 00000000..9bf2edbe --- /dev/null +++ b/2023/talks/solo.md @@ -0,0 +1,136 @@ +[[!meta title="How I play TTRPGs in Emacs"]] +[[!meta copyright="Copyright © 2023 Howard Abrams"]] +[[!inline pages="internal(2023/info/solo-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# How I play TTRPGs in Emacs +Howard Abrams - Website: <https://www.howardism.org> - Mastodon: @howard@emacs.ch, <mailto:howard@howardabrams.com> + +[[!inline pages="internal(2023/info/solo-before)" raw="yes"]] + + +- Ironsworn Emacs project code: <https://gitlab.com/howardabrams/emacs-ironsworn> +- Note that this code depends on my earlier project: <https://gitlab.com/howardabrams/emacs-rpgdm> +- The alpha version of a RPG Toolkit code: <https://codeberg.org/howardabrams/emacs-rpgtk> + +As an eternal Dungeon Master, I have a long history of collecting my notes +in Emacs. When my son was very young, I would export my Org files to +an HTML page that would include some magic JavaScript, so that when +displayed on my iPad, I could touch a table to have it randomly return a +line, or touch a phrase like `3d6+1`, to have the web page return a dice +roll. + +Lately I’ve been getting into Solo versions of tabletop role playing games +(TTRPG), and have had a fun time writing Lisp to support this style of +play, and thought I’d share my code and my fun. + +I’d like to begin by showing my game play in action: I’m currently playing +Ironsworn with the Mythic GM Emulator and various other tables and +procedures to stike a balance between *playing a game* and *writing a +book*. Next I would like to show the code that supports the interface, and +perhaps dive a bit deeper into some of the underlying mechanisms and +functions, especially that function that randomly chooses entries from Org +tables. I’ll end with a plan for turning my code into a community project, +if people are interested. + +Format (10 minutes, 20 minutes, description of other format) and outline: +20 minutes, but I could do less if you have too many submissions. + +About the speaker: + +Howard often gives technical, work-related talks at EmacsConf, but here he +is talking about playing games in Emacs. +# Discussion + +## Questions and answers + +- Q: Where can I get this? + - A: <https://gitlab.com/howardabrams/emacs-ironsworn> +- Q: How well would this suppliment freefoxm writing. short novels or + novels? + - A: I think it would be a good start. It is just an org file, so + you can go as far as you'd like with the writing. +- Q: Does the current version also have some utilities for doing + multiplayer? (either physically or digitally) (since you mentioned, + you previously did multiplayer sessions as well..) + - A: Nope, it is just Solo, but that does sound like a fun idea. +- Q: This game + CRDT (collabrative editing + <https://github.com/emacs-straight/crdt.git>) should be great for + non-solo playing? + - A: Perhaps, I'd like to try it out. +- Q: How does one become super awesome like Howard Abrams?? + - A: "There's no secrets! Just follow your passions!" + - Seriously inspiring. +- Q: Please talk a little about how you produced such a slick + presentation video! Everything looked completely professional! + - A: <https://emacs.ch/@howard/111506614571155011> "My son helped + me record my presentation for #emacsconf and we were able to + achieve an over-the-top show that will evoke the feels ... from + snickers to eyerolls." +- Q: Does table data allow for recursion? I have a table that when I + roll on it, a result comes up that references another table (e.g. + result that returns "There are [random monster] haunting the + cavern entrance" and we'd roll on [random monster] and inject + them into the result.) + - A: Yes. +- Q: With your toolkit a list of good books would be nice to be + included. example d&d, space, steampunk, cyberpunk settings +- Q: Hi Howard and Thanks for an outstanding presentation!!! What did + you use to create the graphics in your presentation? + - A: I don't really know. I will have to ask my son, as he did + the editing and directing. +- Q: Any plans to borrow tables from Dungeon World, or + Ironsworn:Starforged and publish in the toolkit repository? + (<https://github.com/lifelike/Dungeon-World-Org-Mode>) + - A: That does sound like fun. +- Q: How has this impacted your imagination on the scenes? (e.g. + constraints by algorithms) + - A: Yes, writing creatively can be very helpful in many other + aspects of your life. +- Q: Your essay/video "Literate DevOps" I consider a classic, and + it's really opened my eyes on org-babel and what you could do. Do + you still use those techniques at work? Have you come up with any + improvements or changes to your workflow? + - Yup. Still do. + +## Notes + +- Ironsworn Emacs project code: + <https://gitlab.com/howardabrams/emacs-ironsworn> +- Note that this code depends on my earlier project: + <https://gitlab.com/howardabrams/emacs-rpgdm> +- The alpha version of a RPG Toolkit code: + <https://codeberg.org/howardabrams/emacs-rpgtk> +- Really cool project! - Also the enthusiasm for the topic is really + contagious! +- "Every time Howard publishes a talk, I end up doing one more thing + in a new radical or literate way inside Emacs - currently looking + into how to go about literate snow shoveling for the winter ahead." +- I can see this one is going to be a classic +- the camera and lighting already has me sold +- Such a vibe! +- can I just (require 'howardism) and be done with it all? +- i love this so hard +- "Howard's talk is published on the site now" "I'll be in my bunk" +- Holy CRAP Howardism WINNING EmacsConf2023 +- Could we add this to emacs beside dunnet? +- Howard's stuff is always great. this particular thing is totally unchained. :D +- "Howard approaches your table in the tavern. Do you (1) buy him a tanker of mead (2) kill him and eat his brain" +- "Not showing-off," he said. +- That was epic +- Happy Hacking! +- What's the emoji for a crowd picking Howard up on our shoulders and carrying him around +- there's a peaceful aspect of having non web based stuff to play + - Non-web, and not-networked! +- the web is horrible. lisp machines are the future. +- Imagine playing D&D with colab (from the previous talk)! + + +[[!inline pages="internal(2023/info/solo-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/solo-nav)" raw="yes"]] + + diff --git a/2023/talks/steno.md b/2023/talks/steno.md new file mode 100644 index 00000000..1e130c37 --- /dev/null +++ b/2023/talks/steno.md @@ -0,0 +1,68 @@ +[[!meta title="Programming with steno]] +[[!meta copyright="Copyright © 2023 Daniel Alejandro Tapia"]] +[[!inline pages="internal(2023/info/steno-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Programming with steno + +Daniel Alejandro Tapia (I like "thou" for the second person and "ou" for the third) - I'm also on emacs.ch @SequentialDesign, <mailto:z111.513.321@gmail.com> + +[[!inline pages="internal(2023/info/steno-before)" raw="yes"]] + +Talk about what stenotypy is and give a brief history. +Then onto the challenges of using stenotypy in Emacs +and how I overcame them. +Also talk about the advantages of using stenotypy in Emacs +and in general. + +This talk uses two pieces of media under a Creative Commons license: + +- <https://en.wikipedia.org/wiki/File:Demonstratie_met_een_stenotypemachine_Weeknummer_28-28_-_Open_Beelden_-_22262.ogv?useskin=vector> - (a short video) Nederlands Instituut voor Beeld en Geluid, Creative Commons Attribution-Share Alike 3.0 +- <https://www.youtube.com/watch?v=EoAcHCTDXio> (a pic from this) - +Nathan Olivares, Creative Commons Attribution + +# Discussion + +## Questions and answers + +- Q:I found your screen dimensions and battlestation picture + interesting. Do you have any place where I can read more about it? + - A: +- Q:I missed the first part of the talk. This is Excalamus. How do + you handle 1-up and repeat type issues? Suppose you need to move 5 + characters to the right. Do you make 5 separate "right arrow" + strokes? + - A: +- Q: How did you get into stenotypy, and was that before/during/after + you started programming and using Emacs? + - A: +- Q:I recently switched to using my homerow index finger keys as shift + on hold. It feels very nice from an ergonomic perspective, but I'm + having trouble with consistent shift inputs. Did you have similar + experiences when starting to use double function keys? + - A: + +## Notes + +- So much good stuff here, thanks for sharing! +1 +- I appreciate the large text on this one +- What a fantastic presentation. +- Yes, ou's doing a great job and setting a good pace +- I have not gone that far with keyboard but I have been using Keymouse (keymouse.com) for a few years and it is killer one for Emacs :). +- Other than Daniel and myself, anyone else in the Emacs community using steno? + - I played with it but haven't had the time to practice. I have a Georgi and some Elisp to help with things like defining chords, looking things up, etc. + - I'm on a Georgi now. So good. + - what is a georgi? + - <http://plover.stenoknight.com/2019/12/georgi-review.html> + - It's a Stenoboard that's (sadly) no longer available :( +- I set a metronome and did typey type for 10-15 minutes until I had the basic lessons complete at 90% accuracy and 70wpm. Not that I write that fast now... +- If gpg can perform notarization then maybe Emacs can do legal transcriptions? + +[[!inline pages="internal(2023/info/steno-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/steno-nav)" raw="yes"]] + + diff --git a/2023/talks/sun-close.md b/2023/talks/sun-close.md new file mode 100644 index 00000000..ae336792 --- /dev/null +++ b/2023/talks/sun-close.md @@ -0,0 +1,46 @@ +[[!meta title="Sunday closing remarks"]] +[[!meta copyright="Copyright © 2023 ${speakers}"]] +[[!inline pages="internal(2023/info/sun-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday closing remarks + + +[[!inline pages="internal(2023/info/sun-close-before)" raw="yes"]] + +# General conference feedback + +- Subtitles: + - [regarding the adventure talk:] that is some hero subtitling on "cccc" to "C-c C-c". thank you! + - subtitles useful for those who are deaf and broken sound + - No sound!!?? Good thing for captions! + - FWIW I think it's actually helpful when the subtitles are delayed by a few seconds, so I can watch and listen normally, but if I misunderstand a few words, I can look at the delayed subtitles and find out was said. +- Closing mpv with "Q" (rather than "q") will save position +- I can honestly say though that I had a great time putting my talk together. I hope people will have a good time listening to it. Now that the work is over, I can say it was worth it. so I recommend it warmly +- Nice way to display countdown with emacs, that's why i love emacs and emacser +- Indeed, seeing all the use cases across so many fields is one of the big selling point of this coming together, loving it. +- this conference is crazy i am not sure i ever saw so much interesting emacs ideas in one day +- On Github: I once looking into commit activity in Vim vs. Neovim vs. Emacs and ... well ... Emacs is more actively developer despite not using github- Y'all, I have to say, this is like Christmas before Christmas every year. Emacsconf makes my year every year :) +- Thanks to the organizers for your tireless work, and to the most excellent presenters of today, what a treat! +- So many good talks +- many good talks, and a sense of community around emacs, which is nice to see + - Agreed, I enjoyed a thread I saw on Hacker News yesterday. There was a lot of love in it for Emacs and its community +- i also have a feeling that it's hard to communicate with others when you start digging into a large system. your confusion diffuses. i felt similar when jumping into web framework and legacy apps. that's also why i liked emacsconf, watching others clarifies a lot of stuff. (memories of johnw edebug flash talk) +- the pacing, clarity, and depth of the talks today has been really impressive, a presentation masterclass + - They're making me feel professionally inadequate +- Thank you for such responsiveness in running this conference!!! +- Yes, having the schedule in my own timezone was super helpful. +- emacsconf-attendee-mode? including etherpad-mode among others +- yeah virtual conf is fire thanks sacha +- What our Swiss friends are doing looks quite nice +- I've seen some virtual conferences (TeX / TUG?) that ran around-the-clock for different time zones. + - that would be lovely! + +[[!inline pages="internal(2023/info/sun-close-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/sun-close-nav)" raw="yes"]] + + diff --git a/2023/talks/sun-open.md b/2023/talks/sun-open.md new file mode 100644 index 00000000..189e6fdd --- /dev/null +++ b/2023/talks/sun-open.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday opening remarks"]] +[[!meta copyright="Copyright © 2023 ${speakers}"]] +[[!inline pages="internal(2023/info/sun-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday opening remarks + + +[[!inline pages="internal(2023/info/sun-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2023/info/sun-open-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/sun-open-nav)" raw="yes"]] + + diff --git a/2023/talks/table.md b/2023/talks/table.md new file mode 100644 index 00000000..ce63a419 --- /dev/null +++ b/2023/talks/table.md @@ -0,0 +1,88 @@ +[[!meta title="Who needs Excel? Managing your students qualifications with org-table"]] +[[!meta copyright="Copyright © 2023 Daniel Molina"]] +[[!inline pages="internal(2023/info/table-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Who needs Excel? Managing your students qualifications with org-table +Daniel Molina (he/him) - website: <https://www.danimolina.net> Mastodon: @dmolina@fosstodon.org, <mailto:dmolina@mailbox.org> + +[[!inline pages="internal(2023/info/table-before)" raw="yes"]] + +In this talk I will explain how to use org-table to review and calculate the qualifications of the students (but the used techniques are general). I will show how to use several tables, one for each partial exam, using weights for create the final table. I also use summarize table with org-aggregate for a general view of results, and export the qualification to PDF. All the process with Emacs! + +I’ll demonstrate some functionality I use for: + +- Formula for calculate the qualification using weights, that can be easily updated. + +- Summarize tables with org-aggregate (<https://github.com/tbanel/orgaggregate>). + +- Create a final table making reference to tables in different files. + +For several years, I have been using that workflow, and I consider it is very natural with many advantages, like writing the reasons/feedback in the same file with the qualifications, or to be able to use a version control. + +About the speaker: + +My name is Daniel Molina Cabrera, I am a senior lecturer in Computer +Science at the University of Granada, in Spain. I use only Linux in my +computer, and after been using Vim many years, last years I mainly use +Emacs for editing, as file manager, as email program, ... + +In my experience, using org-table is very powerful and useful, but +many interesting features are not well-known. Unfortunately, sometimes +it is difficult to see examples showing the possibilities, and I think +this example could be very informative. + +# Discussion + +## Notes + +- Very impressive on your skill over the org-table +- Thank you for your opinion. +- Never use aggregate function before, will have a try. + - Yes, you should, it is clearly a nice package and very useful. Also, + it is very well documented at its page: + <https://github.com/emacsmirror/orgtbl-aggregate> +- org table is awesome, but it lacks the fold, if i don't missing something. long table is bad to view + - You can put the table under a heading, and you will be able to fold it. + - very true. Long tables also have performance issues unfortunately. (IME) but still invaluable for any form of data analysis. I've not used the aggregate package used in this talk: must have a look. Don't get me wrong: I will put up with the performance hit of long tables well before I would ever consider one of those other tools! + - any block can be folded by pressing TAB on its header line + - I have manage about 200+ students evaluations with multiple columns (20+) in a single org file. It is not fast, but I can't say it is worst than using Excell (or even LibreOffice's Calc). I have separate my students in multiple tables, according to their groups, and that helps. +- Got an answer on mastodon concerning org tables and formulas: "The documentation is not ideal", which is a little sad. + - sadly, that's true. Much experimentation is needed. + - I find the documentation for org tables quite good. It does help if you know Calc as well, however. But, of course, updates to the documentation are always welcome... +- This talk was really good in showing how to actually make some things though. Going to look up the aggregate package. + +## Questions and answers + +- Q: Why we splitter the table like this, instead of using a giant + master table? + - A: Actually, some of the tables are only for me, and other are + published. This is the main reason to have several tables. +- Q: Do you have some kind of school administrative system you have to + enter the grades into in addition, or is this how you present the + grades to the students? Do you use it for your own records only? + - A: Well, I use the final table (and for each practique) and + export it to PDF to put the qualifications, it is not only for + my own records. Also, there is a school administrative system + that I need to use to publish the final score. In order to make + easier to me, I export in the same order and then with the + browser I put the qualifications. It is suppose to import from + csv (and I could export from my org-table) for it is not always + working nicely, it is a pity, because in that case, I could + automatically put the qualifications. +- Q: + - A: +- Q: + - A: +- Q: + - A: + + +[[!inline pages="internal(2023/info/table-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/table-nav)" raw="yes"]] + + diff --git a/2023/talks/taming.md b/2023/talks/taming.md new file mode 100644 index 00000000..769242eb --- /dev/null +++ b/2023/talks/taming.md @@ -0,0 +1,47 @@ +[[!meta title="Taming things with Org Mode"]] +[[!meta copyright="Copyright © 2023 Gergely Nagy (algernon)"]] +[[!inline pages="internal(2023/info/taming-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Taming things with Org Mode +Gergely Nagy (algernon) (he/him) - Pronunciation: "algernon" (all small letters, no capital A, please), IRC: algernon, IRC: algernon (@libera.chat, @OFTC) - but I normally don't check IRC. I'll be around for the conference, but IRC isn't a good way to reach me nowadays. Website: <https://asylum.madhouse-project.org/> Social media: @algernon@trunk.mad-scientist.club (<https://trunk.mad-scientist.club/@algernon>), <mailto:emacsconf@gergo.csillger.hu> + +[[!inline pages="internal(2023/info/taming-before)" raw="yes"]] + +**This talk has been cancelled. Sorry!** + +I'd like to present my solution of taming a NixOS configuration **and** a +Doom Emacs configuration with Org Mode. Taming, as in highlighting the +pain points I had with them, why I found them to be a pain point, and +then offering a solution. Might not be the best solution, but one that +worked out remarkably well for me: writing a lot of words in Org mode to +explain my thinking, for future me, sprinkling some code blocks here and +there, and holistically assembling them into their tangled out form. + +Not a very in-depth talk, not a one-size-fits-all kind of solution. The +goal is to show that you don't necessarily have to adapt to languages, +or frameworks. With a little bit of care, and a whole lot of words your +future self will thank you for, you can bend them to your will. So the +computer will work for you, rather than the other way around. + +Because Emacs and Org mode can bend time and space - at least in a way, +and you don't even need M-x butterfly! + +About the speaker: + +I'm a tiny mouse, a hacker. I like to play with things. I'm also very +opinionated. These things don't always mix well. When I wanted to play with +NixOS and Doom Emacs, I faced a problem: I don't like the Nix language, and I +don't like how Doom's config has to be structured. I really wanted to play with +both, though. So I tamed them. With Org Mode. I'd love to tell you how, so you +can do the same. + + +[[!inline pages="internal(2023/info/taming-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/taming-nav)" raw="yes"]] + + diff --git a/2023/talks/teaching.md b/2023/talks/teaching.md new file mode 100644 index 00000000..70e0ffa2 --- /dev/null +++ b/2023/talks/teaching.md @@ -0,0 +1,145 @@ +[[!meta title="Teaching computer and data science with literate programming tools"]] +[[!meta copyright="Copyright © 2023 Marcus Birkenkrahe"]] +[[!inline pages="internal(2023/info/teaching-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Teaching computer and data science with literate programming tools +Marcus Birkenkrahe - Faculty website <https://www.lyon.edu/marcus-birkenkrahe> - LinkedIn <https://www.linkedin.com/in/birkenkrahe> - Twitter (X) <https://twitter.com/birkenkrahe> - Researchgate.net <https://www.researchgate.net/profile/Marcus-Birkenkrahe> - Google Scholar <https://scholar.google.com/citations?user=Vvnwsv0AAAAJ&hl=en> - ORCID <https://orcid.org/my-orcid?orcid=0000-0001-9461-8474> - Wikipedia <https://en.wikipedia.org/wiki/Marcus_Birkenkrahe>, <mailto:birkenkrahe@lyon.edu> + +[[!inline pages="internal(2023/info/teaching-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="teaching-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +I present a case study on using Emacs and Org-mode for literate +programming in undergraduate computer and data science courses. Use of +Emacs was obligatory in courses covering R, Python, C/C++, SQL, and more. +Onboarding relied on simplified Emacs tutorials and starter configurations. +Sessions involved live coding, and assignments and projects required +Org-mode notebooks. I will present the setup, the results, and provide +insight into my ongoing work with Emacs in the classroom. Especially in +AI-assisted teaching, literate programming tools will become even more +important, and Emacs and Org-mode will have a new role to play. Most +importantly, using Emacs consistently for all classwork imparts deep +infrastructure and computing knowledge that other tools often obfuscate. + +- Outline (tentative): + 1. Introduction to the speaker and the case study + 2. Teaching computer and data science today + 3. The rationale for using Emacs as an IDE + 4. The rationale for using Org-mode for literate programming + 5. Case study: purpose, content, technology, results + 6. Challenges and lessons learnt + 7. Literate programming in the age of low code and AI + 8. Conclusions and outlook + +About the speaker: + +Associate Professor of Computer and Data Science at Lyon College in +Batesville, AR. He joined the Lyon faculty in 2021, on leave of absence +from the Berlin School of Economics and Law. He earned a PhD in theoretical +physics (lattice gauge theory). He has published widely in different areas, +including: neural nets, multigrid applications, knowledge management, +e-learning, literate programming, process modeling, and data science. He is +associate editor of the International Journal of Data Science, editorial +board member of the International Journal of Big Data Management, and +corresponding member of the Institute for Data-Driven Digital +Transformation (d-cube) in Berlin, Germany. Emacs user since ca. 1990. + +This talk is based on a recent publication with the same title +(Birkenkrahe, 2023; [doi.org/10.3390/digital3030015](https://doi.org/10.3390/digital3030015)). + + +# Discussion + +## Feedback + +- at my company new helpdesk analysts seem to suffer from the same symptoms of not fully understanding comp architecture. I guess i will have to teach them emacs... +- Very interesting talk, thank you! +- Great talk, thanks. +- Well done! +- Very important point to teach CS: immersion. Nothing better than emacs for that. +- Emacs is *great* for beginners (on CS): it makes them think programatically on their environment. + +## Notes + +- <https://www.mdpi.com/2673-6470/3/3/15> +- Data Science: intersection of math, comp sci, domain knowledge +- I like the idea you use this method to write every piece of your + code. It's so easy for me to just ask llm a piece of code, run it + and forget about it. I will try to improve this type of way to write + code. +- Students were able to use Emacs competently with 1 week (did I hear + that right?) of practice + - This is quit counter-intuitive. + - I picked up Emacs 3 years ago, and through immersion was up to + previous competency parity in about a week or so. +- Org Remark allows you to highlight in org mode documents, If you + pair that with org web tools you can highliht an offline web page + backup with highlights in org mode +- CRDT.el -- allows multiple people with their own emacs config to + edit a hosted Emacs buffer +- Just use one of the Emacs chatgpt or other LLM interfaces instead of + leaving for Jupyter notebooks. +- "The AI advantage [of Jupyter notebooks] does not make up for the + loss of immersion that Emacs and Org-Mode provides. [Immersion is + a important]" + +## Questions and answers + +- Q: What tool(s) do you use for making your slides; they are very + nice. Would be great to get a template. + - A: org-reveal +- Q: Why MDPI? :) + - A: +- Q: Do you think immersion can be achieve on teaching other students + with differnet backgrounds? + - A: + - yeh, exactly, kinda risky for young teacher. + - Actually, may depend on the uni. AFAIK, MIT style they + promote is full of workshops/handson classes with more + limited lectures. +- Q: Do some of your students nag you about using VSCode? I teach + simple programming at a vocational school and even after showing the + students vim, Emacs and nano and telling them that I prefer Emacs + and also showing them code inside code blocks in Org mode and using + Emacs in every class I teach, they still all chose VSCode as their + editor. (I let them choose.) It seems like they are brainwashed + somehow... Is the success in the obligatory use of Emacs? + - A: I observe the same behavior + - "The arguments from beginners for VS Code aren't strong"; + appreciate the fact that immersion is the goal and the + constraints of Emacs as required pushes towards immersion. + (Thank you for your answer!) + - Having more tutorials on Emacs/Org mode would be most welcome + (yantar92 aka Org contributor) + - If you make more videos, share them on + [[https://orgmode.org/worg/]{.underline}](https://orgmode.org/worg/) +- Q: I'm curious about your approach to handling EDA, particularly + with wide datasets that have numerous columns. Given the constraints + of Emacs which might not be optimal for viewing large tables, could + you share how you navigate and explore such datasets efficiently? Do + you integrate any specific Emacs tools or external methods to + streamline this process? + - A: + - I know that John Kitchin is working with remote DFT + calculations - Tbs of data to visualize. +- Q: Do you have a startup emacs configuration for your students? + - A: +- Q: (from chat) Fantastic talk, thank you. I realise that it will be + difficult to provide an accurate answer, but what proportion of your + students do you think will keep on using Emacs after your courses? + + +[[!inline pages="internal(2023/info/teaching-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/teaching-nav)" raw="yes"]] + + diff --git a/2023/talks/test.md b/2023/talks/test.md new file mode 100644 index 00000000..f704f599 --- /dev/null +++ b/2023/talks/test.md @@ -0,0 +1,113 @@ +[[!meta title="What I learned by writing test cases for GNU Hyperbole"]] +[[!meta copyright="Copyright © 2023 Mats Lidell"]] +[[!inline pages="internal(2023/info/test-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# What I learned by writing test cases for GNU Hyperbole +Mats Lidell (he, him, his) - IRC: matsl, @matsl@mastodon.acc.sunet.se, <mailto:matsl@gnu.org> + +[[!inline pages="internal(2023/info/test-before)" raw="yes"]] + +I'm maintaining GNU Hyperbole. I volunteered for that at a time when FSF was asking for one +since it was unmaintained. I did not have much elisp experience but a passion for the +package. Not much happened. + +To my great delight a few years ago the author of Hyperbole Bob Weiner joined the band and +we started together to actively develop Hyperbole again. + +One of my focus areas in that work has been to add test cases. We have now gone from no +tests to over 300 ert tests for the package. This talk is about my test case journey. What +I have learned by doing that. + + +# Discussion + +## Questions and answers + +- Q:How many tests do you have for Hyperbole and how wouild you rate + the test coverage compared to other packages? + - A: + - With all tests including the interactive we have 354 tests. + Havng said that I must point out that the size of the tests + can be very different. I tend to split tests so they are + logically (in some sense) different. So that if a test fails + it will more likely point you to what the error is. This + makes it become more tests. Codewise you could collect + similar tests to one ert-deftest making the name of the test + point out some group or collection of functions, but I + don't do that! + - I have not studied other packages so I don't know how our + test coverage compares to other packages. In fact I don't + know what code coverage we have. That is another thing to + look into. +- Q: One small suggestion, to me 'should' means optional, whereas + 'shall' or 'must' means required. Not sure if it is too late to + make a major grammar change like that :) Very nice presentation. (I + see :)) + - A: The assertions come from the ert package so any changes would + have to be suggested to that. I guess you could make your own + version of the assestions using aliases for should et al. +- Q: FYI, you may find this helpful for running Emacs tests/lints, + both from a command line and from within Emacs with a Transient + menu: <https://github.com/alphapapa/makem.sh> It also works on + remote CI. + - A: Thanks for the suggestion. I did have a look at makem.sh but + a long time ago so I don't remember why we did not try to apply + it. I might give it another look now when I have used plain ert + more. +- Q: Is it easy to run ad hoc tests inside of an Emacs session, given + the command line scripts you need to run to get a batch test session + running? In other words, can you tweak tests in an Emacs session and + run them right away? + - A: + - Yes, in principle you just load your tests and run them all + using `ert` and give it the test selector `t`. That runs + all loaded tests. + - If you want to modify a test you can do that. You change it, + evaluate it, and run it again. Just as you change any + function. +- Q: Did you have to change Hyperbole code and design to be more + readily testable as you were increasing your test coverage? + - A: + - Yes, we have done that to a small extent but we should do + more of that. Some Hyperbole functions are large and by that + complicated to test. Splitting them into smaller logical + parts can make testing easier. + - Also moving code into pure functions and avoid side effects + is a good thing. Pure functions are easier to test. Maybe + haveing the side effects separated out into fewer places. + This has not been applied but is something I have been + thinking about. With side effects I here mean things like + adding or modifying text in buffers. +- Q: What's the craziest bug you found when writing these tests? + - A: This is not a bug but I always assumed giving a prefix + argument to a cursor movement would give the same result as + hitting the key the same amount of times. So like C-u 2 C-f + would be the same as hitting the C-f key twise. It is not! When + moving over a hidden area, the three dots '...' at the end of + folded line in org-mode or outline-mode, you get different + behavior. Trying to write a test case for the kotl-mode and its + folded behavior teached me that. +- Q: Why do you prefer el-mock to mocking using cl-letf. (Question + asked in BBB) + - - With cl-letf you need to keep track if the mocked + functionality is being called or not. The el-mock package + does that for you which is what you normally want. Doing + this with cl-letf means the definition becomes longer and + more complicated. Sort of blurs the picture. el-mock is more + to the point. + - BUT since cl-letf does allow you do define a "new" + function it is more powerful and it can be the only option + in cases where el-mock is too limited. So it is good to know + of this possibility with cl-letf when el-mock does not + provide what you need. + + +[[!inline pages="internal(2023/info/test-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/test-nav)" raw="yes"]] + + diff --git a/2023/talks/unentangling.md b/2023/talks/unentangling.md new file mode 100644 index 00000000..14993980 --- /dev/null +++ b/2023/talks/unentangling.md @@ -0,0 +1,166 @@ +[[!meta title="(Un)entangling projects and repos"]] +[[!meta copyright="Copyright © 2023 Alexey Bochkarev"]] +[[!inline pages="internal(2023/info/unentangling-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# (Un)entangling projects and repos +Alexey Bochkarev (he/him) - <https://www.bochkarev.io>, @bochkarev@qoto.org (Mastodon) + +[[!inline pages="internal(2023/info/unentangling-before)" raw="yes"]] + +Emacs provides a few excellent tools for working on projects through +all their key stages. Orgmode is great for brainstorming, structuring +and maintaining TODO lists, tracking time, organizing notes, and +writing memos or reports. Many major modes help writing code, magit +makes version control almost frictionless, and projectile helps with +project management and navigation. However, I found a few situations +when I wanted to separate the concepts of "project" and "source +storage" (say, having a few version control repositories associated +with a single "generalized project"). + +In this talk, I would like: + +1. to describe a specific example of such situation, + +2. discuss a workflow aimed at managing such "generalized" projects +and present my solution, based on a very simple ELisp "glue" on top of +the functionality provided by package projectile. + +For example, consider a research project (think: applied mathematics with +a heavy part of computational experiments). It might consist of: + +- The ``paper'' draft: some sort of final report source, usually in + LaTeX format, or orgmode exported to PDF via LaTeX. Version controlled + by git. + +- Numerical experiments: a separate folder, or even a separate git + repo. Contains the source code for numerical experiments and the + related technical documentation. Will be published along with the + paper. + +- A collection of intermediate memos (notes) sent to collaborators. + +- A collection of "raw" notes (lab journal), regarding what did I try + and especially what did NOT work and in which ways. + +This setting raises a few problems that all boil down to the necessity +of having an easily accessible private notes file(s) associated with a +few repositories at the same time outside of these repos. This way one +can: + +- Maintain more granular project structure and TODOs while still having +more concise TODO lists for the colleagues on a per-repository basis. + +- Maintain (project-specific) private technical notes, and maybe a full + lab journal both describing the "big picture" of the project and + containing the technical information. + +- Keep time tracking data private and outside of the source repositories, + +- Capture thoughts and TODOs to a single place from across a few + specific repositories. + +I propose to solve this problem by associating a single "notes folder" +and a main `.org` file to each repository using the standard mechanism +of directory-local variables on top of what is already provided by +projectile package. + + +# Discussion + +## Questions and answers + +- Q: Do you use these unentangling techniques in a blog or hosting a + zettelkasten? + - A: Well, I try to keep my "private notes" in something that + might qualify as a Zettelkasten, yes. I wouldn't say I 'host' + it --- it's not online. But yes, the whole point is that + these "private" notes are interconnected in a Zettelkasten-y + way (using org-roam package) + - Denote notes Silo features might be useful with your + workflow + - <https://protesilaos.com/emacs/denote#h:e43baf95-f201-4fec-8620-c0eb5eaa1c85> + - oh, thanks --- I'll have a look! +- Q: What is the biggest unhappiness you haven't figured out for your + current workflow? + - A: Maybe I am still on the fence re: where do I structure my + TODOs and clock time. I tried to play around with the idea that + I structure the work in a repo, and then when I "clock in" it + saves time to a separate notes file instead... but it seemed a + little too complicated, to my taste. + - I feel that the time tracking also kind of annoying, + especially you forgot to clock on and all the things mess + up. So right now I'm just using a Pomodoro technique, 25 + minutes, done, rest, 25 minutes, rest, and kind of repeating + that. And I'm quite happy with that. + - wait, what's that? 'org-pomodoro'?. sounds + interesting... + - It's not, you know, special for Org Mode. It's + kind of a general technique which you focus on a + small task for just 25 minutes, but at the time + you're super focused, 100% focused, and after that + five minutes you rest, and you're kind of repeating + these patterns over long sections. You can do four, + five, six of those sections, and it helps me to + focus over relateive long time. + - I also feel this might be something really + useful. Just haven't found a way to incorporate + it into my workflow + - for me it's quite simple is I can just use + a simple stopwatch that every 25 minutes + stop and reminde me a rest. I believe + there's a lot of fancy clock specialized on + this this type of technique it's at the + core of this concept is really not a complex + idea. + - wait, I'm confused. So, that's outside + Emacs right? :-) + - Yes, the concept is outside of + Emacs, but I saw people using this + package. Let me search,: + <https://github.com/marcinkoziej/org-pomodoro> + <-- yeah, that one. Maybe I'll + have a look, thanks! + - Yeah, it's, again, if you're + familiar with the sports, it's + kind of making your long hard + working, breaking into a small + section, but I feel it's, you + have more kind of energy over a + long term, yeah. + - I like Using a weekly GTD log files for my TODO. That way I + can look back at them and not have my GTD to big. I like to + pull daily tasks from agenda + - and what do you do to transfer stuff between the weeks + --- a manual review? +- Q: Do you use project.el features as well, or just projectile.el + ones? + - A: Ugh. OK, I am at that point where I am not sure any more ;) + it is pretty well integrated to my Doom Emacs, so I am not sure + which one is that... + +## Notes + +- GNU Hyperbole already supports this with directory-specific quick + access button files (which can be Org files). These can connect to + any number and type of document artifacts, including projects, + repos, directories, etc. You don't need to put any code in + dir-locals either. The directory/project-specific tags jumping + (automatically selecting appropriate TAGS files) is also built-in. + Have a look. + - Yes, there's clearly a few ways to achieve this. I have a + feeling Hyperbole achieves this, and much more. I wanted to have + something simpler, somehow. (Yes, you seem to have some very + efficient techniques down; maybe you could utilize both). + Thanks for the talk, it was good. Thanks for the suggestion, + tho! + + +[[!inline pages="internal(2023/info/unentangling-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/unentangling-nav)" raw="yes"]] + + diff --git a/2023/talks/uni.md b/2023/talks/uni.md new file mode 100644 index 00000000..11d45730 --- /dev/null +++ b/2023/talks/uni.md @@ -0,0 +1,167 @@ +[[!meta title="Authoring and presenting university courses with Emacs and a full libre software stack"]] +[[!meta copyright="Copyright © 2023 James Howell"]] +[[!inline pages="internal(2023/info/uni-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Authoring and presenting university courses with Emacs and a full libre software stack +James Howell + +[[!inline pages="internal(2023/info/uni-before)" raw="yes"]] + +Resources: <https://git.sr.ht/~jamesendreshowell/org-teach> + +Relying exclusively on free and open source software for teaching science courses at a large university? With GNU Emacs at the center of these +workflows? It's not only possible, it's much more flexible and empowering than being locked into proprietary platforms. We will step through the +entire software stack and workflows for authoring and presenting lessons, authoring and evaluating assessments, and engaging students both in +person and in fully online teaching environments. + +About the speaker: + +James Endres Howell has taught Molecular and Cell Biology, +Biochemistry, Microbiology, Immunology, Toxicology, and Molecular +Medicine at Penn State since 2006. Recently Dr. Howell has developed +popular courses for non-science majors in Genetics, Ecology and +Evolution; Science in Literature; and Science in Society. He has used +Emacs daily since 1988. + +# Discussion + +## Notes + +- I'm digging the weather-report style with your pointing at the screen :) +- I'm using org-mode to study for exams rather than present lectures recently btw. I like to copy questions in the org file and add notes as I work through the questions on paper. +- Q: do you use org-present or something like that? + - A: Nope, just a normal Org buffer. I have a few custom keybindings for narrowing to headlines and such, when I do use Emacs for presenting. (Coming up in a few slides) +- Next step: libre hardware :) +- ahh he broke the fourth...fifth?...wall! :) +- bookmarking xournal+++ for sure +- Living dangerously now. :-) +- he's definitely a wizard! +- OBS looks very useful. Must explore. +- I had never thought of using OBS for presentations like that... this has to be the slickest setup there is +- my students all seem to come to class with tablets these days and they annotate the PDF of all of my slides. When I realised they were doing this, I decreased the density of material on each slide to ensure there was enough space for their notes. +- macros are a very powerful and useful feature of org for complex documents! + +- Feedback +- Damn, this looks really really useful +- This presentation is damn cool, LOL. +- excellent talk! Thank you. +- Thanks for the talk, it was very interesting!! +- Fantastic. I think this talk will be a reference for years to come! +- Great stuff! +- You are one of my heroes now! 👏👏👏👏👏 +- Brilliant talk James, inspiring stuff +- Great system! + + + + +- Download the handout (27MB PDF): + - <https://git.sr.ht/~jamesendreshowell/org-teach/blob/master/EmacsConf_2023_Howell_handout.pdf> +- The whole repository: + <https://git.sr.ht/~jamesendreshowell/org-teach> +- Resolution kinda low. + - No, sorry! It was the best I was able to record. + - okay, it's fine. +- OBS is cool. +- I use pdfpc (can also present and draw, but command line) - + <https://pdfpc.github.io/> + - Also, pdfpc supports videos/animations in presentations :) + - Hm! I will look into it! +- Kinda mute? + - I don't know why! +- On publishing lectures/books - another classic example is John + Kitchin's <https://github.com/jkitchin/dft-book> + - Kitchin is a monster! He must have made a deal with the devil or + something. + - I suspect that it is what Assistant Prof position does to + people +- Pedagogy first "development" + - Materials must provide a way to take notes on + - Separate the work of writing/developing/scaffolding from slide + wrangling + - THe org-teach allows for grabbing a slide from another + repository (e.g. don't repeat knowledge) +- If you want to highlight org mode documents you can use + <https://github.com/nobiot/org-remark>. If you use Org Remark with + <https://github.com/alphapapa/org-web-tools> you can get an offline + backup af a web page that you can highlight and edit + - Wow. I will look into these. +- Macros are a cool idea! + - Are org-mode macros a new concept/learning for you? + - Surely not (I am a contributor). But it is a new idea to use + them for beamer presentations. + - Yeah, I loved see other ways folks use macros. I've + done some of that for Beamer, but only recently. +- I use org-transclusion + (<https://github.com/nobiot/org-transclusion>) for include other + document. + - It sounds like the include other file might be for including + non-org-mode files; does org-transclusion provide that + functionality? + - yep~, quit powerful. + - :) + - opps, I double check the manual. It seems mainly for + human readable source code (txt, md, source code). I + don't think it works with Pdf ... +- OBS TIP -- You can use an android app like OBS Blade to control obs + from android + - Cool, thanks! +- CRDT.el <https://code.librehq.com/qhong/crdt.el> -- This can allow + multiple people with thier own Emacs Configs to edit a hosted emacs + buffer at the same time + - Awesome + +## Questions and answers + +- Q: I'm curious how the xournal stylus work is composited with OBS +- Q: that entire screen was xournal at the time? I was thinking the slide was a different screen / software + - A: All the slides are presented via Xournal++. The "slides" frame is video capture from the tablet, running Xournal++. +- Q: Do you have a fancy OBS scene changer to switch between the software being presented? + - A: I just map scenes to function keys on the keyboard. +- Q: How you overlap yourself with the presenation? It's so cool. + - A: OBS provides a chroma key "filter" + - it's so cool! with DNA demo. +- Q: How you deal with Video in Beam? I found it's so hard to do + that. PPT on the other hand is so easy to achieve. + - A: I use Beamer export to make static slides, that I present via + Xournal++. Videos, I present via VLC. So I use OBS to switch + back and forth between Xournal, VLC, Firefox, etc. + - The above-mentioned pdfpc provides a LaTeX package to link + videos right to pdf (battle-tested on conferences ;)) + - Thanks, I will have a try. + - Thank you! +- Q: Do you ever use things like Org Presnet and stay forgo powerpoint + slidees + - A: I've tried them but my core need is to annotate PDFs with + the stylus in real time, so the best solution is Xournal++ +- Q: Is the {{{ }}} syntax an Org Mode core feature that I have missed + so far, or did you program that? (Btw, thank you for the great + talk🙏) + - A: <https://orgmode.org/manual/Macro-Replacement.html> + - Some export backends allow for conditionals in the macro + replacement; when exporting to Hugo you can add an @@hugo + within the resolved macro. + - @@backend:...@@ is a separate construct - you do not + have to use it in combination with macros. For example, + see @@html example in + <https://orgmode.org/manual/Quoting-HTML-tags.html> + - Thank you very much, I'll definitively look into this🙏 +- Q: What kind of (comparative) feedback are students giving you + regarding your approach? + - A: They love it! All accounts were that my courses were much + more successful than other instructors'. +- Q: You also teach English at Uni? cool + - A: Yes, it's a fun course. +- Q: Is the input from the Surface captured by OBS and all of that + combined goes to Jitsi or Zoom? Correct? + + +[[!inline pages="internal(2023/info/uni-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/uni-nav)" raw="yes"]] + + diff --git a/2023/talks/voice.md b/2023/talks/voice.md new file mode 100644 index 00000000..2c5c537f --- /dev/null +++ b/2023/talks/voice.md @@ -0,0 +1,216 @@ +[[!meta title="Enhancing productivity with voice computing"]] +[[!meta copyright="Copyright © 2023 Blaine Mooers"]] +[[!inline pages="internal(2023/info/voice-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + +# Enhancing productivity with voice computing +Blaine Mooers (he/him/his) - Pronunciation: pronounced like "moors", blaine-mooers(at)ouhsc.edu, <https://basicsciences.ouhsc.edu/bmb/Faculty/bio_details/mooers-blaine-hm-phd>, <https://twitter.com/BlaineMooers>, <https://github.com/MooersLab>, <https://codeberg.org/MooersLab>, mastodon(at)bhmooers + +[[!inline pages="internal(2023/info/voice-before)" raw="yes"]] + +[[!template id="help" +volunteer="" +summary="Q&A could be indexed with chapter markers" +tags="help_with_chapter_markers" +message="""The Q&A session for this talk does not have chapter markers yet. +Would you like to help? See [[help_with_chapter_markers]] for more details. You can use the vidid="voice-qanda" if adding the markers to this wiki page, or e-mail your chapter notes to <emacsconf-submit@gnu.org>."""]] + +Voice computing uses speech recognition software to convert speech into text, commands, or code. +While there is a venerated program called EmacSpeaks for converting text into speech, an +``EmacsListens'' for converting speech into text is not available yet. +The Emacs Wiki describes the underdeveloped situation for speech-to-text in Emacs. +I will explain how two external software packages convert my speech into text and computer +commands that can be used with Emacs. + +First, I present some motivations for using voice computing. +These can be divided into two categories: productivity improvement and health-related issues. +In this second category, there is the underappreciated cure for ``standing desk envy''; +the cure is achievable with a large dose of voice computing while standing. + +I found one software package (Voice In) to be quite accurate for speech-to-text or dictation +(Voice In Plus, <https://dictanote.co/voicein/plus/>), but less versatile for speech-to-commands. +I have used this package daily, and I found a three-fold increase in my daily word count almost +immediately. +Of course, there are limits here; you can talk for only so many hours per day. + +Second, I found another software package that has a less accurate language model (Talon Voice, +<http://talon.wiki/>)) but that supports custom commands that can be executed anywhere you can +place the cursor, including in virtual machines and on remote servers. +Talon Voice will appeal to those who like to tinker with configuration files, yet it is easy to +use. + +I will explain how I have integrated these two packages into my workflow. +I have developed a library of commands that expand 94 English contractions when spoken. +This library eliminates tedious downstream editing of formal prose where I do not use +contractions. +The library is available on GitHub for both Voice In Plus +(<https://github.com/mooersLab/voice-in-plus-contractions>) and Talon Voice +(<https://github.com/MooersLab/talon-contractions>). + +I also supply the interactive quizzes to master the basic Voice In commands +(<https://github.com/MooersLab/voice-in-basics-quiz>) and the Talon Voice phonetic alphabet +(<https://github.com/MooersLab/talon-voice-quizzes/qTalonAlphabet.py>) +I learned the Talon alphabet in one day by taking the quiz at spaced intervals. +The quiz took only 60 seconds to complete when I was proficient. + +I store my daily writing in a multi-file LaTeX document with one tex file per day. +365 files are compiled into one PDF per year. This is usually about 1000 pages. +I am not going to push my luck with a multiyear document. +Each month is a chapter. The resulting PDF is a breeze to scroll and search. +It has an autogenerated table of contents and an index. I have posted +a blank version for 2023 and another for the upcoming year +(<https://github.com/MooersLab/diary2024inLaTeX>) +One could take a similar approach in org-mode by using Bastian Bechtold's +org-journal package (<https://github.com/bastibe/org-journal>). + +I gave a 60-minute talk on this topic to the Oklahoma Data Science Workshop +2023 Nov. 16 (<https://mediasite.ouhsc.edu/Mediasite/Channel/python>). +This workshop meets once a month and is for people interested in data +science and scientific computing. You do not have to be an Oklahoma +resident to attend. Send me e-mail if you want to be added to our mailing list. + +# About the speaker: + +I am an Associate Professor of Biochemistry at the University of +Oklahoma Health Sciences Center. I use X-ray crystallography to study +the structures of RNA, proteins, and protein-drug complexes. I have +been using Python and LaTeX for a dozen years, and Jupyter Notebooks +since 2013. I have been using Emacs every day for 2.5 years. I +discovered voice computing this summer when my chronic repetitive +stress injury flared up while entering data in a spreadsheet. I +tripled my daily word count by using the speech-to-text, and I get a +kick out of running remote computers by speech-to-command. +# Discussion + +## Questions and answers + +- Q: Comment there is a text to command thing called clipea that + would be awesome <https://github.com/dave1010/clipea> + - A: <https://sourceforge.net/projects/sox/> also a good + alternative. +- Q: Could you comment on how speaking vs. typing affects your + logic/content. Thanks! + - A: I find that this is like the difference between writing your thoughts + down on a blank piece of printer paper versus paper bound with a + leather notebook. I do not think there has any real difference. I know + that some people believe there is a solid certain difference but this + is, for the purpose I am using this, for the purpose of generating the + first draft, because my skills with the-- using my voice to edit my + text is still not very well developed, I am still more efficient using + the keyboard for that stage. + + So the hardest part about + writing generally is getting the first crappy draft written. I + have found that dictation is perfectly fine for that phase. I + find it actually very conducive for just getting the text out. The + biggest problem that most of us have is applying our internal editor and + that inhibits us from generating words in a free-flowing + fashion. + + I generally do my generative writing--actually, I divide my writing + into two categories: generative writing (generating the first crappy + draft) and then rewriting. Rewriting is probably 80-90% of writing + where you can go back and rework the order of the sentences, order of + paragraphs, the order of words in a sentence and so forth. It is + really hard work that is best done later in the day when I am more + awake. I do my generative writing first thing in the morning when I am + feel horrible. That is when my internal editor is not very awake and I + can get more words out more words past that gatekeeper. I can do this + sitting down. I can do this standing up. I can do this 20 feet away + from my computer looking out the window to get my eyes a break. I find + it is just a very enjoyable to use it in this fashion. The downside is + that I wind up generating three times as much text. That makes for + three times as much work when it comes to rewriting the text, and that + means I am using the keyboard a lot and later on in the day. + + I have not made any progress on recovering from my own repetitive + stress injury. I hope that I will add the use of voice commands, + speech-to-commands, for editing the text in the future and I will + eventually give my hands more of a break. + + This allows you to actually separate those two activities not only by + time... So many professional writers will spend several hours in the + morning doing the generative part and then they will spend the rest of + the day rewriting. They have separated this to activities temporally. + What most people actually do is they they do the generative part and + then they write one sentence, and they apply that internal editor + right away because they want to write the first draft as a perfect + version, as a final draft, and that is what slows them down + dramatically. + + This also allows you to separate these two activities in terms of + modality. You are going to do the generative writing by Voice In, the + rewriting by keyboard. I think this is like what most people... One way + that many people can get into using speech-to-text in a productive way + that sounds great... + - A: (not the author, just an audiance): So, for example, when + you're talking, you have an immense feeling of the topic you + have. You can close your eyes and do your body gestures to + manipulate a concept or idea, and you have... I just feel you + feel more creative than just tapping. Definitely you have much + more speed advantage over tapping, but more important thing is + you use your body as a whole to interact with those ideas. + [this one is done via voice...] + - but typing is definitely good for acturate control, such as + M-x some-command ... +- Q: Have you tried the ChatGTP voice chat interface, if so how has + been your experience of it? As someone experienced with voice + control, interested to hear your thoughts, performance relative to + the open source tools in particular. + - A: I do not have much experience with that particular software. I have + use Whisper a little bit, and so that is related. Of course, you have + this problem of lag. I find that Whisper is good for spitting out a + sentence maybe for a docstring and a programming file. I find that it + is very prone to hallucinations. I find myself spending half my + time deleting the hallucinations, and I feel like the net gain is + diminished as a result, or there has not much of a net gain in terms of + what I am getting out of it. +- Q: Are any of these voice command/dictions freemium? + - A: To be able to add custom commands, you have to pay + $48 a year. The Talon Voice software is free and the only + limitation there is access to the language model. If you want to get + the beta version, you need to subscribe to Patreon to support the + developer. I did that, and I really did not find much of + an improvement. I really do not intend to do that in the future. + But otherwise in Talon Voice, everything is open and free. The Slack + community is incredibly welcoming. Its parallels with + the Emacs Community are pretty striking. +- Q: How good is Talon compared to whisper? + - A: With Talon, I find that the first part of the sentence will + be fairly accurate. When I am doing dictation and then towards + the end, the errors... In general, I think its error rate is + about five words out of 100 or so or will be wrong. Whisper is + wonderful because it will insert punctuation for you, but I + guess its errors are longer and that will hallucinate full + sentences for you. So they both have significant error rates. + They are just different kinds of errors. Hopefully, both over + time... [Talon] errors are generally shorter in extent. It do + not hallucinate as long. +- Q: are any of those voice command/dictation tools libre? i can not find that information on the web + - (not the speaker): + - this FAQ <https://talon.wiki/faq/> says that Talon Voice is closed source + - talon voice is non-free <https://talonvoice.com/EULA.txt> + - Mistral 7B is apache 2.0 license i.e. no restrictions + + +## Notes + +- From the speaker: I really appreciate the high level of accuracy that I am getting from +Voice In. I would use Talon Voice for dictation, but at this point, +there is a significant difference between the level of accuracy of +Voice In versus Talon Voice. It's large enough of a difference that I'll +probably use Voice In for a while until I can figure out how to get +Talon Voice to generate more accurate text. +- When you do Org mode and you have the bullets, it can allows you to naturally shard your thoughts in a way that is really easy to edit. ... It has a +summarizing capability. It allows you to you know pull back and get a +overview. +- Great stuff, definitely going to test-drive Talon + + +[[!inline pages="internal(2023/info/voice-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/voice-nav)" raw="yes"]] + + diff --git a/2023/talks/web.md b/2023/talks/web.md new file mode 100644 index 00000000..f4b05d7e --- /dev/null +++ b/2023/talks/web.md @@ -0,0 +1,147 @@ +[[!meta title="Emacs saves the Web (maybe)"]] +[[!meta copyright="Copyright © 2023 Yuchen Pei"]] +[[!inline pages="internal(2023/info/web-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs saves the Web (maybe) +Yuchen Pei (he/him, pronounced: "eww-churn pay"), IRC: dragestil, <mailto:id@ypei.org>, <https://ypei.org>, mastodon: dragestil@hostux.social + +[[!inline pages="internal(2023/info/web-before)" raw="yes"]] + +On one hand, Emacs is the crown jewel of the GNU Project for its +customisability and the ability to effortlessly convert users to +hackers. On the other hand, today many of the sticky issues with +proprietary software proliferation stems from the web, including the +Javascript trap[1] on the client side and the SaaSS trap[2] on the +server side. So enters the topic of this talk. I will briefly talk about +these issues and existing non-emacs solutions, followed by ideas and +demonstrations on how Emacs can fix user freedom on the web, including: +emacs clients for specific websites and services, emacs-based browsers +aka universal frontends, transformer of emacs packages to web apps and +firefox browser extensions, and more. + +- [1] <https://www.gnu.org/philosophy/javascript-trap.html> +- [2] <https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html> + +Projects and tools mentioned in the talk: + +- LibreJS <https://gnu.org/s/librejs> +- lynx <https://lynx.invisible-island.net> +- noscript <https://NoScript.net> +- GreaseMonkey <https://www.greasespot.net/> +- Haketilo <https://haketilo.koszko.org> +- mitmproxy <https://mitmproxy.org> +- Invidious <https://invidious.io> +- youtube-dl <https://youtube-dl.org> +- libretube <https://libre-tube.github.io> +- newpipe <https://newpipe.net> +- woob <https://woob.tech/> +- Redirector <http://einaregilsson.com/redirector/> +- libredirect <https://libredirect.github.io> +- openwith <https://addons.mozilla.org/addon/open-with/> +- mastodon.el <https://codeberg.org/martianh/mastodon.el> +- mastorg <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/mastorg.el> +- sx.el <https://github.com/vermiculus/sx.el> +- buildbot.el <https://g.ypei.me/buildbot.el.git/about/> +- emacs-hnreader <https://github.com/thanhvg/emacs-hnreader> +- emacs-w3m <https://emacs-w3m.github.io/> +- luwak <https://g.ypei.me/luwak.git/about/> +- url-rewrite <https://g.ypei.me/url-rewrite.git/about/> +- wkhtmltopdf <https://wkhtmltopdf.org> +- pdf-tools <https://github.com/vedang/pdf-tools> +- emacs-web-server <https://elpa.gnu.org/packages/web-server.html> +- yolo.el <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/yolo.el> +- bom.el <https://g.ypei.me/bom.el.git/about/> + +About the speaker: + +Yuchen is a computer programmer, mathematician and free software +advocate based in Melbourne, Australia. He is addicted to writing +Emacs packages[3], of which a few has made into ELPA. He likes to +claim to be the only free software advocate in Australia, in the hope +that someone will correct him and point him to fellow comrades +fighting for user freedom in Oz. + +- [3] <https://g.ypei.me> +# Discussion + +## Questions and answers + +- Q: I like the idea of using org mode to display data from the web. + Are there many different packages that does that? (I am newish to + Emacs, so maybe this is obvious to everyone else.) + - A: dragestil uses roughly 10 packages that display data from the + web. Roughly half of them are org-mode based +- Q: Have you tried EAF (Emacs Application Framework) and its browser? + If yes, what is your opinion about it? + - A: No I haven't. My impression is it would run javascript by + default. Not sure whether it has any extensions to block js. A + nice comparison between different browsers including EAF, nyxt + and emacs-webkit can be found in the readme file of + <https://github.com/akirakyle/emacs-webkit> +- Q: I find the JavaScript trap almost impossible to avoid since I + like to buy used stuff online and use my online bank. How do you + deal with the JavaScript trap? I use NoScript and compromise on the + few things I really feel I cannot live wihtout. Eww is nice for a + lot of things, especially with R for less noise, but I need Firefox + for those JS-entrapped pages... + - A: Unfortunately I don't have a solution for that. I run + nonfree javascript when doing banking or online shopping, though + in a more isolated environment (mullvad browser) with a VPN. + It's a tiny portion of my online activity (<.1% I suppose), so + it's not *that* bad + - However, that does not mean emacs cannot help. woob has a few + clients interfacing with online banking, so perhaps at least + some banks allow the possibility of non-js client. It would be + good to look into this. +- Q: This is not really relevant to the talk, but I am curious about + your nickname. Do you have some connection to Norway? Your nick + indicates an interest in the architectural style inspired by the + decoration on viking ships that was popular in the early 20th + century. dragestil = dragon style + - A: dragestil is my favourite architectural style. Look at these + images on wikipedia <https://en.wikipedia.org/wiki/Dragestil> - + aren't they gorgeous? I've only seen one of these famous ones + in real life, the Buksnes Church on Lofoten Islands. +- Thoughts about Nyxt; about its aims, its approach, its relevance, + etc.? + - Very early on, ran into issues with keybindings. More + specifically, some conflicts between binding j to follow-hint in + document mode and C-s/C-r to next-suggestion/previous-suggestion + in prompt buffer mode. Did not continue with trying nyxt because + keybindings are basic functionalities IMO. Might revisit + someday. nyxt has a noscript-mode btw that blocks javascript. A + nice comparison between different browsers including EAF, nyxt + and emacs-webkit can be found in the readme file of + <https://github.com/akirakyle/emacs-webkit> +- Q: so trying to understand, is emacs being used as a web proxy to scrub potentially privacy attacking JS? +- Q: Anyone else here has experimented with Nyxt? I haven't much, but can't say there's not an overlap with some of the ideas of Emacs and all. Just curious. + - Not the speaker: + - I recommend qutebrowser over nyxt. For me it was just easier to use, customize and has better user experience. + - I do/did too. But then it occurred to be that a very simple locally-loaded extension might very well be able to transform any of the major browsers into 99 + of Nyxt when paired with an Emacs backend (and websocket async bidirectional communication between the two)... (when said extension is made of a service worker part and a per-page part, to access both browser-level API/state, and page-level DOM, with just these two bits) e.g. could expose/present open tabs as pseudo-buffers (à la "virtual buffers/files"), candidates for completion, and such + +## Notes + +- mastorg for mastodon +- hacker news in org mode +- emacs-web-server for hosting things from Emacs +- Dang, this is really a great demo. +- I love how he's using org-mode to do it all. +- It might actually save the web! +- Emacs as a Firefox extension!!! Ha! +- Definitely some interesting ideas in that one, and the literate form is top-notch. Warrants a focused rewatch for me (back-n-forth between 2 talks is not conductive to my best focus it seems...) +- I *really* like Org-Babel as a bridge to make complex one-off tasks ("why did the stuff in the database get into this state?" type things, usually) reproduceable and version-controlled. + - Hear hear! Howard's talks over the years have converted me to do pretty much anything in Org-mode in literate form at this point :) +- I use org-babel for recurring tasks that I need to remember. Things I have to run once a month, etc. I guess I could use cron, but usually they aren't really time sensitive enough. Or they are things like clearing my mu4e trash, which requires that I quit mu4e. +- "It's not Emacs!" Ha! + + + +[[!inline pages="internal(2023/info/web-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/web-nav)" raw="yes"]] + + diff --git a/2023/talks/windows.md b/2023/talks/windows.md new file mode 100644 index 00000000..1dd47f8b --- /dev/null +++ b/2023/talks/windows.md @@ -0,0 +1,70 @@ +[[!meta title="Windows into Freedom"]] +[[!meta copyright="Copyright © 2023 Corwin Brust"]] +[[!inline pages="internal(2023/info/windows-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Windows into Freedom +Corwin Brust (He/Him) - Core-win Brew-st, IRC: corwin, <mailto:corwin@bru.st> + +[[!template id="help" +summary="main talk does not have captions" +tags="help_with_main_captions" +message="""This talk does not have captions yet. +Would you like to help [caption this talk](/captioning)? +You may be able to start with these [autogenerated captions](/2023/captions/emacsconf-2023-windows--windows-into-freedom--corwin-brust--main.vtt)."""]] + + +[[!inline pages="internal(2023/info/windows-before)" raw="yes"]] + +- A Brief History of the windows port + + When (and why?) was the windows port added? Was that contentious? How + about now? (5m) + +- Acquire Binaries + + There are lots of ways for Windows users to get pre-compiled Emacs + binaries. I'll mention some and get into the particulars of Emacs as + found on GNU FTP. (2m) + +- Build Sources + + I'll talk about how building for Windows differs from building for + other platforms, where to find documentation, important configuration + options to consider, requirements for the build machine. After that + I'll show build commands and good and not-so-good outputs, ultimately + covering the complete process, both using the latest release tarball + (from GNU FTP) as well as for building the main development branch + from emacs.git (hosted on GNU Savannah). (20m) + +- Make an Installer + + I'll show how to use the NSIS script contained within + admin/nt/dist-build in the Emacs source tree to create an executable + self-installer of Emacs for Windows. (2m) + +- Share + + I'll describe the requirements of the GNU Public License as related to + sharing binary versions of Emacs, and talk about what I do to comply, + command by command. (1m) + +- Automate + + I'll introduce scripting I use to automate publishing binaries + tracking a given Emacs branch, and a couple other related tools, thus + recapping most topics. (10m) + +# Discussion + +- I can't imagine cross-compiling Emacs for Windows on Linux is easy, but sounds "fun". + + +[[!inline pages="internal(2023/info/windows-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/windows-nav)" raw="yes"]] + + diff --git a/2023/talks/world.md b/2023/talks/world.md new file mode 100644 index 00000000..b0916167 --- /dev/null +++ b/2023/talks/world.md @@ -0,0 +1,98 @@ +[[!meta title="GNU Emacs: A World of Possibilities"]] +[[!meta copyright="Copyright © 2023 Anand Tamariya"]] +[[!inline pages="internal(2023/info/world-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# GNU Emacs: A World of Possibilities +Anand Tamariya + +[[!inline pages="internal(2023/info/world-before)" raw="yes"]] + +- Draw and scribble in GNU Emacs 3:46 +- SVG Symbols library 1:34 +- GNU Emacs: A multimedia editor 2:45 +- Fill PDF form using GNU Emacs 1:32 +- Desktop and window management in GNU Emacs 1:36 +- Screen mirroring in GNU Emacs 0:43 +- Swipe for Text Input in GNU Emacs 0:33 +- Formula Editor in GNU Emacs 0:35 +- Transliteration in Emacs +- Social Media client - Tumblr, reddit (slide) +- Comics Builder (slide) +- Matching game (slide) + +GNU Emacs as a lightweight IDE (CEDET Semantic) + +- Interactive XPath Builder in GNU Emacs 0:12 +- Interactive JSON Builder in GNU Emacs (slide) +- Java - Generate getter/setter 0:52 +- Generate C header 0:45 +- C Rename symbols 0:56 +- SQL (offline) 3:15 + +19:04 + +GNU Emacs for Electronics +<https://www.youtube.com/playlist?list=PLW9poAEUvGDC7ZWO69qrwRMqdW2xYLsGt> + +GNU Emacs for Note taking +<https://www.youtube.com/playlist?list=PLW9poAEUvGDDxCZX-3xIQ3Wb1HOVcg7N>_ + +GNU Emacs as a lightweight IDE +<https://www.youtube.com/watch?v=d14tLD5XiCU&list=PLW9poAEUvGDAMYvvznljaNtvooaJZxsFQ&pp=gAQBiAQB> + + +# Discussion + +## Questions and answers + +- Q: A lot of what you showd was the type of stuff Emacs didn't do + very well. This stuff looks like it could be useful for using Emacs + with a touchscreen and in a tablet. Have you used it for purposes + like these + - A: +- Q: Is there a mode for using ffmpeg through Emacs or did you make it + yourself? Really cool stuff! + - A: +- Q: These demos are always so impressive. Do you plan to upstream + any of these projects into Emacs, or to publish them as e.g. ELPA + packages? + - A: +- Q: How did you make that electronic circuit diagram? Is there a mode + with the symbols already available? (Thank you for your very clear + answer!) + - A: +- Q:I've seen your blog posts with some of these features, but can + you link to the repo(s) where you are doing the development for + this/these package(s)? + - A: <https://lifeofpenguin.blogspot.com> (blog), + <https://gitlab.com/atamariya/emacs> (dev branch) +- Q:The pdf form-filling is especially interesting - I would love to + do my taxes in emacs! + - A: +- Q: the author is not using artist-mode? + - Not the speaker: + - I think he said canvas-mode + - After some searching, it appears to not be a separate package, but some code in the presenter's repo (https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/svg.el?ref_type=heads) + - Author used xwidgets ig, probably emacs has to be compiled with support for xwdigets + +## Notes + +- Thank you for showing so many new possibilities with Emacs! +- which package is required for pdf filling? so that works with (usually adobe authored) "pdf forms"? + - A: It's an extension (not a separate package) to doc-view mode. It will work with Adobe authored forms as long as the form doesn't use javascript. *Details:* <https://lifeofpenguin.blogspot.com/2022/10/take-charge-of-pdf-in-gnu-emacs.html> + - A: *Code:* + <https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/pdf.el> + <https://gitlab.com/atamariya/emacs/-/blob/dev/lisp/doc-view.el> + +- This author's work is always very impressive when he shares it on his blog and on Reddit. But unfortunately he seems to develop it in his own fork of emacs.git so it's impractical for other users to try. + + +[[!inline pages="internal(2023/info/world-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/world-nav)" raw="yes"]] + +[[!taglink CATEGORY:]] diff --git a/2023/talks/writing.md b/2023/talks/writing.md new file mode 100644 index 00000000..d37115ab --- /dev/null +++ b/2023/talks/writing.md @@ -0,0 +1,99 @@ +[[!meta title="Emacs Turbo-Charges My Writing"]] +[[!meta copyright="Copyright © 2023 Jeremy Friesen"]] +[[!inline pages="internal(2023/info/writing-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs Turbo-Charges My Writing +Jeremy Friesen (he/him) - Pronunciation: JERR-im-EE FREE-SEHN, https://takeonrules.com, <mailto:jeremy@jeremyfriesen.com> + +[[!inline pages="internal(2023/info/writing-before)" raw="yes"]] + +<https://takeonrules.com/2023/12/03/emacs-turbo-charges-my-writing/> + +I’ve been actively blogging since 2011. In May 2020 I switched to +writing my blog posts in Emacs. The numbers don’t lie, I’m writing +more than ever, in part because of Emacs. + +In this presentation I’ll walk through my writing setup for Emacs. +I’ll go over the workflow of writing in Org Mode syntax with Denote +serving as my personal knowledge management system. + +I’ll demonstrate some of functions (or types of functions) I use for: + +- Dynamic auto-completion for Org-Mode macros +- Linking to other Org-Mode documents via different contexts (abbreviations, citations, and links) +- Different Org-Mode blocks that map to HTML elements + +And with a complete post, I’ll then walk through the resulting export. +Demonstrating the output to Hugo (and its shortcodes) as well as other +formats. + +About the speaker: + +Jeremy Friesen is a long-time software developer but only recently an +Emacs convert (as of May 2020). When he switched to writing posts +using Emacs, he observed an explosion in writing, in part because of +the joy of using a tool that he can shape and extend to meet his needs +and wants. + +# Discussion + +## Questions and answers + +- Q: Do you think the line number for writing document kind of + distraction? Especially for notes. + - A:I don't find it distracting; I've been coding for a long + time and those fringes are partially invisible. But help me + orient. + - or, what it brings to you, if we don't have that. + - Given that I'm writing code, prose, documentation, etc, + I prefer to have a common left fring...most of the time. + - Okay. I use (avy-goto-line &optional ARG) for jumping + - I bind C-j to jump to `avy-goto-char-timer`; My C-l is + bound to `consult-goto-line` +- Q: How do you manage private and public data with your zettlekasten. + One of my blockers on putting my zettlekasten on the web is I don't + want everything in it to be public. expeccily fleeting notes + - A: I explicitly export a single page at a time; this ensures the + primary page is something I consider public. + - Q: Do you have anything to prevent private links from getting + accidentally being made publicaly accessible + - The main guard is the "publish this page" function. Under + the hood, private notes are those that I don't specify a + public URL. I do this by way of the `#+ROAM_REFS:` + keyword (technically there are a few other keywords I check + as well; for bespoke historical reasons) on the document. + If it doesn't have that, then an internal link to that item + will not export a public link. +- Q: Is there anything special you're using to go from Org to Hugo + Markdown? This looks like a really nice setup, and I'd like to + give it a try! + - A: <https://github.com/jeremyf/dotemacs> you'll be looking for + jf-blogging.el (also jf-org-mode.el) +- Q: Another font question. What font were you using in eww? + - A: For fixed fonts I'm using "Iosevka Comfy Motion Fixed" and + for variable "ETBembo" +- Q: What's the story behind the name "Take On Rules"? + - A: The blog started as a game rules oriented blog; it was my + time to interrogate rule systems. But over time that drifted; + and once I moved to Org-Mode for writing I settled on an + everything and nothing blog. My + <https://takeonrules.com/about/> has a bit more details on this + - "Anything and nothing." Makes sense. :-) + +## Notes + +- <https://takeonrules.com> (presenter's personal blog) +- When you put your thoughts on the physical world, it actually helps + you to generate more. It's kind of releasing your mind and let your + mind freely be free so from that kind of states you can create + something new + +[[!inline pages="internal(2023/info/writing-after)" raw="yes"]] + +[[!inline pages="internal(2023/info/writing-nav)" raw="yes"]] + + diff --git a/2023/volunteer.md b/2023/volunteer.md new file mode 100644 index 00000000..64c515ae --- /dev/null +++ b/2023/volunteer.md @@ -0,0 +1,114 @@ +[[!meta title="Volunteer"]] +[[!meta copyright="Copyright © 2022-2023 Sacha Chua"]] + +Want to help make EmacsConf awesomer and learn a lot along the way? +Volunteering is a great way to meet fellow Emacs geeks, tinker around +with interesting packages and scripts, and develop your skills. + +In addition to the +[emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss) +list, feel free to subscribe to +[emacsconf-org](https://lists.gnu.org/mailman/listinfo/emacsconf-org) +as well, for discussions related to organizing the conference by the +EmacsConf organizers and volunteers. + +Here are some of the roles that you might be able to help with. Roles +have different responsibilities, and a person can have multiple roles. +You can help out with one or more of the things here, or you can +suggest your own ways of making EmacsConf better. + +# A few roles you can help with + +If you don't see something you want to help with here, [e-mail +emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering for +EmacsConf 2023) and let us know about the skills you have and the skills you +want to develop! Also, if you’d like to volunteer privately, you can use +[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering +for EmacsConf 2023) instead. + +## Captioner + +Do you like working with text? Do you want early access to the +pre-recorded talks? Help make EmacsConf videos easier to understand +and search by captioning them! + +Here's what people said about how most of the EmacsConf talks were +streamed with captions during the conference itself: + +- "I really appreciate the approach of doing things prerecorded and + having captions." +- "The captions for this conference have has an impressive amount of + work put into them." +- "++ to all that stuff. Great job on the captions, and the + demonstrated functionality is very impressive." +- "At first, I thought the captions would be unnecessary, but over + time, understanding the accents for various individuals has been + challenging, so the captions helped." + +Most of the captioning work will begin once speakers submit their +pre-recorded videos. If you like, you can warm up by +[captioning previous talks.](https://emacsconf.org/help_with_main_captions/) +You can use any captioning tool you want. There's even +[one for Emacs](https://github.com/sachac/subed). Check out these +[captioning tips](https://emacsconf.org/captioning/). You can start by +editing autogenerated captions, or you can write captions from scratch +if you want. You can work with timing, or you can send us plain text +and we'll get them aligned with the videos. Videos range from 10 +minutes to 40 minutes and typically take 2-6x the video time to +caption once you've gotten the hang of it. Partial work is also +helpful, so feel free to contribute whatever you want, whenever you want. + +More details: [[2023/volunteer/caption]] + +To volunteer as a captioner, [e-mail +emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering to +caption) (or privately: +[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering +to caption)) and we'll help you get set up. + +## Internet Relay Chat monitor + +Do you like the buzz of fast-flowing discussions? Do you want to make +sure that questions and interesting points don't get lost? Volunteer +to copy stuff from the EmacsConf IRC channels to the Etherpad so that +speakers and hosts can find them. + +More details: [[2023/volunteer/irc]] + +To volunteer as an Internet Relay Chat monitor, [let us know your availability +at emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering as +an IRC monitor) (or privately: +[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering +as an IRC monitor)) and we'll schedule you in. + +## Pad scribe + +Do you like taking notes? Volunteer to summarize interesting points +and links from the EmacsConf talks and Q&A sessions to the Etherpad so +that people can review them afterwards. + +More details: [[2023/volunteer/pad]] + +To volunteer as a pad scribe monitor, +[let us know your availability at emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering +as a pad scribe) (or privately: [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering +as a pad scribe)) and we'll schedule you in. + +## Infrastructure and video + +Do you have an arcane cookbook filed with `ffmpeg` incantations? Is +OBS your jam? Are you comfortable with the command-line? Do you +Ansible all your servers? Do you like tweaking CSS rules to make +things look good? (You don't have to say yes to all of these things - +that would be quite a full stack!) We could use your help! + +To volunteer for infrastructure and video, [e-mail +emacsconf-org@gnu.org](mailto:emacsconf-org@gnu.org?subject=Volunteering for +infrastructure and video) (or privately: +[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Volunteering +for infrastructure and video)) and we'll help you get set up. + +# Got other ideas? + +[We'd love to hear from you!](mailto:emacsconf-org@gnu.org) (or privately: +[emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org)) diff --git a/2023/volunteer/caption.md b/2023/volunteer/caption.md new file mode 100644 index 00000000..1880b541 --- /dev/null +++ b/2023/volunteer/caption.md @@ -0,0 +1,63 @@ +[[!meta title="Caption volunteer"]] + +# Responsibilities + +- Write captions or edit auto-generated captions in order to make + pre-recorded videos easier to understand +- (optional) Note chapter markers +- (optional) Note other things that may need additional help to make + them accessible, such as images not described in the speaker's + voiceover +- (optional) Help extract information from Q&A videos after the conference + +# Preparation + +We'll set up a protected directory so you can get a sneak peek at the +prerecorded videos, and we'll e-mail you the username and password to +use. If slides, scripts, or auto-generated captions are available as a +starting point, we'll upload those as well. + +# Process + +We'll e-mail all the captioning volunteers once speakers submit videos. + +When you want to caption a video, browse through the protected +directory to see which ones are available for captioning. E-mail +<sacha@sachachua.com> or send a message to `sachac` via IRC +(`#emacsconf-org` on IRC) so that we can reserve that one for you. +Check out these [[captioning]] tips and fire up your favorite subtitle +editor. + +We find that captioning generally takes between 2-6x the video time if +you're an experienced captioner editing auto-generated captions, and +can take a bit longer than that if you're starting out or starting +from scratch. You can work with timestamps, or you can send us plain +text and we'll get them aligned with the videos. It's okay to work in +small chunks. + +E-mail your partial or finished captions to <sacha@sachachua.com> . +When you're finished, we'll send them to the speaker for review and +prepare the transcript for inclusion in the wiki. + +When the streamer shows the pre-recorded video, your captions will be +included below it. They will also be combined into a transcript for +the wiki, which will be published when the talk is live. Chapter +markers will be listed below videos so that people can jump to +specific sections. + +# After the conference + +If any talks weren't captioned by the time of the conference, you're certainly welcome to help caption them afterwards. We'll also extract the Q&A sessions and work on either chapter markers (to indicate when specific questions were answered) or captions for those. + +Here's what people said about how most of the EmacsConf 2021 talks were streamed with captions during the conference itself: + +- "I really appreciate the approach of doing things prerecorded and having captions." +- "The captions for this conference have has an impressive amount of work put into them." +- "++ to all that stuff. Great job on the captions, and the demonstrated functionality is very impressive." +- "At first, I thought the captions would be unnecessary, but over time, understanding the accents for various individuals has been challenging, so the captions helped." + +Your captions will not only make talks more accessible during the conference, but also more searchable and more browsable after the conference. Thank you! + +[[Check out other ways to volunteer|2023/volunteer]] + +[[!taglink CategoryVolunteer ]] diff --git a/2023/volunteer/checkin.md b/2023/volunteer/checkin.md new file mode 100644 index 00000000..89036829 --- /dev/null +++ b/2023/volunteer/checkin.md @@ -0,0 +1,118 @@ +[[!meta title="Check-in volunteer"]] + +# Responsibilities + +- Notice speakers checking into IRC or Big Blue Button +- Get them into the correct room and help them doublecheck their audio and video quality +- Follow up with speakers who haven't checked in yet +- Check on speakers periodically so that they're not waiting alone +- (optional) Do tech-checks with speakers before the conference to identify potential issues + +Live Q&A is part of what makes EmacsConf better than a video playlist +watch party. You can help speakers get settled in and feel at ease so +that they're ready to go live as soon as their video finishes. + +# Preparation + +You'll need an account on bbb.emacsverse.org, and we'll set you up +with moderator access on the relevant BBB rooms. + +We'll share a list of talks for your shift with: + +- starting time +- talk title +- track +- speaker name +- pronunciation +- pronouns +- BBB room URL +- pad URL +- email address +- emergency contact information + +# Process + +## Looking for speakers + +We'll ask speakers to check into `#emacsconf-org` at least 30 minutes +before their Q&A session and say something like "Hello, this is NAME +checking in." You can hang out in the #emacsconf-org channel and keep +an eye out for their messages. + +## Checking speakers in + +When you notice a speaker checking in, you can use something like +`/msg NICK Hi, let me help you get checked in. Please join BBB_URL .` +to send a private message to the speaker with the Big Blue Button URL. + +Join the BBB room. If you do not have moderator access, let sachac know. + +The BBB rooms will be set up so that people can join without approval. +When the speaker arrives, you can take a few moments to say hi to +them, thank them for presenting at EmacsConf, etc. + +Click on their name and choose **Promote to moderator.** + +Click on their name again and choose **Make presenter.** + +**Checklist with notes:** + +- Can you speak and be heard? Is there echo? + - Help them doublecheck their audio quality. Using earphones or headphones can help avoid audio feedback, and using an external microphone can improve audio as well. +- Can you hear me? +- Can you share your screen? Will the screen be readable at 1280x720? + - Speakers may want to share their screen during the Q&A session. They can do so using the monitor icon in the lower middle. Sharing a single window is usually more advisable than sharing the entire screen, since it allows them to resize the window so that it's easy for people to read. + - We recommend good contrast with dark foreground on light background to make it easier for people to see things even in bright light. +- If you plan to show your keystrokes, is that display visible? +- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background? + - The speaker's webcam is optional but highly recommended. The speaker can turn their webcam on using the camera icon in the lower middle. +- Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you? + - If the speaker wants to read questions as they come in on Etherpad or IRC, help them load the pad or the track-specific IRC channel. If there is a host for the session, the host can also read questions out loud. Let the speaker know that they can answer questions in any order they want, skip questions, take a little time to think about their answers, and answer questions for as short or as long as they'd like. The room is dedicated for their use, so they don't have to worry about stepping on someone else's Q&A. The first part of their Q&A will be streamed. The host will let them know when the time for streamed Q&A is almost done, but people can continue discussing things in the Q&A room if they want. +- If you plan to play sounds during your Q&A session, is that audible? + - Sometimes speakers will need to set up a virtual loopback device to get their system audio to be included in BBB. This is somewhat complicated and should be tested before the conference. + +Once the speaker is settled in, you can let `#emacsconf-org` know that +the speaker has been checked in. + +Let the speaker know how many minutes before their Q&A starts. They +can take a break before then. Many speakers choose to watch other +talks before theirs. + +## Heads-up before the Q&A starts + +Check in on the speaker about five minutes before their Q&A session +starts to give them a heads-up. Ask them to close any other tabs that +they might be using to watch EmacsConf, because that will create an +audio feedback loop once their Q&A session is being streamed. + +Right before the Q&A starts, make sure the host has started the +recording. If there is no host or the host has forgotten, you can use +the **Start recording** button at the top. + +In between checking in people, feel free to enjoy the conference! + +## What if a live Q&A session is starting within 30 minutes and the speaker hasn't shown up yet? + +Let us know on `#emacsconf-org`. You or another organizer can contact +them using their emergency contact info. If you prefer to not use your +phone, you can ask one of the organizers in #emacsconf-org and we'll +call the speaker for you. + +If the speaker is still not available, we can stream any ongoing Q&A +sessions or open it up for community discussion. + +## After the Q&A wraps up + +If you notice that the Q&A in a room is all done, you can thank the +speaker and click on **Stop recording** in the top middle. + +# After the conference + +Checking in speakers goes a long way to reducing the technical risks +and keeping the conference running smoothly. A smooth checkin can +encourage both speakers and participants to come back next year for +more Emacs awesomeness. Thank you! + +[[Check out other ways to volunteer|2023/volunteer]] + +[[!taglink CategoryVolunteer]] diff --git a/2023/volunteer/host.md b/2023/volunteer/host.md new file mode 100644 index 00000000..d39b22f1 --- /dev/null +++ b/2023/volunteer/host.md @@ -0,0 +1,111 @@ +[[!meta title="Host volunteer"]] + +# Responsibilities + +For talks with live Q&A sessions: + +- Start the recording +- Ask the speaker questions from the pad and read out feedback if you want +- (optional) Monitor IRC for questions as well +- (optional) Let the other organizers know when you're ready for conference + participants to join the Q&A; moderate the discussion as needed +- Handle technical issues that turn up +- Give the speaker time warnings +- Keep things cool + +Many speakers find it easier to reply to questions that are spoken +aloud, and this also ensures that the questions get into the +recording. As the host, you can help shape the Q&A session by choosing +the order of questions to ask (unless the speaker wants to address a +different question). You can also help rephrase unclear questions or +help the speaker feel more comfortable by reminding them that they +don't have to answer all the questions. + +# Preparation + +We will give you a list of talks with the times, speaker info, pad +URL, and URL for the live Q&A session. Please keep the Q&A URLs secret +until you are ready for everyone to join the Q&A session. + +We will also add you as a moderator to the rooms for the talks in your +shift. You may want to practice muting people in BBB. + +We strongly recommend using a headset or earphones to minimize audio +feedback. Using a headset microphone or an external microphone can +also improve your sound quality. + +# Process + +This year we are experimenting with per-talk pads in order to simplify +the experience for the speakers, since many speakers found it +difficult to find and focus on their section in a long pad. + +At least 5 minutes before the Q&A session starts, go to the provided +URL. If BBB shows you a list of meetings, you can click on **Join** +to join the selected one. If you do not have moderator access, let +us know in `#emacsconf-org` and we can add you. + +Have another window for the pad for the current talk. + +Have another window or two for IRC. You may want to set up your +windows so that you can quickly glance at #emacsconf-org. Optionally, +you can also monitor the chat channel for your track (optional). +Ideally, an IRC volunteer will monitor that channel and copy the +questions into the pad for you, so you can focus on just the pad if +you like. + +Make sure you do **not** have another window watching the stream, or +you may get audio feedback whenever you unmute yourself. If you notice +audio feedback when other people unmute, you can ask them to make sure +they aren't watching the stream in a different window and that they +haven't accidentally joined twice. + +To minimize background noise, keep your mic on mute unless you're +speaking. You can optionally turn on your webcam. + +The streamer will join the BBB meeting shortly after the prerecorded +video ends. When the streamer gives you the go-ahead, **turn on +recording** and confirm that it is on. Double-check that recording is +on by seeing whether the button at the top has changed to a red button +with a timer. + +The Q&A will start out closed; just you and the speaker. Depending on +your comfort level and how the discussion goes, you can let us know +when you would like it to be opened up to general participation by +inviting people out loud (and possibly quickly posting in #emacsconf-org). +Then we will update the public BBB redirect URL to +point to the BBB room so that people can join. This should take less +than a minute to update. People will then be able to join using the +Q&A URL that will be in the talk page and in IRC. That way, +participants can join the Q&A session and ask directly. You can then +shift to be more of a moderator, reminding people to stay on mute +unless it's their turn to speak and muting people as needed. + +BBB sometimes has issues if there are lots of participants with +webcams on. If you notice that things are getting slow or choppy, you +can ask participants to turn their webcams off. + +Please give the speaker a 5-minute warning and a 2-minute warning +before the end of their streamed Q&A session. If you've decided to +open up the Q&A session, it can continue off-stream for as long as the +speaker likes while you move on to the next Q&A session to host. If +the speaker would like to wrap up, they can leave the meeting whenever +they want. You can then thank everyone and move on to the next +presentation. + +# In case of... + +- Incidents: If someone isn't keeping the + [[guidelines for conduct|conduct]] in mind, you can moderate using + BBB's tools (muting or removing participants), or let us know in + `#emacsconf-org` and we'll figure out how to deal with the + situation. + +# Afterwards + +Q&A sessions are what make EmacsConf more fun than a playlist. =) +Thanks for helping make EmacsConf awesome! + +[[Check out other ways to volunteer|2023/volunteer]] + +[[!taglink CategoryVolunteer ]] diff --git a/2023/volunteer/irc.md b/2023/volunteer/irc.md new file mode 100644 index 00000000..6ec5eac7 --- /dev/null +++ b/2023/volunteer/irc.md @@ -0,0 +1,82 @@ +[[!meta title="IRC volunteer"]] + +# Responsibilities + +- Keep an eye on the IRC channel for your track and copy questions to + the relevant Etherpad so that hosts and speakers can easily find + them. +- (optional) Copy other talk-related items to the talk's Etherpad +- (optional) Copy other conference-related items to the conference Etherpad +- (optional) Answer conference-related questions +- (optional) Announce talks and Q&A sessions + +The IRC conversations can be pretty fast and difficult to follow. Your +help in copying questions and other important points to the Etherpad +will be much appreciated by hosts, speakers, and other participants. + +# Preparation + +If you'd like to announce talks and Q&A sessions, we can share a pad +with announcements that you can copy and paste. + +If you would like to help set the channel topic or moderate the +channel, please ask one of the main organizers (bandali, zaeph, or +sachac) to add you as a channel operator. + +# Process + +## Copying questions + +Open `#emacsconf-gen` and/or `#emacsconf-dev` depending on your shift +and your ability to keep track of multiple things at the same time. + +In another window, open the Etherpad for the relevant talk(s). You can +find pad URLs on the talk page or in the talk announcement that is +also posted on IRC. + +When you notice a question posted in IRC, reply to the person and say +that you'll copy the question into the relevant pad. If you're using +ERC or another programmable IRC client, you may want to make a command +that simplifies that process. + +Copy the question to the bottom of the question list of the relevant +pad and add the person's nick after it in parentheses. Please keep it +as a top-level item instead of nesting it under something else. You +can reword the question for clarity if needed. + +The conversation might be too fast to keep track of, especially if the +channel for a track has overlapping discussions. Feel free to ask if +people have any more questions for a particular speaker. You can also +encourage people to use conventions like starting their questions with +Q: or Q-talkid:. + +## Copying other talk-related items + +IRC participants might share interesting observations, links, or +feedback. Please feel free to copy them into the Etherpad for future +reference. + +For Q&A sessions done over IRC, it would also be helpful to copy the +answers to the Etherpad. + +## Announcing talks and Q&A sessions + +At the indicated time, paste the announcement into the relevant +channel. (This might be automated if we get around to it.) + +# In case of... + +- Incidents: If someone isn't keeping + [[guidelines for conduct|conduct]] in mind, let us know in + `#emacsconf-org` and we'll figure out how to deal with the + situation. + +# After the conference + +We'll review the chat logs and add anything that might have been +missed to the Etherpad before archiving it onto the talk page. Thank +you! + +[[Check out other ways to volunteer|2023/kvolunteer]] + +[[!taglink CategoryVolunteer ]] diff --git a/2023/volunteer/pad.md b/2023/volunteer/pad.md new file mode 100644 index 00000000..50190b4d --- /dev/null +++ b/2023/volunteer/pad.md @@ -0,0 +1,83 @@ +[[!meta title="Etherpad volunteer"]] + +# Responsibilities + +- Write down interesting points, links, questions, and answers on the + Etherpad during talks and Q&A sessions so that people can quickly + get the gist even if they're jumping in late or skimming through + things without watching the full video +- Add the Q&A BBB URL to the Etherpad when the host gives the OK for + everyone to join + +# Preparation + +We will add the pad URLs to the watch page for the track. + +We will also give you a list of URLs for the live Q&A sessions in the +BBB room. Please keep these URLs secret until the host gives you the +OK to add them to the pad. + +You can see the pad for the previous year at +https://etherpad.wikimedia.org/p/emacsconf-2021 . The discussion +section in https://emacsconf.org/2021/talks/frownies/ shows how the +pad will be archived onto the talk page. A sample pad for this year's +conference can be found at <https://pad.emacsconf.org/2022-journalism> + +If you would like to suggest improvements to the pad format, please +e-mail <emacsconf-org@gnu.org> before the conference starts. Thank +you! + +# Process + +This year we are experimenting with per-talk pads in order to simplify +the experience for the speakers, since many speakers found it +difficult to find and focus on their section in a long pad. + +Open one window with the watch page for the EmacsConf track so that +you can watch the prerecorded video and the Q&A session. Open another +for the pad for the current talk. You can get the pad URL from the +watch page, the talk page, the IRC announcements, or by navigating the +**Next talks** links on a pad. + +You don't need to make a verbatim transcription. Short bullet-points +are enough. If you're not sure about a term, you can mark it with +something like ?? and someone else may be able to fill it in. If you +happen to be able to quickly add timestamps in US/Eastern time, that +may be handy. + +If you would like to continue scribing the live Q&A for a session even +after the next pre-recorded talk starts, you can join the BBB session +for the live Q&A. Scribing live Q&A sessions might be more useful than +scribing the pre-recorded video portion because people will have +access to the videos and possibly transcripts, while Q&A may take a +while to extract. + +To make it easier for the hosts and speakers, we keep the BBB room +URLs secret until the hosts or speakers give the OK to open it up. +When the host or speaker invites everyone in, you can add the BBB URL +to the Etherpad to make it easier for people to join from there. + +You can keep an eye on the time to see when the next live Q&A session +is starting so that you can join the next one if there are overlapping +sessions. + +# In case of... + +- Oopsies: Sometimes people accidentally delete chunks of the pad. It happens. + You can use the time slider (looks like a clock, second icon in the + top right) to go back to a previous version. + +- Incidents: If someone isn't keeping + [[guidelines for conduct|conduct]] in mind, let us know in + `#emacsconf-org` and we'll figure out how to deal with the + situation. + +# After the conference + +We'll archive the pad on the talk page after the event, so your work +will also help people follow up, find ideas and answers, and get even +more out of EmacsConf 2023. Thank you! + +[[Check out other ways to volunteer|2023/volunteer]] + +[[!taglink CategoryVolunteer ]] diff --git a/2023/volunteer/stream.md b/2023/volunteer/stream.md new file mode 100644 index 00000000..fdb05183 --- /dev/null +++ b/2023/volunteer/stream.md @@ -0,0 +1,90 @@ +[[!meta title="Stream volunteer"]] + +# Responsibilities + +As the stream volunteer, you'll be in charge of managing the +livestream: playing the talk video at the right time, updating the +stream overlays, joining the Q&A (live or IRC) when it finishes, +arranging the windows so that the Etherpad can be seen, adjusting the +volume, etc. + +# Preparation + +We will give you a list of talks with the times, speaker info, pad +URL, and URL for the live Q&A session. Please keep the Q&A URLs secret. + +You can use OBS on your system or you can use VNC to connect to the +OBS setup on res.emacsconf.org. We will e-mail the connection details +to you. Add an entry for res.emacsconf.org to your ~/.ssh/config so +that you don't have to specify the port. Use `export TRACK=gen` or +`export TRACK=dev` in your shell to set the variable for your stream. + +Copy the password file: +`scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK` + +# Process + +## Setting up the stream + +1. Start up the VNC server if it's not already running + `ssh emacsconf-$TRACK@res.emacsconf.org -L 5905:127.0.0.1:5905 -L 6005:127.0.0.1:6005 -L 5906:127.0.0.1:5906 -L 6006:127.0.0.1:6006 "~/bin/track-vnc; sleep infinity"` +2. Connect via VNC viewer to the appropriate forwarded port from your laptop + - Gen: xvncviewer 127.0.0.1:5905 -shared -geometry 1280x720 -passwd vnc-passwd-gen + - Dev: xvncviewer 127.0.0.1:5906 -shared -geometry 1280x720 -passwd vnc-passwd-dev +3. Switch to OBS and **start recording** (not streaming) when you're ready. + +## Playing the talk video + +### From conf.org with a todo state change hook + +If things go well, an organizer should be able to start the video from +the conf.org setup in orga@res.emacsconf.org. Here are the steps in +case you are in charge of it and have access: + +Set up: + +1. ssh orga@res.emacsconf.org +2. `emacsclient -c -nw emacsconf-2022-private/conf.org` (or `emacs emacsconf-2022-private/conf.org` if there's no server yet) +3. `M-x emacsconf-add-org-after-todo-state-change-hook` unless you've already done so this session + +Play talk: + +1. Use `M-g t` (`emacsconf-go-to-talk`) to find the talk, or use another way to navigate to the talk heading. (Org agenda?) +2. Use `C-c C-t` (`org-todo`) to mark the talk as `m` (PLAYING - *m*pv). + +This should make MPV appear. If it does not appear, you can manually +play it with one of the backup plans below: + +### Backup plan: emacsconf-stream-play-video from conf.org + +1. Use `M-x emacsconf-stream-set-talk-info` to update the overlay. If +this does not update the overlay, play the video and then manually +copy the right overlays over `~/video.png` and `~/other.png`. + +2. Use `M-x emacsconf-stream-play-video` to play the video for the talk. + +### Backup plan: Use track-mpv + +1. ssh emacsconf-$TRACK@res.emacsconf.org +2. cd /data/emacsconf/cache +3. ~/bin/track-mpv file-to-play.webm + +This should make the file play in the correct display. + +## Updating the overlay + +If the overlay wasn't automatically updated by the todo state change +hook in conf.org, you can set it from conf.org if you have access. Use +`M-x emacsconf-stream-set-talk-info`. If that doesn't work, manually +copy the right overlays over `~/video.png` and `~/other.png`. The +overlays will be in `/data/emacsconf/overlays`. + +## Displaying an emergency announcement + +echo Your emergency announcement here > ~/news.txt + +Be sure to clear it with `echo > ~/news.txt` when done. + +From conf.org on res, you can also use `M-x +emacsconf-stream-broadcast` to announce something on both streams or +`M-x emacsconf-stream-set-news` to set the news on one stream. diff --git a/2023/watch.md b/2023/watch.md new file mode 100644 index 00000000..7d60de2e --- /dev/null +++ b/2023/watch.md @@ -0,0 +1,73 @@ +[[!inline pages="internal(2023/watch/announce)" raw="yes"]] +[[!inline pages="internal(2023/watch/info)" raw="yes"]] +[[!sidebar content=""]] + +EmacsConf 2023 will be on Dec 2 (Sat) and Dec 3 (Sun), 2023 from +9am-5pm Toronto/EST time (US/Eastern); equivalently, 6am-3pm PST, +2pm-10pm UTC, 3pm-11pm Zurich/CET, 7:30pm-4:30am(next-day) India/IST, +10pm-6am GMT+8. + +You can view streams using the watch pages or in a streaming web +player such as [MPV](https://mpv.io). If you need to reverse the video +for easier viewing (ex: turning dark mode into light mode), try a +command like `mpv --vf=negate URL`. + +If you experience any disruptions (including weird audio), try waiting +a minute or two and then reloading the page you're using to watch the +video. If that still doesn't work, please check our status page at +<https://status.emacsconf.org> for updates on the status of various +parts of our infrastructure, and instructions on how to get in touch +with us about disruptions. + +<!-- If you prefer, you can watch the livestream via Toobnix (a PeerTube +instance): [General +track](https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj), [Development +track](https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD). Pre-recorded +videos and replays will also be available on Toobnix in the [EmacsConf +channel](https://toobnix.org/c/emacsconf). --> + +To participate in the Q&A, please check the [[talks]] index for a link +to the talk page, and [[read these Q&A tips|qa]]. The talk page will +have the Q&A details, including the Etherpad link, IRC channel, and +optionally a BigBlueButton room (BBB) for Q&A. If you plan to +participate in Q&A in the BigBlueButton room, please use headphones or +earphones in order to minimize audio feedback. The link on the talk +page will take you to a waiting room that will automatically refresh +when the host has opened the Q&A. + +The Etherpad for general EmacsConf discussions is at +<https://pad.emacsconf.org/2023>. The schedule and the talk pages link +to the Etherpads for the specific talk. Please feel free to add notes +and questions to the Etherpad. + +You can join IRC using <https://chat.emacsconf.org> or your favourite +IRC client. Here are the irc.libera.chat IRC channels that we'll be +using this year: + +- \#emacsconf-gen: discussion for the General track +- \#emacsconf-dev: discussion for the development track +- \#emacsconf: hallway conversations, other general conversations +- \#emacsconf-org: if you need to get in touch with the organizers + +You can use the `/JOIN` command in an IRC client to join a different +channel. Ex: `/join #emacsconf-org` if you want to talk to the +organizers. + +Pre-recorded talk videos will be available on the talk pages after the +talks go live, and other videos (including Q&A) will also be added to +the talk pages once we process them. (Probably by January.) You can +subscribe to `emacsconf-discuss` for updates: +<https://lists.gnu.org/mailman/listinfo/emacsconf-discuss> + +**Accessibility:** Pre-recorded talks will be streamed with open +captions, and the transcripts will be posted to the talk pages as +well. If you have any accessibility requests, please join the +[#emacsconf-org](https://chat.emacsconf.org/?join=emacsconf-org) and +let us know, or e-mail <emacsconf-org-private@gnu.org> to reach the +organizers. + +Physical events: + +- [Lucerne, Switzerland](https://200ok.ch/posts/2023-11-01_announcing_emacsconf__swiss_satellite.html) +- Let us know at <emacsconf-org@gnu.org> if you're organizing one! + diff --git a/2023/watch/dev.md b/2023/watch/dev.md new file mode 100644 index 00000000..626dbcb1 --- /dev/null +++ b/2023/watch/dev.md @@ -0,0 +1,157 @@ +<!-- Automatically generated by emacsconf-publish-watch-pages --> +<!-- +[[!inline pages="internal(2023/watch/announce)" raw="yes"]] +[[!meta title="Development stream"]] +[[!sidebar content=""]] --> + +<hr size="1"> +<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong> | <a href="https://emacsconf.org/2023/watch/">Tips for watching/participating</a></div> + +For better performance, we recommend watching <a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a> using a streaming media player. Examples: + +<ul> +<li>mpv https://live0.emacsconf.org/dev.webm</li> +<li>vlc https://live0.emacsconf.org/dev.webm</li> +<li>ffplay https://live0.emacsconf.org/dev.webm</li> +</ul> + +If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/dev-480p.webm">https://live0.emacsconf.org/dev-480p.webm</a>. + +If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/dev.webm .) 2023-12-03 Sun: Many people are reporting widespread network issues like dropped packets. We're now rebroadcasting to Toobnix (<a href="https://toobnix.org/w/vKSUEbWRFosr8UGtdS2GwX">General</a>, <a href="https://toobnix.org/w/cDaTmi7Y7PjhB58tAGvHtV">Development</a>) in case that helps with network issues. + +<video controls class="reload"><source src="https://live0.emacsconf.org/dev.webm" type="video/webm" /></video> + +<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div><div><span><a href="https://emacsconf.org/2023/talks/matplotllm">matplotllm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-matplotllm">pad</a>, <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/voice">voice</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-voice">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-voice.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/llm">llm</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-llm">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-llm.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/overlay">overlay</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-overlay">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-overlay.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/eval">eval</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-eval">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/repl">repl</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-repl">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: edrx</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/doc">doc</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-doc">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-doc.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/windows">windows</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-windows">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-windows.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/scheme">scheme</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-scheme">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-scheme.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/world">world</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-world">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-world.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/flat">flat</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-flat">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-flat.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emacsen">emacsen</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emacsen">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emacsen.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/gc">gc</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-gc">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-gc.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/hyperdrive">hyperdrive</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-hyperdrive">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-hyperdrive.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/lspocaml">lspocaml</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-lspocaml">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-lspocaml.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/test">test</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-test">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-test.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emacsconf">emacsconf</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emacsconf">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a>)</span></div> +<div class="pad-output"></div> +<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a> on libera.chat</div> + +<div class="chat-iframe" data-track="dev"></div> +<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" height="600" width="100%"></iframe> +<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <a href="/2023/watch/gen/">General</a> - <strong>Development</strong></div> +<ul>Legend: +<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li> +<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul> +<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div> +<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div> +<div><h1>Saturday, Dec 2, 2023</h1> +<div data-start="2023-12-02T15:00:00+0000" data-end="2023-12-02T15:10:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:10</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://pad.emacsconf.org/2023-matplotllm">Etherpad</a></span>; <span class="sched-slug">id:matplotllm</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/matplotllm">MatplotLLM, iterative natural language data visualization in org-babel</a></div> + <div class="sched-speakers">Abhinav Tushar (he/him)</div> + +</div> + +<div data-start="2023-12-02T15:20:00+0000" data-end="2023-12-02T15:40:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:20</span> - <span class="sched-end">10:40</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-voice">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-voice.html">BBB</a></span>; <span class="sched-slug">id:voice</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/voice">Enhancing productivity with voice computing</a></div> + <div class="sched-speakers">Blaine Mooers (he/him/his)</div> + +</div> + +<div data-start="2023-12-02T15:55:00+0000" data-end="2023-12-02T16:15:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:55</span> - <span class="sched-end">11:15</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-llm">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-llm.html">BBB</a></span>; <span class="sched-slug">id:llm</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/llm">LLM clients in Emacs, functionality and standardization</a></div> + <div class="sched-speakers">Andrew Hyatt (he/him)</div> + +</div> + +<div data-start="2023-12-02T18:00:00+0000" data-end="2023-12-02T18:20:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-overlay">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-overlay.html">BBB</a></span>; <span class="sched-slug">id:overlay</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/overlay">Improving compiler diagnostics with overlays</a></div> + <div class="sched-speakers">Jeff Trull (he/him)</div> + +</div> + +<div data-start="2023-12-02T18:35:00+0000" data-end="2023-12-02T18:45:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:35</span> - <span class="sched-end">1:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-eval">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: none</span>; <span class="sched-slug">id:eval</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/eval">Editor Integrated REPL Driven Development for all languages</a></div> + <div class="sched-speakers">Musa Al-hassy (he/him)</div> + +</div> + +<div data-start="2023-12-02T19:00:00+0000" data-end="2023-12-02T20:00:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:00</span> - <span class="sched-end">3:00</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-repl">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: edrx</a></span>; <span class="sched-slug">id:repl</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/repl">REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</a></div> + <div class="sched-speakers">Eduardo Ochs</div> + +</div> + +<div data-start="2023-12-02T20:10:00+0000" data-end="2023-12-02T20:50:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:10</span> - <span class="sched-end">3:50</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-doc">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-doc.html">BBB</a></span>; <span class="sched-slug">id:doc</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/doc">Literate Documentation with Emacs and Org Mode</a></div> + <div class="sched-speakers">Mike Hamrick</div> + +</div> + +<div data-start="2023-12-02T21:05:00+0000" data-end="2023-12-02T21:45:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:05</span> - <span class="sched-end">4:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-windows">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-windows.html">BBB</a></span>; <span class="sched-slug">id:windows</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/windows">Windows into Freedom</a></div> + <div class="sched-speakers">Corwin Brust (He/Him)</div> + +</div> + +<h1>Sunday, Dec 3, 2023</h1> +<div data-start="2023-12-03T15:00:00+0000" data-end="2023-12-03T15:20:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:00</span> - <span class="sched-end">10:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-scheme">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-scheme.html">BBB</a></span>; <span class="sched-slug">id:scheme</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/scheme">Bringing joy to Scheme programming</a></div> + <div class="sched-speakers">Andrew Tropin</div> + +</div> + +<div data-start="2023-12-03T15:35:00+0000" data-end="2023-12-03T15:55:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:35</span> - <span class="sched-end">10:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-world">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-world.html">BBB</a></span>; <span class="sched-slug">id:world</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/world">GNU Emacs: A World of Possibilities</a></div> + <div class="sched-speakers">Anand Tamariya</div> + +</div> + +<div data-start="2023-12-03T16:10:00+0000" data-end="2023-12-03T16:20:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:10</span> - <span class="sched-end">11:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-flat">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-flat.html">BBB</a></span>; <span class="sched-slug">id:flat</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/flat">A modern Emacs look-and-feel without pain</a></div> + <div class="sched-speakers">Pedro A. Aranda (he)</div> + +</div> + +<div data-start="2023-12-03T16:35:00+0000" data-end="2023-12-03T16:55:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:35</span> - <span class="sched-end">11:55</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emacsen">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-emacsen.html">BBB</a></span>; <span class="sched-slug">id:emacsen</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emacsen">The Emacsen family, the design of an Emacs and the importance of Lisp</a></div> + <div class="sched-speakers">Fermin (he/him)</div> + +</div> + +<div data-start="2023-12-03T18:00:00+0000" data-end="2023-12-03T18:35:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:35</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-gc">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-gc.html">BBB</a></span>; <span class="sched-slug">id:gc</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/gc">emacs-gc-stats: Does garbage collection actually slow down Emacs?</a></div> + <div class="sched-speakers">Ihor Radchenko (he)</div> + +</div> + +<div data-start="2023-12-03T18:50:00+0000" data-end="2023-12-03T19:30:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:30</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-hyperdrive">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-hyperdrive.html">BBB</a></span>; <span class="sched-slug">id:hyperdrive</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/hyperdrive">hyperdrive.el: Peer-to-peer filesystem in Emacs</a></div> + <div class="sched-speakers">Joseph Turner and Protesilaos Stavrou</div> + +</div> + +<div data-start="2023-12-03T19:45:00+0000" data-end="2023-12-03T20:00:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:45</span> - <span class="sched-end">3:00</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-lspocaml">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-lspocaml.html">BBB</a></span>; <span class="sched-slug">id:lspocaml</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/lspocaml">Writing a language server in OCaml for Emacs, fun, and profit</a></div> + <div class="sched-speakers">Austin Theriault (he/they)</div> + +</div> + +<div data-start="2023-12-03T20:15:00+0000" data-end="2023-12-03T20:45:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:15</span> - <span class="sched-end">3:45</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-test">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-test.html">BBB</a></span>; <span class="sched-slug">id:test</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/test">What I learned by writing test cases for GNU Hyperbole</a></div> + <div class="sched-speakers">Mats Lidell (he, him, his)</div> + +</div> + +<div data-start="2023-12-03T21:00:00+0000" data-end="2023-12-03T21:20:00+0000" class="sched-entry track-Development"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:00</span> - <span class="sched-end">4:20</span></span> <span class="sched-track Development">Development</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emacsconf">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-emacsconf.html">BBB</a></span>; <span class="sched-slug">id:emacsconf</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emacsconf">EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</a></div> + <div class="sched-speakers">Sacha Chua (she/her)</div> + +</div> + +</div> diff --git a/2023/watch/gen.md b/2023/watch/gen.md new file mode 100644 index 00000000..4087dab2 --- /dev/null +++ b/2023/watch/gen.md @@ -0,0 +1,234 @@ +<!-- Automatically generated by emacsconf-publish-watch-pages --> +<!-- +[[!inline pages="internal(2023/watch/announce)" raw="yes"]] +[[!meta title="General stream"]] +[[!sidebar content=""]] --> + +<hr size="1"> +<div><a name="watch"></a><strong>Watch</strong> - <a href="#links">Pad and Q&A links</a> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a> | <a href="https://emacsconf.org/2023/watch/">Tips for watching/participating</a></div> + +For better performance, we recommend watching <a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a> using a streaming media player. Examples: + +<ul> +<li>mpv https://live0.emacsconf.org/gen.webm</li> +<li>vlc https://live0.emacsconf.org/gen.webm</li> +<li>ffplay https://live0.emacsconf.org/gen.webm</li> +</ul> + +If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/gen-480p.webm">https://live0.emacsconf.org/gen-480p.webm</a>. + +If you don't have a streaming media player, you might be able to watch using the player below. (Google Chrome seems to be having issues; Mozilla Firefox might work better. If watching from a phone, Google Chrome seems to work there, or download VLC from your phone's app store and use the URLs like https://live0.emacsconf.org/gen.webm .) 2023-12-03 Sun: Many people are reporting widespread network issues like dropped packets. We're now rebroadcasting to Toobnix (<a href="https://toobnix.org/w/vKSUEbWRFosr8UGtdS2GwX">General</a>, <a href="https://toobnix.org/w/cDaTmi7Y7PjhB58tAGvHtV">Development</a>) in case that helps with network issues. + +<video controls class="reload"><source src="https://live0.emacsconf.org/gen.webm" type="video/webm" /></video> + +<hr size="1"><div><a name="links"></a><a href="#watch">Watch</a> - <strong>Pad and Q&A links</strong> - <a href="#chat">Chat</a> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div><div><span><a href="https://emacsconf.org/2023/talks/sat-open">sat-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sat-open">pad</a>, <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/adventure">adventure</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-adventure">pad</a>, <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/uni">uni</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-uni">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-uni.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/teaching">teaching</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-teaching">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-teaching.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/table">table</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-table">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/one">one</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-one">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-one.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/writing">writing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-writing">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-writing.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/nabokov">nabokov</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-nabokov">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-nabokov.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/collab">collab</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-collab">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/solo">solo</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-solo">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-solo.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/ref">ref</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-ref">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/unentangling">unentangling</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-unentangling">pad</a>, <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/devel">devel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-devel">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-devel.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/core">core</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-core">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-core.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sat-close">sat-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sat-close">pad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sun-open">sun-open</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sun-open">pad</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/hyperamp">hyperamp</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-hyperamp">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-hyperamp.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/koutline">koutline</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-koutline">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/parallel">parallel</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-parallel">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-parallel.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/eat">eat</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-eat">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-eat.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/poltys">poltys</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-poltys">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-poltys.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/cubing">cubing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-cubing">pad</a>, <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: wasamasa</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/emms">emms</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-emms">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-emms.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/steno">steno</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-steno">pad</a>, none)</span> - <span><a href="https://emacsconf.org/2023/talks/mentor">mentor</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-mentor">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-mentor.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/web">web</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-web">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-web.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sharing">sharing</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sharing">pad</a>, <a href="https://media.emacsconf.org/2023/current/bbb-sharing.html">BBB</a>)</span> - <span><a href="https://emacsconf.org/2023/talks/sun-close">sun-close</a> (<a class="pad-link" href="https://pad.emacsconf.org/2023-sun-close">pad</a>)</span></div> +<div class="pad-output"></div> +<hr size="1"><div><a name="chat"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&A links</a> - <strong>Chat</strong> - <a href="#sched">Schedule</a> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div><div>Chat: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a> on libera.chat</div> + +<div class="chat-iframe" data-track="gen"></div> +<iframe src="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen" height="600" width="100%"></iframe> +<hr size="1"><div><a name="sched"></a><a href="#watch">Watch</a> - <a href="#links">Pad and Q&A links</a> - <a href="#chat">Chat</a> - <strong>Schedule</strong> | Tracks: <strong>General</strong> - <a href="/2023/watch/dev/">Development</a></div> +<ul>Legend: +<li>Solid lines: Q&A will be through a BigBlueButton room (you can ask questions there or through IRC/Etherpad)</li> +<li>Dashed lines: Q&A will be over IRC or the Etherpad, or the speaker will follow up afterwards</li></ul> +<div>Times are in Eastern Standard Time (America/Toronto, GMT-5). If you have Javascript enabled, clicking on talk pages should include times in your computer's local time setting.</div> +<div><svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg></div> +<div><h1>Saturday, Dec 2, 2023</h1> +<div data-start="2023-12-02T14:00:00+0000" data-end="2023-12-02T14:10:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:00</span> - <span class="sched-end">9:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://pad.emacsconf.org/2023-sat-open">Etherpad</a></span>; <span class="sched-slug">id:sat-open</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sat-open">Saturday opening remarks</a></div> + + +</div> + +<div data-start="2023-12-02T14:10:00+0000" data-end="2023-12-02T14:20:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:10</span> - <span class="sched-end">9:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://pad.emacsconf.org/2023-adventure">Etherpad</a></span>; <span class="sched-slug">id:adventure</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/adventure">An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</a></div> + <div class="sched-speakers">Chung-hong Chan (he/his/him, er/sein/ihn/ihm, 佢/他)</div> + +</div> + +<div data-start="2023-12-02T14:30:00+0000" data-end="2023-12-02T14:50:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:30</span> - <span class="sched-end">9:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-uni">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-uni.html">BBB</a></span>; <span class="sched-slug">id:uni</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/uni">Authoring and presenting university courses with Emacs and a full libre software stack</a></div> + <div class="sched-speakers">James Howell</div> + +</div> + +<div data-start="2023-12-02T15:05:00+0000" data-end="2023-12-02T15:25:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:05</span> - <span class="sched-end">10:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-teaching">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-teaching.html">BBB</a></span>; <span class="sched-slug">id:teaching</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/teaching">Teaching computer and data science with literate programming tools</a></div> + <div class="sched-speakers">Marcus Birkenkrahe</div> + +</div> + +<div data-start="2023-12-02T15:40:00+0000" data-end="2023-12-02T15:50:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:40</span> - <span class="sched-end">10:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-table">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: none</span>; <span class="sched-slug">id:table</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/table">Who needs Excel? Managing your students qualifications with org-table</a></div> + <div class="sched-speakers">Daniel Molina (he/him)</div> + +</div> + +<div data-start="2023-12-02T16:30:00+0000" data-end="2023-12-02T16:50:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:30</span> - <span class="sched-end">11:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-one">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-one.html">BBB</a></span>; <span class="sched-slug">id:one</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/one">one.el: the static site generator for Emacs Lisp Programmers</a></div> + <div class="sched-speakers">Tony Aldon</div> + +</div> + +<div data-start="2023-12-02T18:00:00+0000" data-end="2023-12-02T18:10:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-writing">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-writing.html">BBB</a></span>; <span class="sched-slug">id:writing</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/writing">Emacs turbo-charges my writing</a></div> + <div class="sched-speakers">Jeremy Friesen (he/him)</div> + +</div> + +<div data-start="2023-12-02T18:25:00+0000" data-end="2023-12-02T18:35:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:25</span> - <span class="sched-end">1:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-nabokov">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-nabokov.html">BBB</a></span>; <span class="sched-slug">id:nabokov</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/nabokov">Why Nabokov would use Org-Mode if he were writing today</a></div> + <div class="sched-speakers">Edmund Jorgensen (he/him)</div> + +</div> + +<div data-start="2023-12-02T18:50:00+0000" data-end="2023-12-02T19:10:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:50</span> - <span class="sched-end">2:10</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-collab">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: none</span>; <span class="sched-slug">id:collab</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/collab">Collaborative data processing and documenting using org-babel</a></div> + <div class="sched-speakers">Jonathan Hartman (he/him), Lukas C. Bossert (he/him)</div> + +</div> + +<div data-start="2023-12-02T19:20:00+0000" data-end="2023-12-02T19:40:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:20</span> - <span class="sched-end">2:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-solo">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-solo.html">BBB</a></span>; <span class="sched-slug">id:solo</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/solo">How I play TTRPGs in Emacs</a></div> + <div class="sched-speakers">Howard Abrams</div> + +</div> + +<div data-start="2023-12-02T19:55:00+0000" data-end="2023-12-02T20:15:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:55</span> - <span class="sched-end">3:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-ref">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs</a></span>; <span class="sched-slug">id:ref</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/ref">Org-Mode workflow: informal reference tracking</a></div> + <div class="sched-speakers">Christopher Howard (he/him)</div> + +</div> + +<div data-start="2023-12-02T20:25:00+0000" data-end="2023-12-02T20:35:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:25</span> - <span class="sched-end">3:35</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://pad.emacsconf.org/2023-unentangling">Etherpad</a></span>; <span class="sched-slug">id:unentangling</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/unentangling">(Un)entangling projects and repos</a></div> + <div class="sched-speakers">Alexey Bochkarev (he/him)</div> + +</div> + +<div data-start="2023-12-02T20:45:00+0000" data-end="2023-12-02T20:55:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:45</span> - <span class="sched-end">3:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-devel">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-devel.html">BBB</a></span>; <span class="sched-slug">id:devel</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/devel">Emacs development updates</a></div> + <div class="sched-speakers">John Wiegley (he/him)</div> + +</div> + +<div data-start="2023-12-02T21:10:00+0000" data-end="2023-12-02T21:50:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:10</span> - <span class="sched-end">4:50</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-core">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-core.html">BBB</a></span>; <span class="sched-slug">id:core</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/core">Emacs core development: how it works</a></div> + <div class="sched-speakers">Stefan Kangas</div> + +</div> + +<div data-start="2023-12-02T22:05:00+0000" data-end="2023-12-02T22:15:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">5:05</span> - <span class="sched-end">5:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sat-close">Etherpad</a></span>; <span class="sched-slug">id:sat-close</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sat-close">Saturday closing remarks</a></div> + + +</div> + +<h1>Sunday, Dec 3, 2023</h1> +<div data-start="2023-12-03T13:58:00+0000" data-end="2023-12-03T14:04:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">8:58</span> - <span class="sched-end">9:04</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sun-open">Etherpad</a></span>; <span class="sched-slug">id:sun-open</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sun-open">Sunday opening remarks</a></div> + + +</div> + +<div data-start="2023-12-03T14:05:00+0000" data-end="2023-12-03T14:25:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:05</span> - <span class="sched-end">9:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-hyperamp">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-hyperamp.html">BBB</a></span>; <span class="sched-slug">id:hyperamp</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/hyperamp">Top 10 ways Hyperbole amps up Emacs</a></div> + <div class="sched-speakers">Robert Weiner</div> + +</div> + +<div data-start="2023-12-03T14:40:00+0000" data-end="2023-12-03T15:00:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">9:40</span> - <span class="sched-end">10:00</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-koutline">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen</a></span>; <span class="sched-slug">id:koutline</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/koutline">Using Koutline for stream of thought journaling</a></div> + <div class="sched-speakers">Matthew Jorgensen (PlasmaStrike)</div> + +</div> + +<div data-start="2023-12-03T15:10:00+0000" data-end="2023-12-03T15:25:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:10</span> - <span class="sched-end">10:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-parallel">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-parallel.html">BBB</a></span>; <span class="sched-slug">id:parallel</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/parallel">Parallel text replacement</a></div> + <div class="sched-speakers">Lovro, Valentino Picotti</div> + +</div> + +<div data-start="2023-12-03T15:35:00+0000" data-end="2023-12-03T15:45:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">10:35</span> - <span class="sched-end">10:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-eat">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-eat.html">BBB</a></span>; <span class="sched-slug">id:eat</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/eat">Eat and Eat powered Eshell, fast featureful terminal inside Emacs</a></div> + <div class="sched-speakers">Akib Azmain Turja (he/him)</div> + +</div> + +<div data-start="2023-12-03T16:00:00+0000" data-end="2023-12-03T16:20:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:00</span> - <span class="sched-end">11:20</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-poltys">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-poltys.html">BBB</a></span>; <span class="sched-slug">id:poltys</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/poltys">The browser in a buffer</a></div> + <div class="sched-speakers">Michael Bauer (he/him)</div> + +</div> + +<div data-start="2023-12-03T16:35:00+0000" data-end="2023-12-03T16:55:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">11:35</span> - <span class="sched-end">11:55</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-cubing">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: wasamasa</a></span>; <span class="sched-slug">id:cubing</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/cubing">Speedcubing in Emacs</a></div> + <div class="sched-speakers">wasamasa (he/him)</div> + +</div> + +<div data-start="2023-12-03T18:00:00+0000" data-end="2023-12-03T18:40:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:00</span> - <span class="sched-end">1:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-emms">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-emms.html">BBB</a></span>; <span class="sched-slug">id:emms</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/emms">Emacs MultiMedia System (EMMS)</a></div> + <div class="sched-speakers">Yoni Rabkin</div> + +</div> + +<div data-start="2023-12-03T18:55:00+0000" data-end="2023-12-03T19:25:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">1:55</span> - <span class="sched-end">2:25</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-steno">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: none</span>; <span class="sched-slug">id:steno</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/steno">Programming with steno</a></div> + <div class="sched-speakers">Daniel Alejandro Tapia (I like "thou" for the second person and "ou" for the third)</div> + +</div> + +<div data-start="2023-12-03T19:35:00+0000" data-end="2023-12-03T19:45:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">2:35</span> - <span class="sched-end">2:45</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-mentor">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-mentor.html">BBB</a></span>; <span class="sched-slug">id:mentor</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/mentor">Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</a></div> + <div class="sched-speakers">Jeremy Friesen (he/him)</div> + +</div> + +<div data-start="2023-12-03T20:10:00+0000" data-end="2023-12-03T20:40:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:10</span> - <span class="sched-end">3:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-web">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-web.html">BBB</a></span>; <span class="sched-slug">id:web</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/web">Emacs saves the Web (maybe)</a></div> + <div class="sched-speakers">Yuchen Pei (he/him)</div> + +</div> + +<div data-start="2023-12-03T20:55:00+0000" data-end="2023-12-03T21:15:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">3:55</span> - <span class="sched-end">4:15</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sharing">Etherpad</a></span>; <span class="sched-q-and-a">Q&A: <a href="https://media.emacsconf.org/2023/current/bbb-sharing.html">BBB</a></span>; <span class="sched-slug">id:sharing</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sharing">Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</a></div> + <div class="sched-speakers">Jacob Boxerman (he/him)</div> + +</div> + +<div data-start="2023-12-03T21:30:00+0000" data-end="2023-12-03T21:40:00+0000" class="sched-entry track-General"> +<div class="sched-meta"><span class="sched-time"><span class="sched-start">4:30</span> - <span class="sched-end">4:40</span></span> <span class="sched-track General">General</span> <span class="sched-pad"> <a href="https://pad.emacsconf.org/2023-sun-close">Etherpad</a></span>; <span class="sched-slug">id:sun-close</span></div> +<div class="sched-title"><a href="https://emacsconf.org/2023/talks/sun-close">Sunday closing remarks</a></div> + + +</div> + +</div> diff --git a/2023/watch/info.md b/2023/watch/info.md new file mode 100644 index 00000000..5900cd5e --- /dev/null +++ b/2023/watch/info.md @@ -0,0 +1,11 @@ +[[!sidebar content=""]]<!-- Automatically generated by emacsconf-publish-watch-pages --> + +<h2>Tracks</h2> +We recommend using a streaming player like mpv to watch the livestreams. Example: <pre> +mpv https://live0.emacsconf.org/gen.webm +mpv https://live0.emacsconf.org/dev.webm +</pre><table width="100%"><tr><th>Watch page</th><th>IRC channel (libera.chat)</th><th>URL for streaming player (ex: mpv, vlc, ffplay)</th><th>Low res</th></tr> +<tr><td><div class="sched-track General"><a href="/2023/watch/gen/">General</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen">emacsconf-gen</a></td><td><a href="https://live0.emacsconf.org/gen.webm">https://live0.emacsconf.org/gen.webm</a></td><td><a href="https://live0.emacsconf.org/gen-480p.webm">gen-480p.webm</a></tr> +<tr><td><div class="sched-track Development"><a href="/2023/watch/dev/">Development</a></div></td><td><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev">emacsconf-dev</a></td><td><a href="https://live0.emacsconf.org/dev.webm">https://live0.emacsconf.org/dev.webm</a></td><td><a href="https://live0.emacsconf.org/dev-480p.webm">dev-480p.webm</a></tr></table> + +<svg width="800" height="300" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Graphical view of the schedule</title> <g transform="translate(0,0)"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="https://emacsconf.org/2023/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(13,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="https://emacsconf.org/2023/talks/adventure" title="An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp" data-slug="adventure"> <title> 9:10- 9:20 An Org-Mode based text adventure game for learning the basics of Emacs, inside Emacs, written in Emacs Lisp</title> <rect x="15" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(28,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> adventure</text></g></a> <a href="https://emacsconf.org/2023/talks/uni" title="Authoring and presenting university courses with Emacs and a full libre software stack" data-slug="uni"> <title> 9:30- 9:50 Authoring and presenting university courses with Emacs and a full libre software stack</title> <rect x="47" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(76,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> uni</text></g></a> <a href="https://emacsconf.org/2023/talks/teaching" title="Teaching computer and data science with literate programming tools" data-slug="teaching"> <title> 10:05-10:25 Teaching computer and data science with literate programming tools</title> <rect x="101" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> teaching</text></g></a> <a href="https://emacsconf.org/2023/talks/table" title="Who needs Excel? Managing your students qualifications with org-table" data-slug="table"> <title> 10:40-10:50 Who needs Excel? Managing your students qualifications with org-table</title> <rect x="156" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(169,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> table</text></g></a> <a href="https://emacsconf.org/2023/talks/one" title="one.el: the static site generator for Emacs Lisp Programmers" data-slug="one"> <title> 11:30-11:50 one.el: the static site generator for Emacs Lisp Programmers</title> <rect x="235" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(264,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> one</text></g></a> <a href="https://emacsconf.org/2023/talks/writing" title="Emacs turbo-charges my writing" data-slug="writing"> <title> 1:00- 1:10 Emacs turbo-charges my writing</title> <rect x="376" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(389,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="https://emacsconf.org/2023/talks/nabokov" title="Why Nabokov would use Org-Mode if he were writing today" data-slug="nabokov"> <title> 1:25- 1:35 Why Nabokov would use Org-Mode if he were writing today</title> <rect x="415" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(428,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> nabokov</text></g></a> <a href="https://emacsconf.org/2023/talks/collab" title="Collaborative data processing and documenting using org-babel" data-slug="collab"> <title> 1:50- 2:10 Collaborative data processing and documenting using org-babel</title> <rect x="454" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(483,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> collab</text></g></a> <a href="https://emacsconf.org/2023/talks/solo" title="How I play TTRPGs in Emacs" data-slug="solo"> <title> 2:20- 2:40 How I play TTRPGs in Emacs</title> <rect x="501" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(530,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> solo</text></g></a> <a href="https://emacsconf.org/2023/talks/ref" title="Org-Mode workflow: informal reference tracking" data-slug="ref"> <title> 2:55- 3:15 Org-Mode workflow: informal reference tracking</title> <rect x="556" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(585,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> ref</text></g></a> <a href="https://emacsconf.org/2023/talks/unentangling" title="(Un)entangling projects and repos" data-slug="unentangling"> <title> 3:25- 3:35 (Un)entangling projects and repos</title> <rect x="603" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(616,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> unentangling</text></g></a> <a href="https://emacsconf.org/2023/talks/devel" title="Emacs development updates" data-slug="devel"> <title> 3:45- 3:55 Emacs development updates</title> <rect x="635" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(648,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> devel</text></g></a> <a href="https://emacsconf.org/2023/talks/core" title="Emacs core development: how it works" data-slug="core"> <title> 4:10- 4:50 Emacs core development: how it works</title> <rect x="674" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(734,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> core</text></g></a> <a href="https://emacsconf.org/2023/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:05- 5:15 Saturday closing remarks</title> <rect x="760" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(773,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="https://emacsconf.org/2023/talks/matplotllm" title="MatplotLLM, iterative natural language data visualization in org-babel" data-slug="matplotllm"> <title> 10:00-10:10 MatplotLLM, iterative natural language data visualization in org-babel</title> <rect x="94" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> matplotllm</text></g></a> <a href="https://emacsconf.org/2023/talks/voice" title="Enhancing productivity with voice computing" data-slug="voice"> <title> 10:20-10:40 Enhancing productivity with voice computing</title> <rect x="125" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(154,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> voice</text></g></a> <a href="https://emacsconf.org/2023/talks/llm" title="LLM clients in Emacs, functionality and standardization" data-slug="llm"> <title> 10:55-11:15 LLM clients in Emacs, functionality and standardization</title> <rect x="180" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> llm</text></g></a> <a href="https://emacsconf.org/2023/talks/overlay" title="Improving compiler diagnostics with overlays" data-slug="overlay"> <title> 1:00- 1:20 Improving compiler diagnostics with overlays</title> <rect x="376" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(405,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> overlay</text></g></a> <a href="https://emacsconf.org/2023/talks/eval" title="Editor Integrated REPL Driven Development for all languages" data-slug="eval"> <title> 1:35- 1:45 Editor Integrated REPL Driven Development for all languages</title> <rect x="431" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(444,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eval</text></g></a> <a href="https://emacsconf.org/2023/talks/repl" title="REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ" data-slug="repl"> <title> 2:00- 3:00 REPLs in strange places: Lua, LaTeX, LPeg, LPegRex, TikZ</title> <rect x="470" y="75" opacity="0.8" width="94" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> repl</text></g></a> <a href="https://emacsconf.org/2023/talks/doc" title="Literate Documentation with Emacs and Org Mode" data-slug="doc"> <title> 3:10- 3:50 Literate Documentation with Emacs and Org Mode</title> <rect x="580" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(640,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> doc</text></g></a> <a href="https://emacsconf.org/2023/talks/windows" title="Windows into Freedom" data-slug="windows"> <title> 4:05- 4:45 Windows into Freedom</title> <rect x="666" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(726,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> windows</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g> <g transform="translate(0,150)"> <title> Schedule for Sunday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Sunday</text> <a href="https://emacsconf.org/2023/talks/sun-open" title="Sunday opening remarks" data-slug="sun-open"> <title> 8:58- 9:04 Sunday opening remarks</title> <rect x="-4" y="15" opacity="0.8" width="9" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(3,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-open</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperamp" title="Top 10 ways Hyperbole amps up Emacs" data-slug="hyperamp"> <title> 9:05- 9:25 Top 10 ways Hyperbole amps up Emacs</title> <rect x="7" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperamp</text></g></a> <a href="https://emacsconf.org/2023/talks/koutline" title="Using Koutline for stream of thought journaling" data-slug="koutline"> <title> 9:40-10:00 Using Koutline for stream of thought journaling</title> <rect x="62" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(91,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> koutline</text></g></a> <a href="https://emacsconf.org/2023/talks/parallel" title="Parallel text replacement" data-slug="parallel"> <title> 10:10-10:25 Parallel text replacement</title> <rect x="109" y="15" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(130,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> parallel</text></g></a> <a href="https://emacsconf.org/2023/talks/eat" title="Eat and Eat powered Eshell, fast featureful terminal inside Emacs" data-slug="eat"> <title> 10:35-10:45 Eat and Eat powered Eshell, fast featureful terminal inside Emacs</title> <rect x="149" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(162,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eat</text></g></a> <a href="https://emacsconf.org/2023/talks/poltys" title="The browser in a buffer" data-slug="poltys"> <title> 11:00-11:20 The browser in a buffer</title> <rect x="188" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(217,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> poltys</text></g></a> <a href="https://emacsconf.org/2023/talks/cubing" title="Speedcubing in Emacs" data-slug="cubing"> <title> 11:35-11:55 Speedcubing in Emacs</title> <rect x="243" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(272,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> cubing</text></g></a> <a href="https://emacsconf.org/2023/talks/emms" title="Emacs MultiMedia System (EMMS)" data-slug="emms"> <title> 1:00- 1:40 Emacs MultiMedia System (EMMS)</title> <rect x="376" y="15" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(436,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emms</text></g></a> <a href="https://emacsconf.org/2023/talks/steno" title="Programming with steno" data-slug="steno"> <title> 1:55- 2:25 Programming with steno</title> <rect x="462" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(507,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> steno</text></g></a> <a href="https://emacsconf.org/2023/talks/mentor" title="Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)" data-slug="mentor"> <title> 2:35- 2:45 Mentoring VS-Coders as an Emacsian (or How to show not tell people about the wonders of Emacs)</title> <rect x="525" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(538,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mentor</text></g></a> <a href="https://emacsconf.org/2023/talks/web" title="Emacs saves the Web (maybe)" data-slug="web"> <title> 3:10- 3:40 Emacs saves the Web (maybe)</title> <rect x="580" y="15" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(625,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> web</text></g></a> <a href="https://emacsconf.org/2023/talks/sharing" title="Sharing Emacs is Caring Emacs: Emacs education and why I embraced video" data-slug="sharing"> <title> 3:55- 4:15 Sharing Emacs is Caring Emacs: Emacs education and why I embraced video</title> <rect x="650" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(679,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sharing</text></g></a> <a href="https://emacsconf.org/2023/talks/sun-close" title="Sunday closing remarks" data-slug="sun-close"> <title> 4:30- 4:40 Sunday closing remarks</title> <rect x="705" y="15" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(718,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sun-close</text></g></a> <a href="https://emacsconf.org/2023/talks/scheme" title="Bringing joy to Scheme programming" data-slug="scheme"> <title> 10:00-10:20 Bringing joy to Scheme programming</title> <rect x="94" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(123,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> scheme</text></g></a> <a href="https://emacsconf.org/2023/talks/world" title="GNU Emacs: A World of Possibilities" data-slug="world"> <title> 10:35-10:55 GNU Emacs: A World of Possibilities</title> <rect x="149" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(178,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> world</text></g></a> <a href="https://emacsconf.org/2023/talks/flat" title="A modern Emacs look-and-feel without pain" data-slug="flat"> <title> 11:10-11:20 A modern Emacs look-and-feel without pain</title> <rect x="203" y="75" opacity="0.8" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(216,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> flat</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsen" title="The Emacsen family, the design of an Emacs and the importance of Lisp" data-slug="emacsen"> <title> 11:35-11:55 The Emacsen family, the design of an Emacs and the importance of Lisp</title> <rect x="243" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(272,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsen</text></g></a> <a href="https://emacsconf.org/2023/talks/gc" title="emacs-gc-stats: Does garbage collection actually slow down Emacs?" data-slug="gc"> <title> 1:00- 1:35 emacs-gc-stats: Does garbage collection actually slow down Emacs?</title> <rect x="376" y="75" opacity="0.8" width="54" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(428,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gc</text></g></a> <a href="https://emacsconf.org/2023/talks/hyperdrive" title="hyperdrive.el: Peer-to-peer filesystem in Emacs" data-slug="hyperdrive"> <title> 1:50- 2:30 hyperdrive.el: Peer-to-peer filesystem in Emacs</title> <rect x="454" y="75" opacity="0.8" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="https://emacsconf.org/2023/talks/lspocaml" title="Writing a language server in OCaml for Emacs, fun, and profit" data-slug="lspocaml"> <title> 2:45- 3:00 Writing a language server in OCaml for Emacs, fun, and profit</title> <rect x="541" y="75" opacity="0.8" width="23" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(562,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspocaml</text></g></a> <a href="https://emacsconf.org/2023/talks/test" title="What I learned by writing test cases for GNU Hyperbole" data-slug="test"> <title> 3:15- 3:45 What I learned by writing test cases for GNU Hyperbole</title> <rect x="588" y="75" opacity="0.8" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(633,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> test</text></g></a> <a href="https://emacsconf.org/2023/talks/emacsconf" title="EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference" data-slug="emacsconf"> <title> 4:00- 4:20 EmacsConf.org: How we use Org Mode and TRAMP to organize and run a multi-track conference</title> <rect x="658" y="75" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(687,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacsconf</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></g></svg>
\ No newline at end of file |